【问题标题】:Triggers on sqlite android does not worksqlite android上的触发器不起作用
【发布时间】:2014-04-14 17:36:48
【问题描述】:

触发器的目标是在表SHIFTS列移位更新或插入大于1的值时在表列GIORNI_SETT日期插入新记录,但我无法运行触发器,显然有问题但我做了不知道是什么,从日志看我没有错误,但是触发器不起作用,有人可以帮助我,谢谢。

public class DbHelper extends SQLiteOpenHelper {
static String DATABASE_NAME="turniDB.db";
public static final String TURNI="turni";
public static final String TURNI_ID="idturno";
public static final String TURNO="turno";

public static final String GIORNI_SETT="giorni";
public static final String GIORNI_ID="giorni_id";
public static final String GIORNI="giorni";
public static final String DATA="data";

public DbHelper(Context context) {
    super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_TABLE="CREATE TABLE "+TURNI+" ("+TURNI_ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"+TURNO+" TEXT)";
    db.execSQL(CREATE_TABLE);

    String CREATE_TABLE2="CREATE TABLE "+GIORNI_SETT+" ("+GIORNI_ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"+GIORNI+" TEXT,"+DATA+" INTEGER)";
    db.execSQL(CREATE_TABLE2);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    db.execSQL("CREATE TRIGGER IF NOT EXISTS AGGIUNGI_DATA AFTER UPDATE ON TURNI FOR EACH ROW WHEN (new.turno > 0) ");
    db.execSQL(" BEGIN ");
    db.execSQL("INSERT INTO GIORNI_SETT (data) VALUES (1);");
    db.execSQL("END;");

    db.execSQL("DROP TRIGGER AGGIUNGI_DATA;");
    db.execSQL("DROP TABLE IF EXISTS "+TURNI);
    db.execSQL("DROP TABLE IF EXISTS "+GIORNI_SETT);
    onCreate(db);
}

public static void beginTransaction() {
    // TODO Auto-generated method stub
}

public static long insert(String string, Object object, ContentValues values) {
    // TODO Auto-generated method stub
    return 0;
}

}

【问题讨论】:

  • 您的表名错误。应该是... AFTER UPDATE ON turni,或ON " + TURNI + " ...
  • 另外,您正在创建触发器,然后再删除它。它可以这样工作。
  • 另外,我认为你的 sql 查询(创建触发器)应该是一个查询,而不是 4 个
  • 你能不能帮我看一下这段代码,我真的很不实际,这几天我尝试触发这个功能,但没有结果。

标签: android sql sqlite triggers


【解决方案1】:

创建 2 个表后,您的创建触发器查询应位于 onCreate 中,并且应如下所示:

db.execSQL("CREATE TRIGGER IF NOT EXISTS AGGIUNGI_DATA AFTER UPDATE ON " 
    + TURNI + " FOR EACH ROW WHEN (new.turno > 0) BEGIN INSERT INTO "
    + GIORNI_SETT + " (data) VALUES (1); END");

【讨论】:

  • 好的,现在好像可以了,不知道怎么感谢。非常感谢您的宝贵帮助。
猜你喜欢
  • 2016-01-02
  • 1970-01-01
  • 2017-02-21
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 2016-05-08
  • 2023-04-05
相关资源
最近更新 更多