2012-08-30 207 views
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(); 
+0

创建约束不是更容易吗:http://www.sqlite.org/lang_createtable.html –

+0

有人在这里登陆寻找SQLITE TRIGGER DEMO http://code2concept.blogspot.in/2015/02/ Android的sqlite的触发件demo.html – nitesh

回答

0

我曾与在触发对检查null进行计数的成功。例如:(SELECT COUNT()FROM表WHERE new.xxx = table.xxx)== 0)。