请问JAVA ODBC编程ResultSet多线程的问题

问题描述

请问JAVA ODBC编程ResultSet多线程的问题

使用ResultSet取得SQL查询的结果,并对每个next进行处理,写入文件中:
File c=new File("E:test.txt");
FileWriter x = new FileWriter(c);
Statement stat = conn.createStatement();
ResultSet resultSet = stat.executeQuery(sql);
String result = "";
while(resultSet.next()) {
for (int i = 0; i < 100; i++) {
result = result + resultSet.getString(DEF_COLUMN(i));
}
x.write(result);
}
...
然后觉得速度太慢,想要把字符串处理放到线程中(以下简写)
LinkedBlockingQueu queue = new LinkedBlockingQueu(20);
thread 1:
do {
String result = "";
for (int i = 0; i < 100; i++) {
result = result + resultSet.getString(DEF_COLUMN(i));
}
queue.put(result);
}while(resultSet.next());
thread2:
do {
String result = queue.take();
x.write(result);
}while(!queue.isEmpty());
像上面的形式,当thread1开启一个的时候没有问题。但当开启多个thread1时,resultSet在for循环时不能被其他线程执行next否则报错,没办法只能加锁,这样虽然使用了多线程,但thread1被强制转换成单线程,速度并没有多大提升。所以我想问有没有提升resultSet的fetch速度的好方法。
ps:使用ResultSet localSet = reultSet; 尝试了一下,哈哈,localSet只是resultSet的一个引用,并没有把数据复制到localSet中,localSet.next()的时候另一个线程还是会报错。这种办法不可行。

解决方案

result = result + resultSet.getString(DEF_COLUMN(i));
用StringBuffer代替直接+运算连接,可以优化性能。

多线程没必要。

时间: 2024-09-29 17:43:07

请问JAVA ODBC编程ResultSet多线程的问题的相关文章

请问Java Swing编程里怎样将一个Image里的数据复制到另一个Image里?

问题描述 请问Java Swing编程里怎样将一个Image里的数据复制到另一个Image里? 请问如何将一个Image里的所有数据复制到另一个Image(比如Image2)里?让Image里的数据与Image2里的数据相同,对Image的数据进行操作时,对Image2无影响 解决方案 http://www.iteye.com/problems/80309

JAVA网络编程服务器多线程接受套接字,如何能使服务器的静态常量,与客户端的数据进行同步?

问题描述 JAVA网络编程服务器多线程接受套接字,如何能使服务器的静态常量,与客户端的数据进行同步? 服务器Server客户端CLientServer静态常量num创建服务器,ServerSocket的端口号为8000,连接套接字.每创建一个客户端,客户端就创建一个Socket,端口号为8000,与服务器进行连接,与此同时,客户端新建ServerSocket,端口号为3000+Server.num,连接套接字.服务器与客户端连接后,服务器新建子线程Handler.子线程Handler,新建Ser

Java 数据库编程 ResultSet 的 使用方法

结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等.  结果集读取数据的方法主要是getXXX() ,他的参数可以使整型表示第几列(是从1开始的),还可以是列名.返回的是对应的XXX类型的值. 如果对应那列时空值,XXX是对象的话返回XXX型的空值,如果XXX是数字类型,如Float等则返回0,boolean返回false. 使用getString()可以返回所有的

请问java图形界面编程中怎样改变消息提示框中确定按钮的文本内容啊?

问题描述 请问java图形界面编程中怎样改变消息提示框中确定按钮的文本内容啊? 问题补充:恩恩,swing的!请问怎么改啊?xiaolv 写道 解决方案 JOptionPane.setDefaultLocale(Locale.CHINA);JOptionPane.showMessageDialog(null, "11", "22",JOptionPane.INFORMATION_MESSAGE);这个按钮自动集成多语言.只能通来Locale来改.想要OK就用Loca

关于java问题-java数据库编程odbc驱动连接

问题描述 java数据库编程odbc驱动连接 我做了一个java数据库程序,有一个登录界面,我将数据库用户名和密码作为登录密码,但登录时输入也能连接成功,代码去下connection con=DriverManager.getConnection("jdbc:odbc:JAVASQL",local,key);求大神指点 解决方案 http://blog.csdn.net/paopaomm/article/details/6272405 解决方案二: java通过odbc连接各种数据库J

java网络编程HttpsURLConnection

问题描述 java网络编程HttpsURLConnection 我写了一个多线程下载测试程序 照着教程做的 但运行提示错误这个语句HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();提示错误 sun.net.www.protocol.http.HttpURLConnection cannot be cast to javax.net.ssl.HttpsURLConnection其中rul 为 URL url =

Java socket编程入门

编程 第一章:学习提示 我适合学习这份教程吗 Socket提供了两台计算机之间进行通讯的机制,在James Gosling注意Java语言之前就已经很闻名了.Java语言使你更简单有效的使用Socket开发而无需了解操作系统的底层机制.大部分讨论Java编码的书籍都没有涉及这一主题,或者是只是"点到为止",留给读者大量的想象空间.这份教程就是让你了解在你的Java代码中如何更有效的使用Socket所需的知识.包含以下内容: •什么是Socket •它位于你的应用程序的哪些地方 •能正常

Java socket编程入门[1]

编程 第一章:学习提示 我适合学习这份教程吗 Socket提供了两台计算机之间进行通讯的机制,在James Gosling注意Java语言之前就已经很闻名了.Java语言使你更简单有效的使用Socket开发而无需了解操作系统的底层机制.大部分讨论Java编码的书籍都没有涉及这一主题,或者是只是"点到为止",留给读者大量的想象空间.这份教程就是让你了解在你的Java代码中如何更有效的使用Socket所需的知识.包含以下内容:•什么是Socket•它位于你的应用程序的哪些地方•能正常运行的

Java数据库编程中查询结果的表格式输出

编程|数据|数据库 [内容摘要]本文较为详细地介绍了在Java数据库编程中,利用表格输出查询结果的方法:并对所涉及的类给以了简要说明.[关键字]类.对象.接口[作者简介]男,26岁,陕西财经学院研究生,师从陈逢吉教授,从事金融信息系统方面的研究. 利用Java开发数据库应用系统时,经常需要在用户界面上显示查询结果.由于SUN公司提供的JDK1.x开发工具包不是可视化的集成开发环境(IDE),不能象Delphi.VB那样方便地把查询结果在DBGrid等表格中显示出来.因此,只能靠自己编写代码来实现