【问题标题】:SQLite delete isn't workingSQLite 删除不起作用
【发布时间】:2014-12-02 11:34:19
【问题描述】:

当我尝试删除数据库中的记录时,它显示空指针异常错误。这是我的代码:

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

【问题讨论】:

  • 显示完整代码...什么是 DATABASE_TABLE? KEY_ID? ID?此参数之一为空
  • 请添加相关代码。还要以书面形式添加 LogCat,而不是图片。
  • 无论如何,我可以看到有一个 NullPointerException。
  • 您的ourDatabase 未正确初始化,内部mDatabase 成员为空。需要更多代码才能获得更多帮助。
  • @Suvtruf,立即查看

标签: android sqlite delete-row


【解决方案1】:

当您尝试删除该行时,您的数据库似乎可能已关闭。尝试在delete 之前打开数据库并在最后关闭它。

此外,如果您的 ID 是字符串,则建议您这样做:

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

【讨论】:

  • 虽然这通常是一个很好的建议,但为什么它有助于解决 OP 的具体问题?
【解决方案2】:
String where = KEY_ID+ "=?";
String[] selectionArgs = {String.valueOf(id)};
yourDatabase.delete(DATABASE_TABLE[1], where, selectionArgs);

【讨论】:

    猜你喜欢
    • 2017-08-05
    • 2012-11-18
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多