如何使用多线程访问结果集值

时间:2019-05-04 12:36:15

标签: java multithreading jdbc

我创建了以下JDBC程序来从数据库获取记录

Class.forName("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@db-user-rw-a.qa.amazon.com:1100/MONEY";
String username = "amazon212313";
String password = "XXXXX";

System.out.println("Connecting database...");
Connection connection = null;
if (connection == null) 
{
    try {
        connection = DriverManager.getConnection(url, username,password);
        System.out.println("Database connected!");
        } 
    catch (Exception ex)
        {
        System.out.println("Database Connection Failed...!!!");
        System.out.println(ex);
        }
}

Statement statement=connection.createStatement();

ResultSet rs1=statement.executeQuery("select account_number,flag,flag2,flag3,flag4,flag5,flag6,flag7,amount from transaction_p2");

 ResultSetMetaData metadata = rs1.getMetaData();
 int columnCount = metadata.getColumnCount(); 
 System.out.println(columnCount);

 while(rs1.next())
 {
      // account_number in if condition

     if(rs1.getString(1).contains("2195281819521610731"))
     {
     System.out.println(rs1.getString(1));
     }
 }


connection.close();

我在数据库中有超过99000条记录,并且上述程序运行良好,但是检索特定帐号值花费大量时间。检索该值需要20多个分钟(有时甚至超过20分钟)。

是否还有其他方法可以加快结果集中的搜索值。就像创建100个线程来搜索特定的帐号(如果找到)便会返回该值。

此外,数据库中可能存在重复的帐号。我只需要多线程即可访问结果集并搜索特定的帐号,并根据条件返回所有找到的帐号。

分享您的想法以完成此任务。

使用WHERE子句更新了程序,并在下面的控制台中进行了观察:

更新的代码:

  ResultSet rs1=statement.executeQuery("select account_number,flag,flag2,flag3,flag4,flag5,flag6,flag7,amount from transaction_p2 where account_number=2195281819521610731");
     ResultSetMetaData metadata = rs1.getMetaData();
     int columnCount = metadata.getColumnCount(); 
     System.out.println(columnCount);
     System.out.println(rs1.next()+"\t boolean value");

     while(rs1.next())
     {
          // account_number in if condition
         System.out.println(rs1.getString(1));
     }

输出:

Connecting database...
Database connected!
12
false    boolean value

如果我使用execute()而不是executeQuery(),返回的结果为“ TRUE”,但不确定如何获取结果集详细信息。

上面的帐号在db中查询并得到结果。

enter image description here

1 个答案:

答案 0 :(得分:3)

为什么不只是将条件添加到您的查询中?

代替

   select account_number,flag,flag2,flag3,flag4,flag5,flag6,flag7,amount from transaction_p2

  select account_number,flag,flag2,flag3,flag4,flag5,flag6,flag7,amount from transaction_p2 where account_number like '%2195281819521610731%'

最后一部分(where account_number like '%...%')将告诉SQL仅包含account_number包含给定字符串的结果。