2016-03-11 2 views
0

Я пишу Webapp, где есть данные, которые нужно вытащить из базы данных и отобразить в текстовых полях. Все работает нормально. Но мне нужно отобразить значение как No Data Available в этих текстовых полях if(!rs.next()), в настоящее время я пытаюсь использовать приведенный ниже код.Заполните текстовые поля нулевыми значениями

package org.DAO; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.ResultSetMetaData; 
import java.sql.Statement; 
import java.util.ArrayList; 
import java.util.List; 

import org.bean.UserBean; 
import org.code.general.DBConnection; 
import org.code.general.GetTheUserDetails; 

public class GetDataDAO { 
    DBConnection dbConnection = new DBConnection(); 
    GetTheUserDetails getTheUserDetails = new GetTheUserDetails(); 

    public List<UserBean> list(String systemUserName) throws Exception { 

     List<UserBean> userBeans = new ArrayList<UserBean>(); 
     try { 

      Connection conn = dbConnection.getConn(); 
      Statement stmt = dbConnection.getStmt(); 
      ResultSet rs = dbConnection.getRs(); 
      String excelPath = dbConnection.getExcelPath(); 
      String queryString = null; 
      dbConnection.createClassForNameForExcel(); 
      conn = DriverManager.getConnection(
        "jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};DBQ=" + excelPath + "; READONLY=FALSE;"); 
      System.out.println("Connecting to database…"); 
      System.out.println("Oracle JDBC Driver Registered!"); 
      if (conn != null) { 
       System.out.println("You made it, take control your database now!"); 
      } else { 
       System.out.println("Failed to make connection!"); 
      } 
      stmt = conn.createStatement(); 
      queryString = "Select * from [" + dbConnection.getSheetPath() 
        + "$] where STATE IS NULL and [Case Owner] = '" 
        + getTheUserDetails.getUserNameDetails(systemUserName) + "'"; 
      System.out.println("Query is " + queryString); 
      rs = stmt.executeQuery(queryString); 
      ResultSetMetaData rsmd = rs.getMetaData(); 
      System.out.println("bno of cols are " + rsmd.getColumnCount()); 
      while (rs.next()) { 
       if (rs.next()) { 
        UserBean userBean = new UserBean(); 
        userBean.setCaseNumber(rs.getString(1)); 
        userBean.setCaseOwner(rs.getString(2)); 
        userBean.setStatus(rs.getString(4)); 
        userBean.setIssue(rs.getString(5)); 
        userBean.setReason(rs.getString(6)); 
        userBean.setDateOpened(rs.getString(7)); 
        userBean.setAge(rs.getInt(8)); 
        userBeans.add(userBean); 
       } else { 
        UserBean userBean = new UserBean(); 
        userBean.setCaseNumber("None"); 
        userBean.setCaseOwner("None"); 
        userBean.setStatus("None"); 
        userBean.setIssue("None"); 
        userBean.setReason("None"); 
        userBean.setDateOpened("None"); 
        userBean.setAge(Integer.parseInt("None")); 
        userBeans.add(userBean); 
       } 
      } 

      rs.close(); 
      conn.commit(); 
      conn.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return userBeans; 
    } 
} 

Согласно моему пониманию, я написал пробуя ниже алгоритм,

if(rs.next) 
    then create the bean and add the values from database, 
else 
    create the bean and add the values as None 

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

Благодаря

+0

Я не думаю, что это отличная идея дважды вызвать 'rs.next()'. Это приведет к тому, что не будет показано первое значение, потому что вы его пропустили. И, во-вторых, если база данных не содержит никаких значений, то она не должна указывать на новую строку. Вы говорите, что значения равны нулю, но строка присутствует? Я просто боюсь, что строки будут пустыми, а затем логика внутри цикла не сработает. –

+0

Кроме того, если 'rs.next()' false, это означает, что вы не можете создать пустой UsesrBean. Вам придется делать это за пределами цикла while. –

+0

Привет @JernejK, я могу удалить 'while (rs.next()) 'и сохранить' if-else'? – user3872094

ответ

1
if(rs.next) 
    then create the bean and add the values from database, 
else 
    set the bean as null 

В Jsp проверки, если боб является недействительным, то No Data Available под текстовыми полями. В идеале вы должны сделать это в сервлета или контроллера, как JSP должно быть легким, как это может быть

1

Код пропуска строки каждой итерации:

while (rs.next()) { 
    if (rs.next()) 

Если результат вл етс либо 0, либо 1 строка, то просто использовать rs.next():

if (rs.next()) 
{ 
    // Use 'rs'. 
} 
else 
{ 
    // "None". 
} 

Дополнительно:

  • null ч eck на conn является излишним, поскольку DriverManager.getConnection() выдает исключение, если он не работает.
  • использовать пробные ресурсы для обеспечения Connection, Statement и ResultSet всегда выпускаются.
+0

То же самое ... – Pragnani

1

общественного логический следующий()

перемещает курсор на следующую строку. Этот метод возвращает false, если в результирующем наборе больше строк.

Поэтому, когда вы звоните rs.next() дважды, один раз в while и один раз в if, вы будете пропускать одну строку каждый раз.

Попробуйте удалить if условию

1

Вы должны были бы иметь логику, как это, если строки пусты:

 rs = stmt.executeQuery(queryString); 
     ResultSetMetaData rsmd = rs.getMetaData(); 

     System.out.println("bno of cols are " + rsmd.getColumnCount()); 

     while (rs.next()) { 
       UserBean userBean = new UserBean(); 
       userBean.setCaseNumber(rs.getString(1)); 
       userBean.setCaseOwner(rs.getString(2)); 
       userBean.setStatus(rs.getString(4)); 
       userBean.setIssue(rs.getString(5)); 
       userBean.setReason(rs.getString(6)); 
       userBean.setDateOpened(rs.getString(7)); 
       userBean.setAge(rs.getInt(8)); 
       userBeans.add(userBean); 
     } 
     if(userBeans.size() == 0) { 
       UserBean userBean = new UserBean(); 
       userBean.setCaseNumber("None"); 
       userBean.setCaseOwner("None"); 
       userBean.setStatus("None"); 
       userBean.setIssue("None"); 
       userBean.setReason("None"); 
       userBean.setDateOpened("None"); 
       userBean.setAge(Integer.parseInt("None")); 
       userBeans.add(userBean); 
     } 

     rs.close(); 
     conn.commit(); 
     conn.close(); 

Но если строки не являются пустыми, просто, содержащие нулевые значения, то вы можете имеют такую ​​логику:

 rs = stmt.executeQuery(queryString); 
     ResultSetMetaData rsmd = rs.getMetaData(); 
     System.out.println("bno of cols are " + rsmd.getColumnCount()); 

     while (rs.next()) { 
       UserBean userBean = new UserBean(); 
       String value = rs.getString(1) == null ? "None" : rs.getString(1); 
       // you do this for all the columns, from 1 to 8 
       userBean.setCaseNumber(rs.getString(1)); 
       userBean.setCaseOwner(rs.getString(2)); 
       userBean.setStatus(rs.getString(4)); 
       userBean.setIssue(rs.getString(5)); 
       userBean.setReason(rs.getString(6)); 
       userBean.setDateOpened(rs.getString(7)); 
       userBean.setAge(rs.getInt(8)); 
       userBeans.add(userBean); 
     } 

     rs.close(); 
     conn.commit(); 
     conn.close(); 
+0

Спасибо, это сработало :) – user3872094

+0

Рад, что мой первый код действительно помог вам. Получайте удовольствие от кодирования больше :) –

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