目前我正在使用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等)验证连接速度是否缓慢。
我有什么遗漏可以做到这一点吗?在初始连接超快后查询数据库,只是连接本身非常慢。谢谢!
我开始使用评论中提到的连接池(遵循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();
}
事实证明,当时我的家庭连接存在问题,而不是任何代码。 谢谢大家的帮助!
答案 0 :(得分:0)
我怀疑它与HOST有关。你使用主机名连接?尝试将主机名映射到'等主机中的IP'文件,如果是这种情况。
查看Apache Commons DBCP,它允许您汇集数据库连接。 http://commons.apache.org/proper/commons-dbcp/