2017-09-23 3 views
-1

私はSQliteデータベースを持つjavaFxプロジェクトでJDBCを使用しています。私は2つのテーブルを持っています"PROJECT""SMAllPROJECT"のようなPROJECTはこの構造を持っていますPROJECT(name,date,state)SMAllPROJECTはこの構造を持っていますSMAllPROJECT(name,date,state,*project_name*)Project_namenameの列のPROJECT tableから参照される。親テーブルから行を削除するにはどのように参照された列を子テーブルにするのですか?

PROJECTから行を削除しようとしており、SMAllPojectで参照されている行を削除する必要があります。 sqliteスタジオでは、親テーブルから行を削除するときにonCascadeメソッドを設定します.SQliteスタジオでテストするとうまくいきますが、自分のコードでは親テーブルから行が削除されます。

この

は私のコードです:

コントローラメソッド

public void ExecuteDeleteProject() { 

     if (!SearchIdProjectSupp.getText().isEmpty()) { 

      Project project = new ProjectDao().FindString(SearchIdProjectSupp.getText()); 
      new ProjectDao().Delete(project); 
      String title = "Suppression"; 
      String message = "Vous avez supprimé le projet " + SearchIdProjectSupp.getText() + "."; 
      NotificationType notification = NotificationType.SUCCESS; 
      TrayNotification tray = new TrayNotification(); 
      tray.setTitle(title); 
      tray.setMessage(message); 
      tray.setNotificationType(notification); 
      tray.setAnimationType(AnimationType.SLIDE); 
      tray.setImage(new Image("Images/check.png")); 
      tray.setRectangleFill(Paint.valueOf("#a8a9fe")); 
      tray.showAndDismiss(Duration.seconds(4)); 
      SearchIdProjectSupp.setText(""); 
      SuppPaneProject.setVisible(false); 
      DeleteProjetButton.setDisable(true); 
      CountP.setVisible(true); 
      CountP(); 
      CountR(); 
      CountPP(); 

     } 

    } 

DAOパターン法

public boolean Delete(Project Object) { 

     try { 

      String queryDeletePerson = "DElETE FROM PROJECT WHERE name=" + "'" + Object.getName() + "'";//Query Insertion in Person_Table 

      PreparedStatement preparedStatementPerson = Dbaconnection.getConnection().prepareStatement(queryDeletePerson);//Prepared statement i use this for high performance 

      preparedStatementPerson.execute(); 

     } catch (SQLException ex) { 

      Logger.getLogger(EMPDao.class.getName()).log(Level.SEVERE, null, ex); 
     } 

     return true; 
    } 

そして、これは私のDDLです

CREATE TABLE PROJECT (
    NAME VARCHAR2 (100) PRIMARY KEY, 
    STATE VARCHAR2 (100), 
    DATEDBT DATE, 
); 

CREATE TABLE SMALLPROJECT (
    NAMEPROJECT  VARCHAR2 (100) REFERENCES PROJECT (NAME) ON DELETE CASCADE 
                  ON UPDATE CASCADE, 
    NAME VARCHAR2 (20) PRIMARY KEY, 
    DATEDBT  DATE, 
    STATE VARCHAR2 (20) PRIMARY KEY 

    ); 
+0

テーブルの定義を共有できますか(列リストだけでなく、作成に使用された実際のDDL)。 – Mureinik

+0

質問を編集する場合は、質問を改善するために他のユーザーが行った編集作業に捨てないでください。あなたの質問をより悪い状態にしてしまったので、最後の編集をロールバックしました。英語では、単語 "I"は常に大文字になり、文の間にスペースを追加します。 –

+0

@Mureinik、私はそれらを作成するために使用された実際のDDLを共有しました。 –

答えて

1

SQLite Foreign Key Supportと答えはHow do you enforce foreign key constraints in SQLite through Java? であるため、クエリを実行する前にデータベース接続を構成する必要があります。私は外部キー制約を適用しなかったのでこの問題がありました。

public static final String DB_URL = "jdbc:sqlite:database.db"; 
public static final String DRIVER = "org.sqlite.JDBC"; 

public static Connection getConnection() throws ClassNotFoundException { 
    Class.forName(DRIVER); 
    Connection connection = null; 
    try { 
     SQLiteConfig config = new SQLiteConfig(); //I add this configuration 
     config.enforceForeignKeys(true); 
     connection = DriverManager.getConnection(DB_URL,config.toProperties()); 
    } catch (SQLException ex) {} 
    return connection; 
} 
関連する問題