如下一段代码, 其中myArray为一个存储数据的数组:
// 建立Connection
for(int i = 0; i < myArray.length; i ++){
link = myArray[i];
if(link == null)
continue;
else
link = link.replaceAll("'", "''");
String query = "Select Top 1 a_id From _osd_article Where link='" + link + "'";
Statement s = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = s.executeQuery(query);
boolean have = rs.next();
rs.close();
s.close();
if(have)
continue;
}
// 释放Connection...
执行之后发现Select的速度非常的慢, 并且在执行的过程中出现CPU使用率100%的情况. 查阅了一些资料, 原来是由于SQL Server JDBC 1.0默认的SelectMethod为direct造成的. 在direct模式下, 每一个Connection必须只对应一个Statement, 所以在查询的时候系统资源占用非常的高; 另外, direct模式下也容易产生互锁的事务. 如果修改为cursor模式就可以了. 关于驱动连接的参数以及详细的说明可以见参考资料.
参考资料:
Why is com.microsoft.jdbc.sqlserver.S-QLServerDriver so slow?
http://groups.google.com/group/microsoft.public.sqlserver.jdbcdriver/browse_thread/
thread/c11b52262f313bcb/c293b3aef59bb71a?q=select+slow&rnum=2
(SQL Server JDBC) Connection String Properties
http://www.csuchico.edu/computing/JAVAINFO/MS_SQLSERVER.JDBC/jdbcsqlsrv3.html
JDBC连SQL SERVER数据库常见问题
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=123&threadID=18621