我正在编写一个程序来将东西推送到远程数据库中。我的数据库存储在一个redhat服务器上,而我的程序是在windows机器上编写的。
我不想透露我的服务器地址,但可以说我的Linux服务器是xx.xx.xx.xx8
Windows中的MySQL Workbench说我的mysql服务器主机是127.0.0.1:3306我知道有一百万个类似的问题,但每个问题都非常独特。
我一直在使用http://www.vogella.com/tutorials/MySQLJava/article.html#javaconnection作为指南,但这看起来像是本地连接。
我也一直在引用它,但这让我很困惑。
这是我认为可行的一些代码的模拟:
Connection connection = null;
String dburl = "jdbc:mysql://127.0.0.1:3306/Db_Name";
String userName = "user";
String passWord = "password";
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(dburl, userName, passWord);
Statement st = connection.createStatement();
String query = "INSERT INTO Example (`TestColumn`) VALUES('hello')";
int rsI = st.executeUpdate(query);
System.out.println("Hi");
}catch (Exception e) {
System.out.println(e);
} finally {
if (connection != null) {
try {
connection.close();
System.out.println("Database connection terminated");
} catch (Exception e) { /* ignore close errors */ }
}
}
基于我提供的链接。我改变的只是地址。我不知道服务器地址xx.xx.xx.xx8应该去哪里。
答案 0 :(得分:1)
要连接到远程数据库,您需要知道服务器的外部(或称为公共)IP地址。
String dburl = "jdbc:mysql://85.65.85.222:3306/Db_Name"
即使服务器上的数据库显示它侦听localhost:3306,您仍然可以使用具有正确端口的公共IP连接到它。 (假设您拥有对服务器的足够访问权限)
有时可能存在这样的情况:即使您知道远程服务器IP地址,您仍然无法直接连接到远程数据库,这可能是由于阻塞端口或其他ACL问题(如果您这样做,这是适用的)无法控制这一点)。但是,您可以创建到该服务器的ssh隧道并创建一个前向端口。
JSch jsch = new JSch();
Session session = jsch.getSession(user, host);
session.setPassword(password);
session.connect(timeout);
session.setPortForwardingL(listenPort, destHost, destPort);
示例ssh connnection可能如下所示:
ssh user@85.65.85.222 -Llocalhost:5050:127.0.0.1:3306
< - 这将创建一个带端口转发的ssh隧道,这意味着在您拥有代码和整个环境的本地计算机上,您仍然可以使用
String dburl = "jdbc:mysql://localhost:5050/dbname"
答案 1 :(得分:1)
只是为了让后来看到这个的人澄清......
localhost始终是您所坐的机器 - 始终。你无法使用localhost连接到远程盒子。此外,IP地址127.0.0.1相当于localhost,所以不要使用它。
您可能会看到数据库绑定到数据库服务器上的localhost或127.0.0.1。那没问题。在数据库连接URL
中使用运行数据库的服务器的IP地址mysql:jdbc://<IPOfServer>:<PortOfServer>/<DbName>).
您可以通过在数据库服务器上运行以下命令来找到服务器的IP地址...
Windows:ipconfig
Linux:ifconfig
祝你好运!答案 2 :(得分:0)
您可以看到documentation说的内容:
方法DriverManager.getConnection建立数据库 连接。此方法需要数据库URL,该URL会有所不同 取决于您的DBMS。以下是数据库的一些示例 网址:
MySQL:jdbc:mysql:// localhost:3306 /,其中localhost是其名称 托管数据库的服务器,3306是端口号
因此,对于MySQL Connector / J数据库URL
以下是MySQL Connector / J的数据库连接URL语法:
JDBC:MySQL的:// [主机] [,failoverhost ...] [:端口] / [数据库] [?propertyName1] [= propertyValue1] [&安培; propertyName2] [= propertyValue2] ...
其中:
host:port 是托管数据库的计算机的主机名和端口号。如果未指定,则主机和端口的默认值分别为127.0.0.1和3306。因此,您执行的每项操作都将应用于此帖
database是要连接的数据库的名称。如果未指定,则建立连接而不使用默认数据库。
更新:如果您有要访问的远程数据库(远程服务器),则应该具有以下功能:
String dburl = "jdbc:mysql://<REMOTE_HOST>:3306/Db_Name"; //replace with your remote host
... // here all the code related to your remote host
注意:如果远程服务器在其配置中有&#34; localhost&#34;你必须通过执行ifconfig
找出它的公共IP地址。然后在你的字符串上使用它的ip地址。作为重要,请注意您的远程服务器必须配置为允许远程连接。
答案 3 :(得分:0)
如果连接到服务器(即使用ip xx.xx.xx.xx8),则通过端口(通常为3306
)指定要连接到该计算机上的数据库服务器。所以简单地使用:
String dburl = "jdbc:mysql://xx.xx.xx.xx8:3306/Db_Name";
作为你的连接字符串。
如果您不知道端口,mysql正在运行,请查看/etc/mysql/my.cnf
文件。应该指定端口。
如果您无法连接并确保启用了远程连接,请查看您的防火墙规则(这是一个很好的教程来启用它:http://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html)。