Cascade不使用Java

我有一个带有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代码却没有这样做.

点赞