java - 查询未正确运行 - 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;
}
下图显示表和数据库已正确创建。
解决方案
你应该打电话#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();
}
}
推荐阅读
- spring - Spring Boot 2 执行器空指针异常 [InMemoryAuditEventRepository bean 为空]
- swift - 如何在 Swift 中声明关键字变量
- excel - Excel VBA 自定义标头代码适用于 32 位但不适用于 64 位
- php - PHP cURL 如何选择单选按钮值并在不单击按钮的情况下提交
- python - 如何使用按钮+文本框构建循环
- java - 如何将泛型类型转换为用户定义类型?
- google-calendar-api - 错误将重复的谷歌日历事件可见性从私人改回默认
- java - 自定义 JProgress 栏
- c# - 无法转换类型为“的对象”
键入'System.Collections.Generic.List - python-3.x - 根据字段值重现/中断行