Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 读取jdbc结果集的速度很慢_Java_Sql Server_Jdbc - Fatal编程技术网

Java 读取jdbc结果集的速度很慢

Java 读取jdbc结果集的速度很慢,java,sql-server,jdbc,Java,Sql Server,Jdbc,我正在从一个结果集读取数据,它看起来很慢(也许,很遗憾,这正是你可以得到的速度) 我在读568365行5列。我已经分解了代码并添加了计时器,以查看在哪里花费的时间最多 ResultSet.next() - about 65ms ResultSet.wasNull() - about 150ms ResultSet.getString/Double() - about 1000ms 因此,我希望减少获得弦乐/双打的时间 我的连接正在创建: DriverManager.getConnection(

我正在从一个结果集读取数据,它看起来很慢(也许,很遗憾,这正是你可以得到的速度)

我在读568365行5列。我已经分解了代码并添加了计时器,以查看在哪里花费的时间最多

ResultSet.next() - about 65ms
ResultSet.wasNull() - about 150ms
ResultSet.getString/Double() - about 1000ms
因此,我希望减少获得弦乐/双打的时间

我的连接正在创建:

DriverManager.getConnection("jdbc:sqlserver://server:1433;databaseName=dbname", "user", "pass")
conn.createStatement()
我的发言:

DriverManager.getConnection("jdbc:sqlserver://server:1433;databaseName=dbname", "user", "pass")
conn.createStatement()
我试着玩“setFetchSize”(1000、10000、500000)和“selectMethod=cursor/direct”,但运气不好

我只知道如何循环和检索数据,所以如果有任何其他点击或设置,我可以尝试给JDBC

我的代码是(带计时器):

private List getResultRows(ResultSet queryResult)抛出SQLException{
列表行=新建ArrayList();
ResultSetMetaData rsmd=queryResult.getMetaData();
int colNumber=rsmd.getColumnCount();
int[]colTypes=新int[colNumber];
for(int i=0;i
在您看来,为什么1000毫秒读取568365行的5列速度慢?我猜“next()”会是慢的部分。它不是要到服务器上获取一大块行吗?为什么从resultset读取单元格的速度很慢?它不是已经在记忆中了吗?(事实上,我在其他帖子中也看到有人抱怨“next()”速度慢,而不是阅读速度慢);这在很大程度上取决于驱动程序的实现,等等。首先,获取大小使得它可以分块检索,网络本身可以用作缓冲区:驱动程序可以提前请求更多行,并且只有在真正需要时才从流中读回这些行。第二,将原始字节解码并转换为请求的值可能需要大量时间。那么,我是否可以尝试减少时间?有什么关于jdbc的提示吗?正如我之前所说的,您首先需要问问自己,这是否真的很慢。四舍五入时,您可能会在568365行上花费1.3秒,即每行2.2微秒。