2013-02-24 5 views
0

기본적으로 데이터베이스에 usename이 아직 쓰여 있지 않은지 확인하고 싶습니다. 나는 꽤 새로운데, 어떻게 해야할지 모르겠지만,이 코드에 오류가 있습니다. 나는 진지하게 이것을 할 수있는 더 좋은 방법이 있는지 모르겠다. 만약에 그것이 있다면, 말해줘. 고마워.SQLite : 값이 존재하는지 확인

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) 

감사합니다 : 여기

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 "; 
    } 

} 

는 로그 캣 보고서입니다! 난 당신이 늘 두 번 같은 이름을 추가하거나 있도록이 검사를하고있는 것 같은데요

+0

정확히 어디 라인 79 (널 포인터 예외의 위치) 코드에? – ebarrenechea

+0

c는 null가됩니다. http://stackoverflow.com/questions/5457699/cursor-adapter-and-sqlite-example –

+0

줄 79는 다음과 같습니다. Cursor c = accountDB.query (DATABASE_TABLE, columns, KEY_USERNAME + "="+ ver_username, null , null, null, null); – R00t

답변

0

더 : 이 방법을 사용 : PS : 당신은 그냥 이름이 DB에 있는지 알고 싶다면 당신은 단지 updateRecord(String name)를 호출 할 수 있습니다 .

공공 긴 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; 
} 
관련 문제