我创建了以下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中查询并得到结果。
答案 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
包含给定字符串的结果。