代码之家  ›  专栏  ›  技术社区  ›  Mina Wissa

Android中的sqlite触发器?

  •  6
  • Mina Wissa  · 技术社区  · 14 年前

    我想在Android应用程序的表上强制使用一个外键constarint。

    我已经搜索过,这可以通过使用触发器来完成:

    我是这样做的:

    db.execSQL("CREATE TRIGGER dept_id_trigger22+" +
                    " AFTER INSERT "+
                    " OF EmployeeName ON Employees"+
                    " BEGIN"+
                                         //Condition
                    " RAISE(ABORT,'error') END;");
    

    但没有出现错误,并且插入了非法值。

    5 回复  |  直到 10 年前
        1
  •  6
  •   Shailendra Patil    10 年前

    db.execSQL("CREATE TRIGGER dept_id_trigger22" + 
                    " AFTER INSERT "+ 
                    "ON Employees"+ 
                    " BEGIN"+ 
                                         //Condition 
                    " SELECT RAISE(ABORT,'error'); END;"); 
    

        2
  •  3
  •   Dan    13 年前

    在Windows上,以数据库文件作为参数打开sqlite命令行工具:

    sqlite3 mydatabase.db
    .genfkey --exec
    

    这将为所有键约束生成触发器。

        3
  •  1
  •   Thomas Mueller    14 年前

    我不希望有任何投票支持这个答案,只想让你知道:

    您可以使用另一个数据库,例如 H2 database . 免责声明:我是H2的主要作者。

    有一些缺点:一些(不是全部)操作较慢,例如打开和关闭数据库。JAR文件相对较大(大约1 MB)。您必须使用JDBCAPI。

    但其优点是:h2支持使用触发器、约束等。

        4
  •  1
  •   Walery Strauch Lia    11 年前

    当计数大于100时删除最后50行

    sqliteDB.execSQL("CREATE TRIGGER IF NOT EXISTS delete_trigger
        AFTER INSERT ON table1 
        WHEN (SELECT COUNT(*) FROM table1) > 50 " +
        BEGIN
           delete From table1 where id not in(select id from table1 order by id desc limit 100;
        END;"
    );
    
        5
  •  0
  •   mreichelt    14 年前

    我发现使用的sqlite版本不支持外键,所以我希望触发器也不受支持。