2017-07-10 1 views
-1

私のデータベースからPerson(行)を削除するメソッドがあります。 catchで作成したエラーメッセージが表示されます。私はちょうどデータベースで作業を始めました。私は主にさまざまな手法を組み合わせました。私は何をすべきかわからないJavaでのSQLITEの削除メソッド

public static void deletePerson(String firstNameOfPersonToDelete、String lastNameOfPersonToDelete){ ステートメントstmt = null;

try { 
     // Create database connection 
     Connection c = DriverManager.getConnection("jdbc:sqlite:PERSON.db"); 

     // Create Statement object 
     stmt = c.createStatement(); 

     // Get person we're about to delete 
     String getPersonQuery = "SELECT SSN FIRSTNAME, LASTNAME, AGE, CREDITCARD FROM PERSON WHERE FIRSTNAME = '" 
       + firstNameOfPersonToDelete + "' AND LASTNAME = '" + lastNameOfPersonToDelete + "'"; 
     ResultSet rs = stmt.executeQuery(getPersonQuery); 

     String ssn = rs.getString("SSN"); 
     String firstName = rs.getString("FIRSTNAME"); 
     String lastName = rs.getString("LASTNAME"); 
     String age = rs.getString("AGE"); 
     String creditCard = rs.getString("CREDITCARD"); 

     String deletePersonStatement = "DELETE FROM PERSON WHERE FIRSTNAME = '" + firstName + "' AND LASTNAME = '" 
       + lastName + "'"; 

     stmt.executeUpdate(deletePersonStatement); 

     System.out.println("The following record was deleted:\n" + ssn + "\n" + firstName + " " + lastName + "\n" 
       + age + "\n" + creditCard); 
     System.out.println("\nThe database contains the following records: "); 

     ArrayList<Object> myPeople = findAllPeople(); 

     for (Object element : myPeople) { 
      System.out.println(element.toString()); 
     } 

    } catch (SQLException e) { 
     e.printStackTrace(System.err); 
     System.out.println("Error: The person: \"" + firstNameOfPersonToDelete + " " + lastNameOfPersonToDelete 
       + "\" was not found. No records were deleted."); 
     System.out.println("\nThe database contains the following records: "); 
     ArrayList<Object> myPeople = findAllPeople(); 

     for (Object element : myPeople) { 
      System.out.println(element.toString()); 
     } 
    } 
} 

java.sql.SQLException: no such column: 'SSN'Error: The person: "Fitzgerald Grant" was not found. No records were deleted. at org.sqlite.jdbc3.JDBC3ResultSet.findColumn(JDBC3ResultSet.java:48) at org.sqlite.jdbc3.JDBC3ResultSet.getString(JDBC3ResultSet.java:443) at Test.deletePerson(Test.java:181) at Test.main(Test.java:65)

+1

デバッグのヘルプを求めるときは、実際のスタックトレースを含めることが重要です。あなたの 'catch'ブロックに' e.printStackTrace(System.err); 'を追加して、あなたの質問を編集してください。 –

+1

また、「PreparedStatement」、「パラメータ化されたクエリ」、「SQLインジェクション」についても読んでください。 –

+0

これはフォーラムではありません。が答えられた後に別のものに質問を変更しないでください。別の質問がある場合は、新しい質問をしてください。 –

答えて

2
SELECT SSN FIRSTNAME, LASTNAME, AGE, CREDITCARD FROM ... 
     ^

これは、すなわち、クエリの出力に、SSNカラムをFIRSTNAMEに変更され、SSN AS FIRSTNAMEと同じです。あなたは明らかにカンマを忘れてしまった。

いずれにしても、SSN列がないため、このエラーが発生します。 この列を使用してこの表を作成するか、または古いデータベースを使用している場合は、この列を追加する必要があります。

+0

うわー。そこでカンマを追加しましたが、別のエラーが発生しました。データベースファイルがロックされています –

+0

'SSN'というカラムがあります(そうでなければ、実行時に別のエラーが生成されるでしょう)。つまり、 'getString(" SSN ")'は、結果セットに 'SSN'と呼ばれる列がないのでエラーになります(結果セットのカラムは元のカラム名ではなくインデックスまたはエイリアスによってアクセスされます)。 –

関連する問題