我正在使用Room数据库,我想更新一行。我可以更新行但收到此警告
12-05 20:59:17.635 29363-29372 / com.example.parmarravi21.recyclerviewiv W / SQLiteConnectionPool:数据库的SQLiteConnection对象' /data/user/0/com.example.parmarravi21.recyclerviewiv/数据库/ RecP10'被泄露了!请修复您的应用程序以正确结束正在进行的事务,并在不再需要时关闭数据库。
这是我的代码
//defining database
db = Room.databaseBuilder(getActivity(), AppDatabase.class, "RecP10")
.fallbackToDestructiveMigration()
.allowMainThreadQueries().build();
TimeDateModel timeDateModel = new TimeDateModel(positionTime, TimeMode);
ContentValues contentValues = new ContentValues();
contentValues.put("posItem", timeDateModel.getPosItem());
contentValues.put("TimeDateMode", timeDateModel.getTimeDateMode());
if (db.timeDao().getItemAtTimePos(positionTime) != null) {
Log.e(TAG, "updated database");
db.beginTransaction();
try {
db.getOpenHelper().getWritableDatabase().update("Datetime", 0,
contentValues, "posItem =" + positionTime, null);
db.setTransactionSuccessful();
} finally {
db.endTransaction(); // commit or rollback
db.close();
}
} else {
Log.e(TAG, "New item added");
db.timeDao().insertAll(timeDateModel);
}
我也尝试了dao更新功能,但数据没有更新。
db.timeDao().update(timeDateModel);
我是android新手,请帮帮我。
答案 0 :(得分:1)
@Query("UPDATE Test SET test_name=:arg1,test_startDate=:arg2,test_endDate=:arg3,test_location=:arg4,test_ringerMode=:arg5,test_latitude=:arg6,test_longitude=:arg7 WHERE testId = :arg0")
fun updateTest( testId: Int,testName:String,testStartTime:String,testEndTime:String,testLocation:String,testRingerMode:Int,testLatitude:Double,testLongitude:Double)
尝试以这种方式编码。
答案 1 :(得分:0)
使用@Update批注即可解决问题,根据Android开发人员文档,您不应在主线程上执行数据库查询,否则可能会导致数据库问题
类似的东西
@Update
void updateTimeEntry(TimeEntry timeEntry)
以TimeEntry作为模型类的名称