2014-12-02 1 views
0

데이터베이스에서 레코드 삭제를 시도하면 널 포인터 예외 오류가 표시됩니다. id에 값이 걱정하지 마세요SQLite 삭제가 작동하지 않습니다.

ourDatabase.delete(DATABASE_TABLE[1], KEY_ID + " = " + id, null); 

, 나는 이미 그것을 확인했습니다이 내 코드입니다! here

android.database.sqlite.SQLiteStatement.releaseAndUnlock (SQLiteStatement.java:290)

소스 코드를 사용할 수 :에서

public class DiaryDB { 
// User info 
public static final String KEY_NAME = "my_name"; 
public static final String KEY_PASSWORD = "my_password"; 
public static final String KEY_QUESTION_ID = "my_question"; 
public static final String KEY_ANSWER = "my_answer"; 

// Entry details 
public static final String KEY_ID = "_id"; 
public static final String KEY_DATE = "entry_date"; 
public static final String KEY_TIME = "entry_time"; 
public static final String KEY_TITLE = "entry_title"; 
public static final String KEY_CONTENT = "_entry"; 
public static final String KEY_RATE = "entry_rating"; 
public static final String KEY_IMAGE = "entry_image"; 

private static final String DATABASE_NAME = "MyDiary"; 
private static final String[] DATABASE_TABLE = { "My_Details", "My_Entries" }; 
private static final int DATABASE_VERSION = 1; 

private DbHelper ourHelper; 
private final Context ourContext; 
private SQLiteDatabase ourDatabase; 

public DiaryDB(Context c) { 
    ourContext = c; 
} 

public DiaryDB open() throws SQLException { 
    ourHelper = new DbHelper(ourContext); 
    ourDatabase = ourHelper.getWritableDatabase(); 
    return this; 
} 

public void close() { 
    ourHelper.close(); 
} 

private static class DbHelper extends SQLiteOpenHelper { 

    public DbHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("CREATE TABLE " + DATABASE_TABLE[0] + " (" + KEY_NAME 
       + " TEXT PRIMARY KEY NOT NULL, " + KEY_PASSWORD 
       + " TEXT NOT NULL, " + KEY_QUESTION_ID + " TEXT NOT NULL, " 
       + KEY_ANSWER + " TEXT NOT NULL);"); 

     db.execSQL("CREATE TABLE " + DATABASE_TABLE[1] + " (" + KEY_ID 
       + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_DATE 
       + " TEXT NOT NULL, " + KEY_TIME + " TEXT NOT NULL, " 
       + KEY_TITLE + " TEXT NOT NULL, " + KEY_CONTENT 
       + " TEXT NOT NULL, " + KEY_RATE + " REAL, " + KEY_IMAGE 
       + " BLOB);"); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE[0]); 
     db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE[1]); 
     onCreate(db); 
    } 

} 


public void deleteEntry(long id){ 
    Log.e("Tester", "" + id); 
    ourDatabase.delete(DATABASE_TABLE[1], KEY_ID + " = " + id, null); 
} 
} 

로그인 채팅 오류입니다.

+0

쇼 전체 코드 ... DATABASE_TABLE 무엇인가가? KEY_ID? 신분증? 이 매개 변수 중 하나가 null입니다. – Suvitruf

+1

관련 코드를 추가하십시오. LogCat을 그림이 아닌 WRITTEN 형식으로 추가하십시오. –

+0

어쨌든 NullPointerException이 있음을 알 수 있습니다. –

답변

2

행을 삭제하려고 할 때 데이터베이스가 닫힐 수 있습니다. delete 앞에있는 데이터베이스를 열어 끝까지 닫으십시오. 또한

, 경우이 작업을 수행해야 좋은 충고와 같은 ID하는 String입니다 :

ourDatabase.delete(DATABASE_TABLE[1], KEY_ID + "=?" , new String[]{id}); 
+1

이것은 일반적으로 좋은 조언이지만 OP의 특정 문제에 도움이되는 이유는 무엇입니까? – laalto

-1
String where = KEY_ID+ "=?"; 
String[] selectionArgs = {String.valueOf(id)}; 
yourDatabase.delete(DATABASE_TABLE[1], where, selectionArgs);