可以用同步来实现,每次只允许一个线程执行sql操作啊
解决方案 »
- [android]activity中创建一个dialog,在dialog中如何调用activity的函数?
- 请问为什么我这个正则表达式提示错误
- JAVA怎么抓取 window.open 打开的网页内容
- 请问, 这样设计线程合理吗?
- 求达人帮忙啊,救急
- 求判定字符串是否全是数字的方法?(解决就给分,顶者有分)
- 关于 JTree 树展开状态保存的问题(在线等待,十分紧急)
- java中有类似C中的select(...)函数吗?
- ant有类似于批处理for命令的task吗?
- 连接Acess数据库
- 哪位高手知道如何在java程序中取出windows系统中的证书和私钥
- 如何通过Socket获得客户端的IP地址?
try { PrintWriter out = new PrintWriter(new
FileOutputStream(filename + ".txt"));
Statement stmt = DBConnection.getStatement();
ResultSet rs = stmt.executeQuery(sql);
setStatus("Finished getting result sets"); int i = 0; while (rs.next()) {
for(int j=0;j<columns.length;j++){
//写入文件,PrintWriter是自动buffered的吧?
out.print(rs.getString(columns[j]));
}
out.println();
i++;
setStatus("progress:" + i);
try {
sleep(1);
}
catch (InterruptedException ex1) {
ex1.printStackTrace();
}
}
setStatus("Finished");
rs.close();
stmt.close();
out.close();
}
catch (SQLException ex) {
ex.printStackTrace();
}
catch (FileNotFoundException ex) {
ex.printStackTrace();
}
System.out.println("over");
}
因为获取ResultSet每个线程只调用一次,并且没有公用的变量。刚才试了,加synchronized关键字,效果和原来一样,而且可能是因为同步的原因,速度变慢了。
对这个stmt同步,保证不同的线程得到的stmt不同。
if (null == getConnection()) {
return null;
}
try {
return getConnection().createStatement();
}
catch (SQLException ex) {
return null;
}
}
问题是,如果我的线程多了的话,岂不是要创建太多的连接?这肯定不是最好的解决的办法,但我实在是想不清为什么公用一个Connection,不公用Statement也会有问题?
你每个线程都创建一个Connection的话,就没有你一开始遇到的停留问题吗,我认为肯定是由影响的,连接池一般不会超过1000把,我想你的测试是否有问题。
你所说的1百万的连接是因为还来不及释原先的连接,所以停住了。