我在SQlite數據庫的javaFx項目中使用JDBC。我有兩個表"PROJECT"
和"SMAllPROJECT"
比如PROJECT有這個結構PROJECT(name,date,state)
和SMAllPROJECT
有這個結構SMAllPROJECT(name,date,state,*project_name*)
。 Project_name
被引用自name
列PROJECT table
。如何從父表中刪除行有一個引用列到子表?
我試圖從PROJECT
刪除行,SMAllPoject
中引用的行應該刪除。在sqlite studio中,我配置了onCascade
方法,當我應用從父表中刪除一行時,每一件事情都很好,當我在SQlite studio中測試它時,但在我的代碼中,它只是從父表中刪除行。
這是我的代碼:
控制方法
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
);
你可以分享表的定義嗎(不只是列列表,但實際用於創建它們的DDLs)? – Mureinik
如果你編輯你的問題,請不要扔掉其他用戶爲改善你的問題所做的編輯工作。我回滾了最後一次編輯,因爲它使問題處於更糟的狀態。請注意,英文中的單詞「I」總是大寫,並在句子之間添加一個空格。 –
@Mureinik,我分享了用於創建它們的實際DDL。 –