我试图将我的 SQLite Db 中的行数限制为一。我到处寻找合适的解决方案,但没有找到任何地方。我收到了很多建议(约束、触发器等),但还没有真正找到一个以我目前的技能水平易于实施的解决方案。我决定尝试触发器,但找不到正确编写代码的位置。我有结构,但不知道如何正确格式化语法。我的代码低于当然不起作用(编译错误)。任何指导如何正确地为 android 编写此代码的帮助将不胜感激。我已经浏览过 sqlite.org 网站 ( http://www.sqlite.org/lang_createtrigger.html )
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
String sqlDataStore = "create table if not exists " +
TABLE_NAME_CREDENTIALS + " ("+ BaseColumns._ID + " integer primary key " + " ON CONFLICT FAIL ,"
+ COLUMN_NAME_USERNAME + " TEXT NOT NULL " + " UNIQUE,"
+ COLUMN_NAME_PASSWORD + " TEXT NOT NULL " + " UNIQUE);";
db.execSQL(CREATE TRIGGER " row_limiter " + " BEFORE INSERT "
+ " ON "
+ " TABLE_NAME_CREDENTIALS "
+ " FOR EACH ROW WHEN "
+ ( SELECT + "_id" + FROM + " TABLE_NAME_CREDENTIALS ") > "1"
+ BEGIN
DELETE FROM + "TABLE_NAME_CREDENTIALS" + WHERE + "_id " > "1";
END
db.execSQL(sqlDataStore);
}
主键设置为表的数据库:
String sqlDataStore = "create table if not exists " +
TABLE_NAME_CREDENTIALS + " ("+ BaseColumns._ID + " NOT NULL,"
+ COLUMN_NAME_USERNAME + " TEXT NOT NULL, "
+ COLUMN_NAME_PASSWORD + " TEXT NOT NULL, "
+ " PRIMARY KEY (username, passcode))";
插入:
contentValues.put(LoginDB.COLUMN_NAME_USERNAME, rUsername);
contentValues.put(LoginDB.COLUMN_NAME_PASSWORD, rPasscode);