2016-05-05 2 views
0

Я написал следующий код, и набор результатов (здесь его обозначен как rs3) возвращает true, даже если нет результата. Я хочу проверить, нет ли результата, который пользователь должен ввести правильный производитель телефона. Не знаете, где я ошибаюсь?resultset in jdbc возвращается true

BufferedReader r2 = new BufferedReader(new InputStreamReader(System.in)); 
String phone_manufacturer=""; 
boolean value1=true; 
while (value1) { 
    System.out.println("\nPlease select your choice of phone manufacturer "); 
    String line = r2.readLine(); 
    if (line.matches("[A-Za-z ]+$")) { 
     phone_manufacturer = line; 
     final String sql3 = "SELECT * from phone_model WHERE phone_type = '"+phone_type_choice+"' and manufacturer ='"+phone_manufacturer+"'"; 
     st3 = connection.createStatement(); 
     rs3= st3.executeQuery(sql3); 
     if(rs3!=null){ 
       System.out.println("Model"+"  "+"Manufacturer"+""+"Phone_type"); 
      while(rs3.next()){ 
       String modell = rs3.getString("Model"); 
       String manufacturer = rs3.getString("Manufacturer"); 
       String phone_type = rs3.getString("Phone_type"); 
      System.out.format("%-25s%-20s%-10s\n",modell,manufacturer,phone_type); 
      } 
     } 

     else 
      { 
     System.out.println("The manufacturer isn't avaiable for the phone type choosen.Please try again"); 
      value1=true; 
      continue; 
      } 

    value1=false; 
     }else 
      { 
      System.out.println("\nPlease enter correct manufacturer name "); 
          value1=true; 
          continue; 

          } 
          break; 
          } 
+0

вы должны проверить, как, что, если (resultSet.isBeforeFirst()) { System.out. println («Нет данных»); } –

+2

executeQuery ** всегда ** возвращает набор результатов, даже если он пуст. –

+0

Вы говорите, что rs3.next() возвращает true? Кстати, ваш код здесь уязвим для SQL-инъекций, поэтому я надеюсь, что это всего лишь пример. IE., Кто-то входит в phone_type = "1; DROP TABLE phone_model; -" – Jamie

ответ

1

Использование:

if (!rs3.next()) { 
    System.out.println("no data"); 
} 

изначально курсор на Resultset в указывает на перед первой строкой, если первый вызов к следующему() возвращает ложь, то не было никаких данных в ResultSet.

Если вы работаете с недавно возвращенным ResultSet, курсор которого указывает перед первой строкой, проще всего проверить это - просто вызвать isBeforeFirst().

if (!rs3.isBeforeFirst()) {  
System.out.println("No data"); 
} 

это лучше использовать приготовленные Постулаты, чтобы избежать SQL Injection:

PreparedStatement updateemp = connnection.prepareStatement 
     ("SELECT * from phone_model WHERE phone_type =? and manufacturer=?"); 
     updateemp.setString(1,phone_type_choice); 
     updateemp.setString(2, phone_manufacturer); 

How To use prepared statement.