Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
级联不使用Java_Java_Sqlite_Cascade - Fatal编程技术网

级联不使用Java

级联不使用Java,java,sqlite,cascade,Java,Sqlite,Cascade,我有一个包含两个表的SQLite数据库:引号和WPList 这两个表有以下列: 引号:ID(int主键),name(字符串) WPList:ID(int主键),ID_引号(带级联选项的外键引号),字符串名 问题是,如果我使用外部工具(我使用Navicat Essential for Mac)执行查询,CASCADE正确工作,如果我删除一个Quote,则WPList中所有带有其ID的条目都将被删除。在Java中,这种情况不会发生,级联不起作用。有什么建议吗?谢谢 编辑 这是我使用的java代码:

我有一个包含两个表的SQLite数据库:引号和WPList

这两个表有以下列:

引号
ID(int主键),name(字符串)

WPList
ID(int主键),ID_引号(带级联选项的外键引号),字符串名

问题是,如果我使用外部工具(我使用Navicat Essential for Mac)执行查询,
CASCADE
正确工作,如果我删除一个Quote,则WPList中所有带有其ID的条目都将被删除。在Java中,这种情况不会发生,
级联
不起作用。有什么建议吗?谢谢

编辑

这是我使用的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
语句来启用此功能。您需要评估以下语句:

PRAGMA foreign_keys = ON;

我猜您的Navicat Essential工具正在启用外键支持,但您的Java代码没有启用外键支持。

请添加您使用的Java代码。不要使用数据库架构的自由形式描述,请提供我们可以直接复制粘贴的SQL语句。您是否遇到任何异常,顺便说一句,使用finally block关闭u r连接:)是否确实已从数据库中删除该引号?是的,已从Quotes表中正确删除该引号。没有抛出异常,表已创建。我没有创建它的代码。您好,我在另一个问题中阅读了此建议,并尝试在执行查询之前和之后执行一行新的cade,该行显示:stmt.execute(“PRAGMA foreign_keys=ON;”),但什么都没有发生!再次感谢您用于创建这两个表的实际DDL是什么?原始问题中引用的文本不符合SQLite的
CREATE TABLE
语句。我用Navicat Essential创建了两个表。如果您不想,我可以这样做,然后将Navicat生成的代码粘贴到这里,以创建这两个表。