2016-08-17 2 views
0

После утреннего исследования я в тупике о том, что должно быть простым фрагментом кода.Java ResultSet Пропущенные записи

Все, что я хочу, это получить все записи из нашей таблицы raw_material в тестовой базе данных.

Вот что я делаю:

public static void fetchIthos(ArrayList<String> ithosList, UserDto user) { 
     // TODO Auto-generated method stub 

    //get our stuff first - raw materials and doc names and paths 
    try { 

     Connection conn = user.getConnection(); 
     Statement st = conn.createStatement(); 
     ResultSet rs = st.executeQuery("SELECT * FROM raw_material where object_id > 0"); 

     do { 
     String result = rs.getString("raw_material_number").toString(); 
     System.out.println("next item: " + result); 
     //ithosList.add(rs.getString("raw_material_number")); 
     } while(rs.next()); 
    } 

    catch (Exception e) { 
     ithosList.equals(null); 
     System.out.println("DB error : " + e); 
    } 
} 

Вот результаты в MySql:

Result

, так что я бы ожидать, первый 'результат', чтобы быть MAN-500-121200000, но это показывается как RAW-001485

Я не вижу нигде в коде, что я пропускаю первую запись, но если я t it go, он пропустит следующий до MAN-500-056100000

Я использую неправильное подключение пользователя? Это единственное, что я вижу, что влияет на это.

Я думал, что user.getConnection() сделает это только для обычной базы данных испытаний.

+0

'ithosList.equals (null);' ничего не делает. Этот метод возвращает true, если 'ithosList' является' null', иначе false. –

+0

Я еще не стал кодировать этот фрагмент. Я хочу получить правильные результаты, прежде чем добавить к арраисту. –

+0

Если вы выполните 'ResultSet rs = st.executeQuery (« SELECT * FROM raw_material, где object_id> 0 »);' дважды, есть ли гарантия, что результаты будут возвращены в том же порядке? – bradimus

ответ

0
public static void fetchIthos(ArrayList<String> ithosList, UserDto user) { 
    // TODO Auto-generated method stub 
    int i = 1; 
    //get our stuff first - raw materials and doc names and paths 
    try { 

     Connection conn = user.getConnection(); 
     Statement st = conn.createStatement(); 
     ResultSet rsCount = st.executeQuery("SELECT COUNT(*) from raw_material"); 
     rsCount.first(); 
     long r = (Long) rsCount.getObject(i); 

     for (i=1; i < r+1; i++) { 

      ResultSet rs = st.executeQuery("SELECT * FROM raw_material where object_id =" + i + ""); 

      //moves to the first record 
      rs.first(); 

      do { 
       String result = rs.getString("raw_material_number"); 
       System.out.println("next item: " + result); 
       ithosList.add(rs.getString("raw_material_number")); 
      } while(rs.next()); 
     } 
    } 

    catch (Exception e) { 
     ithosList.equals(null); 
     System.out.println("DB error : " + e); 
    } 

} 

Hacky способ сделать это, но он получил не работать сейчас, по крайней мере, пока старшие возвратов разработчиков от тяжелой утраты. Имейте в виду, что у меня было всего 3 месяца джавы, крещение огнем. лол.

4

Ваш код кажется неверным, ожидаемый цикл достаточно:

while(rs.next()) { 
    String result = rs.getString("raw_material_number"); 
    System.out.println("next item: " + result); 
} 

Рассмотрите возможность использования try-with-resources заявление закрывается ваш Connection, Statement и ResultSet в следующем:

try (Connection conn = user.getConnection(); 
    Statement st = conn.createStatement(); 
    ResultSet rs = st.executeQuery("SELECT * FROM raw_material where object_id > 0")) { 
    // My code here 
} 
+0

Это определенно верно, хотя кажется странным, что он пропустит первый результат. На самом деле, я, кажется, помню получение сообщений об ошибках, если вы не продвигаете курсор, но это может быть зависимым от реализации. –

+0

'while (rs.next()) { Строковый результат = rs.getString ("raw_material_number"); System.out.println ("следующий элемент:" + результат); } ' Все еще возвращается RAW-001485 –

+0

@PaulaAnneMcGrath, вы вообще не получаете MAN-500-121200000? –

0

Попробуйте, как это ,

while(rs.next()){ 
    String result = rs.getString("raw_material_number"); 
    System.out.println("next item: " + result); 
} 
+0

Почему у вас есть '.toString()' на том, что уже есть, 'String'? –

+1

Copy Paste problem ..... :) Обновлено –

Смежные вопросы