我正在研究java swing中的一个接口。我们有一个与lan连接的四个系统。该接口用于从同一局域网中的另一个系统访问数据库我使用以下代码通过给出来访问数据库IP地址,数据库名称,表名但我无法连接其他系统数据库。我可以这样做吗?
public void dbconnection() {
String name = "";
String port = "3306";
String user = "systech";
String pass = "systech";
String dbname = "cascade_demo";
String host="192.168.1.61";
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://"+host+":"+ port + "/" + dbname;
System.out.println("URL:" + url);
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection(url, user, pass);
String qry2 = "select * from item_master";
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(qry2);
while (rs.next()) {
name = rs.getString(1);
System.out.println("Name:" + name);
}
rs.close();
st.close();
con.close();
} catch (Exception e) {
System.out.println("Exception:" + e);
}
}
答案 0 :(得分:2)
使用以下代码
public void dbconnection() {
String name = "";
String port = "3306";
String user = "systech";
String pass = "systech";
String dbname = "cascade_demo";
String host="192.168.1.61";
try {
String url = "jdbc:mysql://"+host+":"+ port + "/" + dbname;
Class.forName("com.mysql.jdbc.Driver").newInstance ();
Connection con = DriverManager.getConnection(url, user, pass);
String qry2 = "select * from item_master";
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(qry2);
while (rs.next()) {
System.out.println("Name:" + rs.getString(1));
}
rs.close();
st.close();
con.close();
} catch (Exception e) {
System.out.println("Exception:" + e);
}
}
另外,请确保包含用于连接的jar文件。您将获得jar文件here。
更新1:
所以,你有一个
CommunicationsException: Communications link failure
我引用this answer,其中还包含一步一步的MySQL + JDBC教程:
如果您获得
SQLException: Connection refused
或Connection timed out
或MySQL特定CommunicationsException: Communications link failure
,则表示根本无法访问该数据库。这可能有以下一个或多个原因:
- JDBC URL中的IP地址或主机名错误。
- 本地DNS服务器无法识别JDBC URL中的主机名。
- JDBC URL中缺少或错误端口号。
- 数据库服务器已关闭。
- 数据库服务器不接受TCP / IP连接。
- 数据库服务器已用完连接。
- Java和DB之间的某些东西阻止了连接,例如防火墙或代理。
醇>
要解决其中一个问题,请遵循以下建议:
- 使用
ping
验证并测试它们。- 刷新DNS或在JDBC URL中使用IP地址。
- 根据MySQL DB的
my.cnf
进行验证。- 启动数据库。
- 验证mysqld是否在没有
--skip-networking option
的情况下启动。- 重新启动数据库并相应地修改代码,以关闭
中的连接finally
。- 禁用防火墙和/或配置防火墙/代理以允许/转发端口。
醇>
更新2
command
。这将打开命令提示符。使用32字节数据对192.168.1.61 [192.168.1.61]进行Ping操作:
来自192.168.1.61的回复:bytes = 32 time = 101ms TTL = 124
如果你没有得到上述格式的东西,那么你的MYSQL服务器ip 192.168.1.61是不可访问的。请您的团队先启动服务器。 :(
如果你有Linux版本,请打开终端并按照步骤3进行操作。
另请查看以下链接。那些可能会帮助你...
答案 1 :(得分:1)
您应该下载jdbc driver并替换
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
通过
Class.forName("com.mysql.jdbc.Driver");
如果您在更换Obdc后仍有问题,请发布例外。 还要检查防火墙设置和数据库权限。
答案 2 :(得分:1)
如果您将获得异常,您的应用将无法释放系统资源。这会更好:
} finally {
try {
rs.close();
st.close();
con.close();
} catch( Exception e ) {
e.printStackTrace();
}
}