2015-09-30 2 views
0
int i = 0; 
while (i < size) { 
    String s = username[i]; 

    String sql4 = "select books1,books2 from " + uname + "a," + s + "b where " + uname + "a.books1=" + s + "b.books2"; 
    ResultSet rs3 = con.createStatement().executeQuery(sql4); 

    System.out.println(sql4); 
    while (rs3.next()) { 

     count = rs3.getRow(); 
    } 
    i++; 
    System.out.println(count); 

После выполнения этого кода вывод должен быть 2,1,0,0 , но вместо того, чтобы выход 2,2,2,2 .that является SQL-запрос для i=0использование ResultSet в цикле

+0

Почему бы не использовать select count, если вы хотите узнать счет? –

+0

Вы не должны конкатенировать значения в запросах. Вместо этого используйте подготовленный оператор с параметрами! –

ответ

0

count Инициализировать внутри цикла

while (i < size) { 

count=0; 
//execute query 
} 

, при этом ваш код печатает предыдущее значение count, если строка не найдена.

И вместо того, чтобы использовать while(rs3.next()) вы можете использовать select count(*) as cnt... и использовать

if(rs3.next()){ 
count = rs3.getInt("cnt"); 
} 
1

Использование ResultSet.last() вместо цикла While. См. Следующий пример.

count = rs3.last() ? rs3.getRow() : 0; 

BAD ПРАКТИКИ КОД

Кроме того, кажется, плохие высказывания вашего кода. Вы выполняете запрос внутри цикла, что ухудшает производительность вашей программы. Вы можете использовать SQL-запросы, используя COUNT, JOIN и другие методы, позволяющие легко и эффективно получать ваш результат с меньшим количеством кода.

+0

Использование 'rs3.last()' генерирует исключение с типом набора результатов по умолчанию ('TYPE_FORWARD_ONLY') –

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