2017-10-06 12 views
0

私はアドレス帳アプリケーションを作成していますが、私は検索機能を開発中です。私が検索するたびに、「列が見つかりません」例外が発生します。ここに私のコードです:カラムが見つかりませんアクセスデータベース

else if(actionCommand.contentEquals("search")) 
     { 
     String searchInput = searchBar.getText(); 
     //String[] searchSplit = searchInput.split("\\s"); 
     //String searchFirst = searchSplit[0]; 
     //String searchLast = searchSplit[1]; 
     personID = null; 
     try 
     { 
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
      Connection connection = DriverManager.getConnection("jdbc:odbc:address_book"); 
      Statement statement = connection.createStatement(); 

      ResultSet resultSet = statement.executeQuery("SELECT (personID) FROM names WHERE (lastName) LIKE ('"+searchInput+"')"); 
      if(resultSet.next()) 
       personID = resultSet.getString("personID"); 

      ResultSet firstQuery = statement.executeQuery("SELECT (firstName) FROM names WHERE (personID) LIKE ('"+personID+"')"); 
      if(firstQuery.next()) 
       firstNameOutput = firstQuery.getString("firstName"); 

      ResultSet lastQuery = statement.executeQuery("SELECT (lastName) FROM names WHERE (personID) LIKE ('"+personID+"')"); 
      if(lastQuery.next()) 
       lastNameOutput = lastQuery.getString("lastName"); 

      ResultSet address1Query = statement.executeQuery("SELECT (address1) FROM addresses WHERE (personID) LIKE ('"+personID+"')"); 
      if(address1Query.next()) 
       address1Output = address1Query.getString("address1"); 

      ResultSet address2Query = statement.executeQuery("SELECT (address2) FROM addresses WHERE (personID) LIKE ('"+personID+"')"); 
      if(address2Query.next()) 
       address2Output = address2Query.getString("address1"); 

      ResultSet cityQuery = statement.executeQuery("SELECT (city) FROM addresses WHERE (personID) LIKE ('"+personID+"')"); 
      if(cityQuery.next()) 
       cityOutput = cityQuery.getString("city"); 

      ResultSet stateQuery = statement.executeQuery("SELECT (state) FROM addresses WHERE (personID) LIKE ('"+personID+"')"); 
      if(stateQuery.next()) 
       stateOutput = stateQuery.getString("state"); 

      ResultSet zipcodeQuery = statement.executeQuery("SELECT (zipcode) FROM addresses WHERE (personID) LIKE ('"+personID+"')"); 
      if(zipcodeQuery.next()) 
       zipcodeOutput = zipcodeQuery.getString("zipcode"); 

      ResultSet phoneQuery = statement.executeQuery("SELECT (phoneNumber) FROM phoneNumbers WHERE (personID) LIKE ('"+personID+"')"); 
      if(phoneQuery.next()) 
       phoneOutput = phoneQuery.getString("phoneNumber"); 

      ResultSet emailQuery = statement.executeQuery("SELECT (emailAddress) FROM emailAddresses WHERE (personID) LIKE ('"+personID+"')"); 
      if(emailQuery.next()) 
       emailOutput = emailQuery.getString("emailAddress"); 

      newFunctionWindow(); 
      personIDBar.setText(personID); 
      firstNameBar.setText(firstNameOutput); 
      lastNameBar.setText(lastNameOutput); 
      address1Bar.setText(address1Output); 
      address2Bar.setText(address2Output); 
      cityBar.setText(cityOutput); 
      stateBar.setText(stateOutput); 
      zipcodeBar.setText(zipcodeOutput); 
      phoneBar.setText(phoneOutput); 
      emailBar.setText(emailOutput); 
      statement.close(); 
      connection.close(); 
     } 

     catch (SQLException sqlException) 
     { 
      JOptionPane.showMessageDialog(null, sqlException.getMessage(), "Database Error", JOptionPane.ERROR_MESSAGE); 
      System.exit(1); 
     } 

     catch (ClassNotFoundException classNotFound) 
     { 
      JOptionPane.showMessageDialog(null, classNotFound.getMessage(), "Driver Not Found", JOptionPane.ERROR_MESSAGE); 
      System.exit(1); 
     } 

私はすべての列名をチェックし、タイプミスはありません。私はすべての私のSQLステートメントも正しいと信じていますので、私はその問題が何であるかはよく分かりません!ご協力ありがとうございました。

+0

また、テーブル構造も投稿する必要があります。 – Ravi

+2

最初に、あなたには非常に多くの埋め込み '()'ペアがありますが、どちらも必要ありません。 2つ目は、ワイルドカードなしで 'LIKE'を使用しているからです。代わりに' = 'を使用することもできます。第3に、6つの異なるクエリを投稿したが、いずれがエラーを引き起こしているかは教えてくれなかった。第4に、パラメータ化されたクエリを使用するのではなく、SQLを連結して、SQLインジェクションを広く開いています。第五に、あなたはテーブル構造を含めていないので、あなたの質問に答えるために列が実際に存在するかどうかを見ることはほとんど不可能です。 –

+0

あなたは古典的なnoob間違いを犯しました。すべてのデータベースコードをユーザーインターフェイスメソッドに埋め込みました。それらのクエリのそれぞれは、別々のデータアクセスクラスの別個のメソッドでなければなりません。 – duffymo

答えて

2
 ResultSet address1Query = statement.executeQuery("SELECT (address1) FROM addresses WHERE (personID) LIKE ('"+personID+"')"); 
     if(address1Query.next()) 
      address1Output = address1Query.getString("address1"); 

     ResultSet address2Query = statement.executeQuery("SELECT (address2) FROM addresses WHERE (personID) LIKE ('"+personID+"')"); 
     if(address2Query.next()) 
      address2Output = address2Query.getString("address1"); 

whoops - address1はaddress2フィールドからですか?それは動作しません。

関連する問題