Как мне подключиться к базе данных MySQL, расположенной на сервере Namecheap через java jdbc?
Packet for query is too large (4739923 > 1048576).
You can change this value on the server by setting the max_allowed_packet' variable.
Эта ошибка - конец меня. На сервере, к которому я пытаюсь получить доступ, этот max_allowed_packet намного больше, чем 1 048 576.
У меня было адское время, чтобы решить эту проблему, прибегая к как можно большему количеству форумов. Это должно быть довольно просто. Я хочу подключиться к базе данных MySQL на моем сервере namecheap из программы Java на моем компьютере. У меня есть IP-адрес, порт для SSH. Я могу получить полный доступ к базе данных и запросить из MySQL Workbench.
Вот мой код
package testingdb;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.JSch;
import com.mysql.jdbc.Driver;
public class DatabaseTesting {
public static void main(String[] args) {
String huser = "user";
String hpass = "*********";
String userName = "username_user";
String password = "*********";
String host = "<My web server>";
String url = "jdbc:mysql://<My Web Server>:<port>/";
Session session= null;
try {
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
session = jsch.getSession(huser, host, <port>);
session.setConfig(config);
session.setPassword(hpass);
session.connect();
System.out.println("Connected through SSH");
session.setPortForwardingL(3306, "127.0.0.1", <port>);
Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println("Logging into Database: "+ userName);
Connection con = DriverManager.getConnection(url, userName, password);
System.out.println("Server connected successfully");
//Statement st = con.createStatement();
//ResultSet results = st.executeQuery("SELECT * FROM NPC_DATA");
//System.out.println(results);
}
catch(Exception e) {
System.out.println("connection failed . . .");
System.out.println(e.getMessage());
}
}
}
Мой hpass и user, и это все правильно, когда я их набираю (я их спрятал по понятным причинам) Я не уверен, что может пойти не так. Помощь сказала мне, что Namecheap не работает с Java, но должно ли это иметь значение, если мой клиент использует JAVA для подключения к Серверу? Огромное спасибо.
1 ответ
Не могли бы вы попытаться изменить эти строки?
session.setPortForwardingL(<local port>, "<My web server>", <remote port>);
Это создаст локальный порт для прослушивания удаленного порта на вашем веб-сервере. Теперь вам нужно установить соединение с вашим локальным портом, чтобы URL изменился на:-
String url = "jdbc:mysql://localhost:<local port>/";