JDBC与MySQL连接速度非常慢

时间:2014-10-22 01:57:04

标签: java mysql jdbc

目前我正在使用Java,并且一直在尝试在我的项目中实现数据库。下面是我当前连接数据库的代码(使用一个数据库,用户名和密码,硬编码,因为这是个人的):

try {
    Class.forName("com.mysql.jdbc.Driver");
    String connString = String.format("jdbc:mysql://%s:3306/%s?user=%s&password=%s", HOST, DB, USERNAME, PASSWORD);
    long then = System.currentTimeMillis();
    System.out.println("Connecting... ");
    this.conn = DriverManager.getConnection(connString);
    long now = System.currentTimeMillis();
    System.out.println("\tTIME ELAPSED: " + (now - then) / 1000);
} catch(SQLException e){
    e.printStackTrace();
    System.out.println("Couldn't get Connection");
    this.conn = null;
} catch (ClassNotFoundException e) {
    e.printStackTrace();
    this.conn = null;
}

但是,我已经缩小了DriverManager.getConnection()方法每次都要 23秒到我正在连接的数据库(即使是第一个连接建立)。我可以保证所有ResultSet对象和连接都已正确关闭,并且所有连接信息都有效。

我正在使用我学校的计算机科学提供的MySQL帐户,并且可以通过任何其他方式(MySQL Workbench等)验证连接速度是否缓慢。

我有什么遗漏可以做到这一点吗?在初始连接超快后查询数据库,只是连接本身非常慢。谢谢!

UPDATE:

我开始使用评论中提到的连接池(遵循Apache DBCP),问题仍然存在。这是我用来设置池的代码:

ds = new BasicDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
String connString = String.format("jdbc:mysql://%s:3306/%s", HOST, db);
ds.setUrl(connString);
ds.setUsername(USERNAME);
ds.setPassword(PASSWORD);
ds.setMaxActive(1000);
ds.setMaxWait(10000);
ds.setMaxIdle(10);
try {
    long then = System.currentTimeMillis();
    System.out.println("Connecting... ");
    this.conn = ds.getConnection();
    long now = System.currentTimeMillis();
    System.out.println("\tTIME ELAPSED: " + (now - then) / 1000);
} catch (SQLException e) {
    this.conn = null;
    e.printStackTrace();
}

更新2:

事实证明,当时我的家庭连接存在问题,而不是任何代码。 谢谢大家的帮助!

1 个答案:

答案 0 :(得分:0)

我怀疑它与HOST有关。你使用主机名连接?尝试将主机名映射到'等主机中的IP'文件,如果是这种情况。

查看Apache Commons DBCP,它允许您汇集数据库连接。 http://commons.apache.org/proper/commons-dbcp/