X
xiaqiapeng
Unregistered / Unconfirmed
GUEST, unregistred user!
小弟在编一个查询数据库信息的类,原先的SQL语句是一个union查询,即把很多的select语句用union标识符连接起来,以便可以一次性从数据库检索到信息,但是由于数据量太大,union查询要很长时间才出结果,因而网页上面显示查询到的数据也要等待很长时间。于是我打算把每个查询放到一个线程中去跑,奇怪的是出来查询结果的总时间和用union查询出来的总时间差不多,我想用线程查询的话结果应该会快一点。不知道是不是代码写的有问题,还是oracle数据库会对从一台机子过来的查询请求进行排队。希望各位老大指点一二。代码如下:
try{
catchConn();
//得到数据库连接
outputList=new Vector();
outputArrayList=new ArrayList();
class Query implements Runnable {
private String innersql;
Thread t;
private Thread gett(){
return t;
}
public Query(String sqls){
innersql=sqls;
t=new Thread(this);
t.start();
}
public void run(){
try{
Statement innerstmt = dbConn.createStatement (java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
ResultSet innerrs = innerstmt.executeQuery(innersql);
while (innerrs.next()){
Hashtable outputInfoList = new Hashtable();
outputInfoList.put("name",innerrs.getString(1));
outputInfoList.put("area",innerrs.getString(2));
outputInfoList.put("count",new Integer(innerrs.getInt(3)));
System.out.println(innerrs.getString(1)+innerrs.getString(2)+"
"+innerrs.getString(3));
outputArrayList.add(outputInfoList);
}
innerrs.close();
innerstmt.close();
}
catch(Exception e1){
System.out.println("error"
}
}
}
Query a1=new Query(sqllist[0]);
//sqllist是7个长度的一维数组,每一个单位里面放一条查询语句,就是原来准备用union查询来合并的查询语句
Query a2=new Query(sqllist[1]);
Query a3=new Query(sqllist[2]);
Query a4=new Query(sqllist[3]);
Query a5=new Query(sqllist[4]);
Query a6=new Query(sqllist[5]);
Query a7=new Query(sqllist[6]);
try{
a1.gett().join();
a2.gett().join();
a3.gett().join();
a4.gett().join();
a5.gett().join();
a6.gett().join();
a7.gett().join();
}
catch(Exception e){}
接下来的语句不贴了,就是等到所有线程运行完毕后,把查询结果从ArrayList取出来,显示在网页上。
try{
catchConn();
//得到数据库连接
outputList=new Vector();
outputArrayList=new ArrayList();
class Query implements Runnable {
private String innersql;
Thread t;
private Thread gett(){
return t;
}
public Query(String sqls){
innersql=sqls;
t=new Thread(this);
t.start();
}
public void run(){
try{
Statement innerstmt = dbConn.createStatement (java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
ResultSet innerrs = innerstmt.executeQuery(innersql);
while (innerrs.next()){
Hashtable outputInfoList = new Hashtable();
outputInfoList.put("name",innerrs.getString(1));
outputInfoList.put("area",innerrs.getString(2));
outputInfoList.put("count",new Integer(innerrs.getInt(3)));
System.out.println(innerrs.getString(1)+innerrs.getString(2)+"
"+innerrs.getString(3));
outputArrayList.add(outputInfoList);
}
innerrs.close();
innerstmt.close();
}
catch(Exception e1){
System.out.println("error"
}
}
}
Query a1=new Query(sqllist[0]);
//sqllist是7个长度的一维数组,每一个单位里面放一条查询语句,就是原来准备用union查询来合并的查询语句
Query a2=new Query(sqllist[1]);
Query a3=new Query(sqllist[2]);
Query a4=new Query(sqllist[3]);
Query a5=new Query(sqllist[4]);
Query a6=new Query(sqllist[5]);
Query a7=new Query(sqllist[6]);
try{
a1.gett().join();
a2.gett().join();
a3.gett().join();
a4.gett().join();
a5.gett().join();
a6.gett().join();
a7.gett().join();
}
catch(Exception e){}
接下来的语句不贴了,就是等到所有线程运行完毕后,把查询结果从ArrayList取出来,显示在网页上。