Slackware 12真的慢了JDBC

时间:2011-10-03 19:18:01

标签: java mysql performance jdbc connection

问候,我对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秒。我尝试从另一台机器连接,它完美无缺。

2 个答案:

答案 0 :(得分:2)

查找你给出的名字时,30秒闻起来像DNS超时。

您可以使用IP地址作为主机名来确认。

答案 1 :(得分:0)

看起来MySQL正在尝试使用nslookup来解析客户端。在当前上下文中,客户端具有127.0.0.1或192.168.1.XXX。我认为这是由于 / etc / hosts 中的错误命名。如果没有错误的条目,请查看该文件!