2014-12-02 6 views
0

Когда я пытаюсь удалить запись в моей базе данных, она отображает ошибку исключения нулевого указателя. Это мой код:SQLite delete не работает

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

Не волнуйтесь id имеет значение, я уже проверил!

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

ошибка чата Войти в:

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

Исходный код доступен here.

+0

показать полный код ... что DATABASE_TABLE? KEY_ID? Я бы? Один из этих параметров равен нулю – Suvitruf

+1

Пожалуйста, добавьте соответствующий код. Также добавьте LogCat в свою форму WRITTEN, а не как изображение. –

+0

В любом случае, я вижу, что существует исключение NullPointerException. –

ответ

2

Кажется, что ваша база данных может быть закрыта, когда вы пытаетесь удалить строку. Попробуйте открыть базу данных до delete и закрыть ее в конце.

Кроме того, как хороший совет, который Вы должны сделать это, если ваш ID является строка:

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