问候,我对JDBC有一些问题,它的速度太慢了。
相同的代码适用于Windows与远程数据库的连接。
但是对于slackware,连接需要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网址时遇到同样的问题第一次总是失败,第二次没问题。
有人对此问题有任何见解吗? 由于我在使用java打开HTTPS url时遇到问题,可能是SSL有些问题? mysql以任何方式使用SSL吗?
服务器版本:5.1.41
host:localhost
jdbc驱动程序:5.1.8,5.1.12,5.1.17(都有相同的问题)
java build: root @ LinuxMZ:〜/ nx_dev / sicm#java -version java版“1.6.0_06” Java(TM)SE运行时环境(版本1.6.0_06-b02) Java HotSpot(TM)客户端VM(版本10.0-b22,混合模式,共享)
// EDIT 127.0.0.1和localhost做同样的问题
谢谢你的帮助
还没有,DBManager.createConnection挂起20秒。我尝试从另一台机器连接,它完美无缺。
答案 0 :(得分:2)
您可以使用IP地址作为主机名来确认。
答案 1 :(得分:0)
看起来MySQL正在尝试使用nslookup来解析客户端。在当前上下文中,客户端具有127.0.0.1或192.168.1.XXX。我认为这是由于 / etc / hosts 中的错误命名。如果没有错误的条目,请查看该文件!