SQLite:验证值是否存在

时间:2013-02-24 23:23:18

标签: java android sqlite cursor

基本上,我想验证是否已在数据库中写入了usename。因为我很新,我不知道该怎么做并尝试过,但是这个代码我得到了错误。我真的不知道是否有更好的方法来做到这一点,如果是,请告诉我,谢谢。

   private long addEntry(String strUsename, String strName,
        String strFirstName, String strPassword) {
    // TODO Auto-generated method stub
    ContentValues cv = new ContentValues();
    cv.put(KEY_USERNAME, strUsename);
    cv.put(KEY_FIRSTNAME, strFirstName);
    cv.put(KEY_NAME, strName);      
    cv.put(KEY_PASSWORD, strPassword);
    return accountDB.insert(DATABASE_TABLE, null, cv);
}

public String Verification_add(String ver_username, String strName,
        String strFirstName, String strPassword){
    String result = ""; 
    String[] columns = {KEY_ROWID, KEY_USERNAME, KEY_NAME, KEY_FIRSTNAME, KEY_PASSWORD}; 
    Cursor c = accountDB.query(DATABASE_TABLE, columns, KEY_USERNAME + "=" + ver_username, null, null, null, null);
    if (!c.moveToFirst()){ // IF IT'S FALSE, that mean the username is not taken, ritgh ? 
        addEntry(ver_username, strName, strFirstName, strPassword);
        c.close(); 
        return result = "Account[...] code: 1 !"; 
    }else{
        c.close(); 
        return result = "Username already [...] code:2 "; 
    } 

}

这是logcat报告:

02-24 23:09:32.201: E/Verification_add(1389): MY ERROR !! 
02-24 23:09:32.201: E/Verification_add(1389): java.lang.NullPointerException
02-24 23:09:32.201: E/Verification_add(1389):   at com.example.communication.DataBaseRegistration.Verification_add(DataBaseRegistration.java:79)
02-24 23:09:32.201: E/Verification_add(1389):   at com.example.communication.Registration.onClick(Registration.java:42)
02-24 23:09:32.201: E/Verification_add(1389):   at android.view.View.performClick(View.java:4202)
02-24 23:09:32.201: E/Verification_add(1389):   at android.view.View$PerformClick.run(View.java:17340)
02-24 23:09:32.201: E/Verification_add(1389):   at android.os.Handler.handleCallback(Handler.java:725)
02-24 23:09:32.201: E/Verification_add(1389):   at android.os.Handler.dispatchMessage(Handler.java:92)
02-24 23:09:32.201: E/Verification_add(1389):   at android.os.Looper.loop(Looper.java:137)
02-24 23:09:32.201: E/Verification_add(1389):   at android.app.ActivityThread.main(ActivityThread.java:5039)
02-24 23:09:32.201: E/Verification_add(1389):   at java.lang.reflect.Method.invokeNative(Native Method)
02-24 23:09:32.201: E/Verification_add(1389):   at java.lang.reflect.Method.invoke(Method.java:511)
02-24 23:09:32.201: E/Verification_add(1389):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-24 23:09:32.201: E/Verification_add(1389):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-24 23:09:32.201: E/Verification_add(1389):   at dalvik.system.NativeStart.main(Native Method)

谢谢!

1 个答案:

答案 0 :(得分:0)

我猜你正在做这个检查,所以你不会两次或多次添加相同的名字: 使用此方法: PS:如果您只想知道名称是否在数据库中,您可以致电updateRecord(String name)

public long insertRecord(){

    ContentValues cv = new ContentValues();
    //put values

    if(!updateRecord(cv, name))
        return db.insert(P_TABLE, null, cv);
    else return 0;
}

private boolean updateRecord(ContentValues values, String name) {
    return db.update(P_TABLE, values, KEY_NAME + "=" + name, null) > 0;
}