簡體   English   中英

JDBC SQLIte搜索中的空指針異常

[英]Null Pointer Exception in JDBC SQLIte search

我已經找到了一種搜索SQLite數據庫並顯示與傳入的字符串值匹配的行的方法。問題是我遇到了nullPointerException ,我也不知道為什么,因為據我所知,這沒有問題。 代碼如下:

public static void search(String search)
      {
          String [] entries = new String[6]; 
        Connection c = null;
        Statement stmt = null;
        try {
          Class.forName("org.sqlite.JDBC");
          c = DriverManager.getConnection("jdbc:sqlite:WalkerTechCars.db");
          c.setAutoCommit(false);
          System.out.println("Opened database successfully");

          stmt = c.createStatement();
          ResultSet rs = stmt.executeQuery( "SELECT * FROM CUSTOMERS;" );
          while ( rs.next() ) {
             int phone = rs.getInt("phone");
             String  surname = rs.getString("surname");
             String  firstname = rs.getString("firstname");
             int home  = rs.getInt("home");
             String  address = rs.getString("address");
             String  postcode = rs.getString("postcode");

             if(search.matches(Integer.toString(phone)) || search.matches(surname) || search.matches(firstname) || search.matches(Integer.toString(home)) || search.matches(address) || search.matches(postcode) )
                 {
             System.out.println( "PHONE = " + phone );
             System.out.println( "SURNAME = " + surname );
             System.out.println( "FIRSTNAME = " + firstname );
             System.out.println( "HOME = " + home );
             System.out.println( "ADDRESS = " + address );
             System.out.println( "POSTCODE = " + postcode );
             System.out.println();
             }
          }
          rs.close();
          stmt.close();
          c.close();
        } catch ( Exception e ) {
          System.err.println( e.getClass().getName() + ": " + e.getMessage() );
          System.exit(0);
        }
        System.out.println("Operation done successfully");

      }

問題在於語句

if( .......  || search.matches(postcode) )

如果刪除此語句,則一切運行良好,但是此語句沒有任何問題,因為該字符串已經聲明並且不為null。

您的postcode可能為空。

嘗試編寫如下內容:

if( .......  || (postcode != null && search.matches(postcode)) )

當然,問題可能出在每個參數上,因此您必須為每個人都做,或者以更好的方式思考。

首先嘗試檢查代碼中的搜索參數是否為null,以備將來保存,因為在所有情況下都使用search.matches。 以后可能會發生這種情況,以后您可以將搜索發送為null。 對於郵政編碼,您可以嘗試檢查null,例如(postcode!= null && search.matches(postcode))

if(search!=null)
{
  if(search.matches(Integer.toString(phone)) || search.matches(surname) || search.matches(firstname) || search.matches(Integer.toString(home)) || search.matches(address) || (postcode!=null && search.matches(postcode)) )
                 {
             System.out.println( "PHONE = " + phone );
             System.out.println( "SURNAME = " + surname );
             System.out.println( "FIRSTNAME = " + firstname );
             System.out.println( "HOME = " + home );
             System.out.println( "ADDRESS = " + address );
             System.out.println( "POSTCODE = " + postcode );
             System.out.println();
             }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM