4

我有一个带有 2 个表的 SQLite 数据库:QuotesWPList

这两个表有这一列:

行情 ID (int primary key), name (String)

工作表 ID (int primary key), ID_Quote (foreign key Quotes with cascade option), String name

问题是,如果我使用外部工具(我使用 Navicat Essential for Mac)执行查询,则CASCADE工作正常,如果我删除 Quote,WPList 中所有带有他 ID 的条目都会被消除。使用 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);
    }

}
4

1 回答 1

2

在您的两种情况下,您是否使用不同版本的 SQLite 库?根据FAQ,SQLite从 3.6.19 版本开始支持强制执行外键约束。

如果您的 SQLite 库是在支持外键的情况下编译的,您仍然必须按照“外键支持”文档中的说明pragma使用语句启用此功能。您需要评估以下语句:

PRAGMA foreign_keys = ON;

我的猜测是您的Navicat Essential工具启用了外键支持,但您的 Java 代码没有这样做。

于 2012-09-05T15:24:53.803 回答