Как мне подключиться к базе данных 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>/";
Другие вопросы по тегам