您好,我对JDBC有一些问题,它太慢了,太难以置信了。
相同的代码在Windows与远程数据库的连接中非常完美。
但是对于松懈的软件,连接需要30秒,而第一次尝试总是失败的。我不得不做一个工作,让它再次尝试,以确保它的连接。但即便如此,也不应该太慢。
在bash中使用mysql命令似乎可以立即连接。
下面是用于创建数据库的代码
public static Object createDBConnection(String dbType, String host, String hostPort, String dbName, String userName, String password) {
String connectionString = buildConnectionString(dbType, host, hostPort, dbName, userName, password);
Connection connection = null;
try {
if(dbType.equals(K_dbTypeMySQL)){
Class.forName("com.mysql.jdbc.Driver");
}else if(dbType.equals(K_dbTypeSqlServer)){
Class.forName("net.sourceforge.jtds.jdbc.Driver");
}else if(dbType.equals(K_dbTypeSqlServerExpress)){
Class.forName("net.sourceforge.jtds.jdbc.Driver");
}else if(dbType.equals(K_dbTypePostgres)) {
Class.forName("org.postgresql.Driver");
}
connection = DriverManager.getConnection(connectionString);
return connection;
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
}
public static String buildConnectionString(String dbType, String host, String hostPort, String dbName, String userName, String password){
String connectionString = null;
if((dbType.equals(K_dbTypeMySQL))){
connectionString = "jdbc:mysql://" + host + ":" + hostPort + "/" + dbName + "?user=" + userName + "&password=" + password;
}else if((dbType.equals(K_dbTypeSqlServer)))
connectionString = "jdbc:jtds:sqlserver://" + host + ":" + hostPort + ";databaseName=" + dbName + ";selectMethod=cursor;user=" + userName + ";password=" + password;
else if((dbType.equals(K_dbTypeSqlServerExpress)))
connectionString = "jdbc:jtds:sqlserver://" + host + ":" + hostPort + ";databaseName=" + dbName + ";selectMethod=cursor;user=" + userName + ";password=" + password;
else if(dbType.equals(K_dbTypePostgres))
connectionString = String.format("jdbc:postgresql://%s:%s/%s?user=%s&password=%s",host,hostPort,dbName,userName,password);
return connectionString;
}我试过使用不同的驱动程序,但同样的事情,第一次尝试总是要永远连接(20秒),第二次需要大约2秒。
在尝试使用URLConnection打开https url时,我也遇到了同样的问题,第一次总是失败,第二次没有问题。
有人对这个问题有洞察力吗?既然我在用java打开HTTPS url时有问题,那么SSL可能有问题吗?mysql是否以任何方式使用SSL?
服务器版本: 5.1.41
宿主:本地主机
jdbc驱动程序: 5.1.8、5.1.12、5.1.17 (都有相同的问题)
java : root@LinuxMZ:~/nx_dev/sicm# Java -version java版本"1.6.0_06“Java(TM) SE运行时环境(build 1.6.0_06-b02) java HotSpot(TM)客户端VM (build 10.0-b22,混合模式,共享)
//编辑127.0.0.1和localhost做同样的问题
谢谢你的帮助
还没什么,DBManager.createConnection挂了20秒。我试着从另一台机器连接,它运行得完美无缺。
发布于 2011-10-03 19:26:06
当查找您指定的名称时,30秒闻起来就像是DNS超时。
您可以使用IP地址作为主机名来确认这一点。
发布于 2013-04-27 21:15:01
看起来MySQL正在尝试使用nslookup来解析客户机。在当前的上下文中,客户端有127.0.0.1或192.168.1.XXX,我认为这是由于/etc/中的命名错误所致。如果没有错误的条目,请查看该文件!
https://stackoverflow.com/questions/7639588
复制相似问题