0

データが既にデータベースに挿入された後、reg_bttn onCLick が選択されたときに実行される SQLite トリガーを作成しました。コンパイルエラーもlogcatエラーも発生せず、新しい挿入を妨げるトリガーもありません。私のトリガー ステートメントは、私の DB クラスで検索されます。挿入を行うのは私のクラスにあるはずです。

  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();
4

1 に答える 1

0

トリガーでカウントを使用するのではなく、null をチェックすることに成功しました。例: (SELECT Count() FROM テーブル WHERE new.xxx = table.xxx) == 0)。

于 2012-12-09T04:00:03.320 に答える