Как получить доступ к значениям набора результатов, используя несколько потоков - PullRequest
2 голосов
/ 04 мая 2019

Я создал нижеприведенную программу 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 минут (иногда больше).

Есть ли другой способ ускорить поиск значения в наборе результатов.Как создание потока 100 для поиска определенного номера счета, если он найден, то он должен вернуть значение.

Кроме того, возможно, в базе данных есть дубликат номера счета.Все, что мне нужно, - мне нужны многопоточности для доступа к результирующему набору, поиска по конкретному номеру учетной записи и возврата всех найденных учетных записей в соответствии с условием if.

Поделитесь своей идеей для достижения этой задачи.

Обновленопрограмма с предложением 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», но не уверен, как я могу получить подробности набора результатов.

Указанный выше номер счета запрашивается в дБ и получается результат.

enter image description here

1 Ответ

3 голосов
/ 04 мая 2019

Почему бы просто не добавить условие в ваш запрос?

вместо

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

do

  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 содержит данную строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...