首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Java通过SSH连接到MySQL

使用Java通过SSH连接到MySQL
EN

Stack Overflow用户
提问于 2014-08-14 20:14:18
回答 1查看 2.1K关注 0票数 0

我想使用Java连接到亚马逊EC2服务器上的MySQL数据库。我可以使用Jsch库创建ssh隧道并将端口转发到该服务器,但是连接到DB总是会出现异常

java.io.EOFException:无法从服务器读取响应。预期读取4个字节,在连接意外丢失之前读取0个字节。

我想我和黑(SSH tunneling to remote access MySQL database)的处境是一样的。

下面是我的代码:

代码语言:javascript
复制
    public static void main(final String[] args) throws SQLException {
            final int lport = 3306;
            final String host = "xxx.xxx.xxx.xxx";
             final String rhost = "xxx.xxx.xxx.xxx";
             final int rport = 3306;
            final String user = "user";
            final String dbuserName = "user";
             final String dbpassword = "password";
            final String dburl = "jdbc:mysql://localhost:" + rport  + "/information_schema?useUnicode=true&characterEncoding=UTF-8";
             final String driverName = "com.mysql.jdbc.Driver";
             Session session = null;

            try {
                //Set StrictHostKeyChecking property to no to avoid UnknownHostKey issue
                final java.util.Properties config = new java.util.Properties();
                config.put("StrictHostKeyChecking", "no");
                final JSch jsch = new JSch();
                session = jsch.getSession(user, host, 22);
                jsch.addIdentity("path\\to\\pemfile.pem");
                session.setConfig(config);
                session.connect();
                System.out.println("Connected");
                final int assinged_port = session.setPortForwardingL(lport, rhost, rport);
                System.out.println("localhost:" + assinged_port + " -> " + rhost + ":" + rport);
                System.out.println("Port Forwarded");

                //mysql database connectivity
                Class.forName(driverName).newInstance();
                dbConn = DriverManager.getConnection(dburl, dbuserName, dbpassword);

                System.out.println("Database connection established");
                System.out.println("DONE");

            } catch (final Exception e) {
                e.printStackTrace();
            } finally {
                if (dbConn != null && !dbConn.isClosed()) {
                    System.out.println("Closing Database Connection");
                    dbConn.close();
                }
                if (session != null && session.isConnected()) {
                    System.out.println("Closing SSH Connection");
                    session.disconnect();
                }
            }
        }

有人能帮助解决这个问题吗?谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-03-09 12:09:07

我在使用AppFog (在亚马逊网络服务的前面)时遇到了完全相同的问题。解决此问题的唯一方法是从我的连接字符串中删除以下内容:

代码语言:javascript
复制
"?useUnicode=true&characterEncoding=UTF-8"

当然,您应该确保这不会影响您的应用程序需求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25307825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档