【发布时间】:2017-09-23 12:40:37
【问题描述】:
我在带有 SQlite 数据库的 javaFx 项目中使用 JDBC。我有两个表"PROJECT" 和"SMAllPROJECT",例如PROJECT 有这个结构PROJECT(name,date,state) 和SMAllPROJECT 有这个结构SMAllPROJECT(name,date,state,*project_name*)。 Project_name 引用自 PROJECT table 的 name 列。
我正在尝试从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
);
【问题讨论】:
-
你能分享一下表格的定义吗(不仅仅是列列表,还有用于创建它们的实际 DDL)?
-
@Mureinik,我分享了用于创建它们的实际 DDL。
-
当您建立与 SQLite 数据库的 JDBC 连接时,您是否通过执行
PRAGMA foreign_keys = ON或使用SQLiteConfig对象显式启用外键? -
@MenaiAlaEddine 这些 DDL 会产生多个错误。你确定这些是你的 DDL?
-
@GordThompson 我使用了 SQLiteConfig 对象,它运行良好,谢谢。
标签: java jdbc sqlitejdbc