4

私は2つのテーブルを持つSQLite dbを持っています: QuotesWPList

2 つのテーブルには次の列があります。

引用符: ID (int primary key), name (String)

WPList : ID (int primary key), ID_Quote (foreign key Quotes with cascade option), String name

問題は、外部ツール (Mac 用の Navicat Essential を使用) でクエリを実行するとCASCADE正しく動作し、WPList の Quote all エントリを彼の 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

あなたの 2 つのケースでは、SQLite ライブラリの別のバージョンになってしまいますか? FAQによると、SQLiteはバージョン3.6.19外部キー制約の適用をサポートしています。

SQLite ライブラリが外部キーをサポートするようにコンパイルされている場合でも、「外部キーのサポート」ドキュメントの指示に従ってpragma、ステートメントを使用してこの機能を有効にする必要があります。次のステートメントを評価する必要があります。

PRAGMA foreign_keys = ON;

私の推測では、あなたのNavicat Essentialツールは外部キーのサポートを有効にしていますが、あなたの Java コードは同じことをしていません。

于 2012-09-05T15:24:53.803 に答える