0
我创建时的数据已经在数据库中插入后,选择我的reg_bttn的onclick应该执行一个SQLite触发器。我没有得到任何编译错误,没有logcat的错误,没有触发防止新的插入。我的触发器语句是找到我的数据库类。它应该是在我的类,它的插入。SQLite触发器(不触发)
public LoginDB(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
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 autoincrement,"
+ COLUMN_NAME_USERNAME + " text not null,"
+ COLUMN_NAME_PASSWORD + " text not null);";
db.execSQL("CREATE TRIGGER DATABASE_NAME " +
" BEFORE INSERT " +
" ON "+TABLE_NAME_CREDENTIALS+
" WHEN BEGIN " +
" SELECT ((SELECT * FROM " + TABLE_NAME_CREDENTIALS + " WHERE "
+ COLUMN_NAME_USERNAME + "' AND "+ COLUMN_NAME_PASSWORD +") IS NOT NULL)" +
" THEN RAISE (ABORT, 'ID ALREADY EXIST') END;" +
"END;");
db.execSQL(sqlDataStore);
}
插入:
public void onClick (View v) {
rUsername = rName.getText().toString();
rPasscode = rCode.getText().toString();
RegDetails regDetails = new RegDetails();
regDetails.setrName(bundleRegName);
regDetails.setpCode(bundleRegCode);
if(v.getId()==R.id.rtn_button){
finish();
}else if(v.getId()==R.id.reg_button){
insertCredentials(regDetails);
}
}
private void insertCredentials(RegDetails regDetails){
LoginDB androidOpenDBHelper = new LoginDB(this);
SQLiteDatabase sqliteDB = androidOpenDBHelper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(LoginDB.COLUMN_NAME_USERNAME, rUsername);
contentValues.put(LoginDB.COLUMN_NAME_PASSWORD, rPasscode);
long affectedColumnid = sqliteDB.insert(LoginDB.TABLE_NAME_CREDENTIALS, null, contentValues);
Toast.makeText(getApplicationContext(), "Credentials Saved! Please login" + affectedColumnid, Toast.LENGTH_SHORT).show();
sqliteDB.close();
finish();
创建约束不是更容易吗:http://www.sqlite.org/lang_createtable.html –
有人在这里登陆寻找SQLITE TRIGGER DEMO http://code2concept.blogspot.in/2015/02/ Android的sqlite的触发件demo.html – nitesh