首页 > 解决方案 > 查询未正确运行 - SQlite Android Studio

问题描述

我有这个函数应该将数据插入到 SQlite DB 中,如果没有插入数据,则返回 false,但是该函数返回 true,但是当我去检查 .db 文件时,表中没有数据。

public boolean insertData(String name, String emailAddress, String postalAddress, String password, int phoneNumber, String bloodType) {
    ContentValues contentValues = new ContentValues();
    SQLiteDatabase db = this.getWritableDatabase();

    //set data to columns
    contentValues.put(COL_2, name);
    contentValues.put(COL_3, emailAddress);
    contentValues.put(COL_4, postalAddress);
    contentValues.put(COL_5, password);
    contentValues.put(COL_6, phoneNumber);
    contentValues.put(COL_7, bloodType);

    //inserts data into db
    long result = db.insert(TABLE_NAME, null, contentValues);

    //checks to see if data has been inserted correctly
    if (result == -1) {
        return false;
    } else
        return true;


}

下图显示表和数据库已正确创建。

数据库信息

标签: javasqliteandroid-studio

解决方案


你应该打电话#beginTransaction()#setTransactionSuccessful()这里#endTransaction()描述的一样。

如果任何事务在未标记为干净的情况下结束(通过调用 setTransactionSuccessful),则更改将回滚。

public boolean insertData(String name, String emailAddress, String postalAddress, String password, int phoneNumber, String bloodType) {
    ContentValues contentValues = new ContentValues();
    SQLiteDatabase db = this.getWritableDatabase();

    db.beginTransaction();
    try {
        contentValues.put(COL_2, name);
        contentValues.put(COL_3, emailAddress);
        contentValues.put(COL_4, postalAddress);
        contentValues.put(COL_5, password);
        contentValues.put(COL_6, phoneNumber);
        contentValues.put(COL_7, bloodType);
        long result = db.insert(TABLE_NAME, null, contentValues);
        db.setTransactionSuccessful();
        return result != -1;
    } finally {
        db.endTransaction();
    }
}

推荐阅读