问候,我有一些JDBC问题,它太慢了,它不可信。Slackware 12真的很慢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 url始终失败,第二次没有问题时,也有同样的问题。
任何人有任何关于这个问题的见解? 因为我用java打开HTTPS url有问题,可能是SSL的问题? MySQL以任何方式使用SSL?
服务器版本:5.1.41
主机:本地主机
JDBC驱动程序:5.1.8,5.1.12,5.1.17(都有同样的问题)
Java构建: 根Java™版本“1.6.0_06” Java™SE运行时环境(版本1.6.0_06-b02) Java HotSpot™客户端VM(版本10.0-b22,混合模式,共享)
//编辑 127.0.0.1和本地主机做了同样的问题
感谢您的帮助,但
没什么,DBManager.createConnection挂起20秒。我尝试从另一台机器连接,并且工作完美无瑕。
您是否尝试过使用VisualVM进行分析以查看它是否显示明显的慢点? – millimoose
不,我不这么做,不幸的是它是一台嵌入式计算机,我在ssh旁边没有任何GUI。没有安装窗口管理器 – gimpycpu
如果它运行Sun JDK,则仍然可以通过启用JMX来远程运行VisualVM。如果您无法直接访问JMX端口,请通过ssh进行端口转发。 –