use*_*977 0 java csv optimization jdbc
我正在尝试从表中检索数据并将每行转换为CSV格式
s12,james,24,1232,Salaried
下面的代码完成了这项工作,但需要很长时间,行表超过1,00,000.
请告知优化技术:
while(rset1.next()!=false) {
sr=sr+"\n";
for(int j=1;j<=rsMetaData.getColumnCount();j++)
{
if(j< 5)
{
sr=sr+rset1.getString(j).toString()+",";
}
else
sr=sr+rset1.getString(j).toString();
}
}
Run Code Online (Sandbox Code Playgroud)
/ SR
Ste*_*ker 15
两种方法,按优先顺序排列:
流输出
PrintWriter csvOut = ... // Construct a write from an outputstream, say to a file
while (rs.next())
csvOut.println(...) // Write a single line
Run Code Online (Sandbox Code Playgroud)
(请注意,您应该确保缓存Writer/OutputStream,尽管默认情况下有很多)
使用StringBuilder
StringBuilder sb = new StringBuilder();
while (rs.next())
sb.append(...) // Write a single line
Run Code Online (Sandbox Code Playgroud)
这里的想法是在循环中附加字符串是一个坏主意.想象一下,你有一个字符串.在Java中,字符串是不可变的.这意味着要附加到字符串,您必须复制整个字符串,然后将更多内容写入结尾.由于您一次添加一些内容,因此您将拥有许多字符串副本,这些副本并不是真正有用.
如果您正在写入文件,那么直接使用流或Writer进行编写是最有效的.否则,您可以使用StringBuilder,它可以更有效地将许多小字符串附加到一起.
我不是Java专家,但我认为在条件检查中使用像getColumnCount()这样的东西总是不好的做法.这是因为在每个循环之后,它运行该函数以查看列数是多少,而不是仅仅引用静态数字.相反,设置一个等于该数字的变量,并使用该变量与j进行比较.
| 归档时间: |
|
| 查看次数: |
351 次 |
| 最近记录: |