使用 Java 通过 SSH 连接到 MySQL

2024-04-15

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

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

我想我和Hei陷入了同样的境地(通过 SSH 隧道远程访问 MySQL 数据库 https://stackoverflow.com/questions/14976504/ssh-tunneling-to-remote-access-mysql-database)

这是我的代码:



    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();
                }
            }
        }

任何人都可以帮助解决这个问题吗?谢谢


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

"?useUnicode=true&characterEncoding=UTF-8"

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Java 通过 SSH 连接到 MySQL 的相关文章

  • 错误org.springframework.beans.factory.BeanCreationException:创建类路径资源中定义的名为“entityManagerFactory”的bean时出错

    我想将我的 java CRUD 应用程序与红色节点连接 但当我运行 Java 应用程序时 我总是收到此错误 我试图解决它 但我不能 这是错误 2022 05 10 11 33 43 959 INFO 12192 restartedMain
  • flink - 使用匕首注入 - 不可序列化?

    我使用 Flink 最新通过 git 从 kafka 流式传输到 cassandra 为了简化单元测试 我通过 Dagger 添加依赖注入 ObjectGraph 似乎已正确设置自身 但 内部对象 被 Flink 标记为 不可序列化 如果我
  • 更改表以给出外键约束

    我有一个表 其中有 2 列 是从两个不同的表复制的 我现在要做的是对列名 email 和 id 给出外键约束 如下所示 ALTER TABLE users role map ADD CONSTRAINT FK users role map
  • 将 Java 8 Lambda 函数转换为 Java 7

    嘿 我是编码新手 我已经掌握了 Java 8 的 Lambda 函数 但我正在尝试将我为学校项目编写的一些代码转换为 Java 7 但我无法理解关于如何使这段代码在功能上相同 但在 java 7 中 很抱歉 如果这是一个愚蠢的问题 但我似乎
  • 如何向多个涉及外键依赖的表插入数据(MySQL)

    我正在寻找将数据插入多个 MySQL 表的最佳实践方法 其中某些列是外键依赖项 这是一个例子 Table contacts contact id first name last name prof id zip code 联系人 表有主键
  • 从 JVM 线程本地空间卸载 Clojure 变量

    我正在 Clojure 中为 BaseX 编写一个插件 通过 lein uberjar 构建 并包含 Clojure 解释器 在大多数情况下 这效果很好 然而 当通过 BaseX HTTP 实例运行时 评估在 Jetty 的线程池内进行 而
  • JAVA - 路径问题(在 Eclipse 中有效,在 cmd 中无效)

    为什么下面的启动在 Eclipse 中有效 private static MaxentTagger maxentTagger new MaxentTagger c DP lemma models english left3words dis
  • MySQL - 选择字符串的前 10 个字节

    各位聪明的男士女士们 大家好 如何选择字符串的前 x 个字节 用例 我正在优化产品描述文本以上传到亚马逊 亚马逊按 utf8 中的字节 不是我之前所说的 latin1 而不是字符来测量字段长度 另一方面 MySQL 似乎是基于字符进行操作的
  • 测试 powermock 模拟客户端调用的 http 服务器超时

    我需要为 connectTimeout 和 SocketTimeout 异常编写测试用例 我使用 powerMock 创建模拟对象 下面是我的代码 但是我的模拟对象出现空指针异常 任何帮助表示赞赏 package com util impo
  • 在学说监听器中插入元素

    我已经设置了一个学说监听器 它在不同的数据库操作上触发并创建一个日志实体并将其插入数据库 class FOO public function onFlush OnFlushEventArgs args foreach args gt get
  • csharp类可以像java类一样“继承”xml文档吗?

    我正在向一些csharp代码添加注释 并且我正在使用 net 或其他东西 提供的xml语言 我有一个接口和一些实现类 我在界面中有一个方法 它有一个注释 在实现类中没有对实现方法进行注释 当人们在java中这样做时 javadoc在生成文档
  • 使用 Scanner 类输入

    我从过去的经历中了解到的是nextInt or nextDouble 将继续搜索 直到在同一行或下一行中找到整数或双精度数 这并不重要 同时通过扫描器类读取字符串作为输入next 考虑空格之前的那些字符串并将光标保持在同一行 其中nextL
  • AngularJS 和 Webpack 集成

    我正在寻找一些使用帮助webpack http webpack github io docs 对于大型 AngularJS 应用程序 我们使用基于功能的文件夹结构 每个功能 页面都有一个模块 并且它们有控制器 指令 我已经成功配置了 web
  • 如何从Java中的sqlite中的多个表中进行选择?

    我正在尝试学习如何在 java 程序中使用 sqlite 数据库 不是安卓 我去了this https bitbucket org xerial sqlite jdbc overview链接 下载 jdbc 库并复制示例 该示例运行正常 没
  • 带有 CompletableFuture 的 MDC 记录器

    我正在使用 MDC Logger 除了一种情况外 它对我来说非常适合 无论我们在代码中的何处使用 CompletableFuture 对于创建的线程 MDC 数据都不会传递到下一个线程 因此日志会失败 例如 在代码中我使用下面的代码片段来创
  • mysql JOIN,这是如何解释的?

    如果我为 mysql 编写一条 sql 查询 并且只指定 JOIN 没有外连接 内连接 左连接等 那么默认的连接类型是什么 例如 SELECT count FROM Students p JOIN 班级 c ON p studentId c
  • GSON 解析空日期字段时抛出异常

    我正在使用 GSON 反序列化一些 JSON JSON 是 employee id 297 surname Maynard givenname Ron lastlogin 员工对象有一个日期字段lastlogin public class
  • “[B”是什么样的 Java 类型?

    我正在尝试通过 Java 代码 Hibernate 从 MySQL DB 获取 MD5 加密密码 但我既得不到 Strong 也得不到任何合理的 Java 类型 我唯一收到的是这条无用的消息 java lang ClassCastExcep
  • 变量范围的 Java 文档 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 任何人都可以指导我查看 java 文档以了解变量的范围 我想查看 java 8 中的类变量和成员变量的
  • Maven 依赖项插件无法解析插件的手动指定依赖项

    我遇到了一个问题maven dependency plugin Maven版本3 2 3 maven dependency plugin版本2 10 我正在尝试引入插件依赖项 我创建了一个简单的项目

随机推荐

  • 使用 JQuery 将事件处理程序添加到 iframe

    我想将 keydown 事件处理程序分配给 iframe 类似于纯JS的东西 document getElementById iframe id contentWindow addEventListener keydown funcName
  • 生成加权随机数

    我正在尝试设计一种 好的 方法从一系列可能的数字中选择一个随机数 其中该范围内的每个数字都被赋予一个权重 简单地说 给定数字范围 0 1 2 选择一个数字 其中 0 有 80 的概率被选中 1 有 10 的概率 2 有 10 的概率 自从我
  • Angular - Google 未定义?

    你好 我正在尝试实施google maps api in angular 这很简单angularjs但我不知道什么不起作用 我有一个简单的应用程序 它显示产品及其位置 单击位置后 该位置会显示在地图上 但我正在使用的购物地图google m
  • R 中曲线下增量面积 (iAUC)

    曲线下面积可以使用以下公式计算trapz的功能pracmaR iAUC 中的包在许多情况下更加准确 特别是在生物学中 然而据我所知 没有 R 函数可以计算这个 陷阱函数如下 Example a lt c 1 4 5 6 b lt c 2 4
  • 如何使用 apache 设置 mpeg dash 服务器?

    我想在 ubuntu 10 04 上设置本地 mpeg dash 服务器 那么分别安装apache和mpeg dash编码器后该怎么办呢 thanks 只需将 MPD 和破折号段放入 apache htdocs 文件夹即可 如果您的 MPD
  • Python 中使用 lxml 进行 Schematron 验证:如何检索验证错误?

    我正在尝试使用 lxml 进行一些 Schematron 验证 对于我正在处理的特定应用程序 重要的是报告任何未通过验证的测试 这lxml文档 http lxml de validation html提到了存在validation repo
  • ADB Shell 输入事件

    之间的基本区别是什么adb shell input keyevent and adb shell sendevent 我应该使用哪一个来输入字符 我们传递给这两个命令的键码是否相同 By adb shell input keyevent 或
  • 如何防止无名结构\联合?

    我正在构建一个具有矩阵数据联合的类 但是 只有当我没有结构 联合的名称时 我才能对其进行编译 但是 如果警告级别更高 视觉工作室为四级 我会发出警告说 warning C4201 nonstandard extension used nam
  • 帮助我验证 url 是否应该接受 .me 域

    var tomatch http A Za z0 9 3 A Za z 3 if tomatch test theurl window alert URL OK return true 我尝试了这个正则表达式代码来验证 url 当我尝试验证
  • 这段代码是否受 C 标准保证?

    我读过 如果你声明两个这样的结构 struct Node int a b c struct DerivedNode struct Node base int d e f 然后你可以像这样使用指向它们的指针 struct DerivedNod
  • tf.sign 如何与反向传播一起工作?

    我从 TensorFlow 开始 尝试创建一个二进制网络 更具体地说 我正在寻找一个哈希网络 它将图像编码为大小为 n 的二进制向量 所以我有一个经典的网络 我对softmax之前的最后一层进行二值化 TensorFlow 提供了一个tf
  • WCF/Silverlight:为什么使用 ChannelFactory 而不是客户端?

    在继承的项目中 使用 ChannelFactory 而不是 Client 进行 WCF 调用 为什么要这么做 另外 缓存 ChannelFactory CreateChannel 调用的结果是否安全 还是应该每次创建一个新的结果 创建 WC
  • 在python中查找日期范围重叠

    我试图找到一种更有效的方法来根据特定列 id 在数据框中查找重叠的数据范围 每行提供的开始 结束日期 数据框按 来自 列排序 我认为有一种方法可以避免双重apply像我一样运行 import pandas as pd from dateti
  • docker-compose 日志记录不适用于 syslog 选项

    我有以下 docker compose 配置 version 3 services worker image image logging driver syslog options syslog address udp XXX papert
  • 如何创建文件名中包含空字节的文件?

    对于安全测试 我需要传递一个内容和文件名中包含空字符的文件 对于body内容来说 很容易使用printf printf Hello 00 Null gt containsnull txt xxd contains null 0000000
  • 为什么这里不省略复制构造函数?

    我正在使用 gcc 与 O2 这似乎是一个消除复制构造函数的直接机会 因为访问 a 中字段的值没有副作用 bar的副本foo 但复制构造函数is调用 因为我得到了输出meep meep include
  • 有人可以提供带有显式起源列表的 CorsPolicy 实现吗?

    参考SignalR 集线器 API 指南 http www asp net signalr overview guide to the api hubs api guide javascript client crossdomain 配置注
  • 从 JSON SQL 查询中删除反斜杠

    我正在使用 SQL Server 查询构造 JSON 对象 我对斜杠有疑问 而且我需要特定格式的数据 如下所述 实际输出中有斜线 我想从输出查询中消除斜杠 SELECT SELECT value cast ISNULL SP ACCOUNT
  • Facebook——使用 event 和 event_member 进行 FQL“加入”的最佳方式?

    在 Facebook 应用程序中 我需要获取用户在某个日期范围内的事件以及每个事件的回复状态 我可以很好地获取用户的事件 但目前我正在一次查找每个事件的 rsvp 状态 并且对于具有大量事件的人来说 该应用程序正在超时 我通过这种方式获取用
  • 使用 Java 通过 SSH 连接到 MySQL

    我想使用 Java 连接到 Amazon EC2 服务器上的 MySQL 数据库 我可以使用 Jsch 库创建 ssh 隧道并将端口转发到该服务器 但是连接到数据库总是以异常结束 java io EOFException 无法从服务器读取响