我有一个带有2个表的SQLite数据库:Quotes和WPList
这两个表有这个列:
引号:ID(int主键),name(String)
WPList:ID(int主键),ID_Quote(具有级联选项的外键引号),字符串名称
问题是,如果我使用外部工具执行查询(我使用Navicat Essential for Mac),则CASCADE工作正确,如果我删除引用,则WPList中的所有条目都将被删除.使用Java不会发生这种情况,CASCADE不起作用.有什么建议吗?谢谢
编辑.
这是我使用的java代码:
public static void deleteQuote (int ID)
{
try
{
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection(Global.dbPath);
Statement stmt;
stmt = conn.createStatement();
stmt.execute("DELETE FROM Quotes WHERE ID=" + ID);
stmt.close(); // rilascio le risorse
conn.close(); // termino la connessione
}
catch(ClassNotFoundException e)
{
System.out.println(e);
}
catch(SQLException e)
{
System.out.println(e);
}
}
最佳答案 在两种情况下,您是否在使用不同版本的SQLite库?从版本3.6.19开始,SQLite支持执行外键约束.
如果您的SQLite库是在支持外键的情况下编译的,那么您仍然必须使用pragma语句按照the instructions in the “Foreign Key Support” documentation启用此功能.您需要评估以下语句:
PRAGMA foreign_keys = ON;
我的猜测是你的Navicat Essential工具正在启用外键支持,但你的Java代码却没有这样做.