繁体   English   中英

如何使用会议室数据库更新数据?

[英]How to update data using room database?

我正在使用Room数据库,并且想更新一行。 我可以更新该行,但收到​​此警告

12-05 20:59:17.635 29363-29372 / com.example.parmarravi21.recyclerviewiv W / SQLiteConnectionPool:数据库'/data/user/0/com.example.parmarravi21.recyclerviewiv/databases/RecP10'的SQLiteConnection对象泄漏! 请修复您的应用程序,以正确结束正在进行的事务,并在不再需要数据库时将其关闭。

这是我的代码

//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中的数据库新手,请帮帮我。

Github链接以获取完整代码

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

尝试用这种方式编码。

使用@Update批注应该可以解决问题,并且根据Android开发人员文档,您不应在主线程上执行数据库查询,因此可能会导致数据库问题

像这样的东西

@Update
void updateTimeEntry(TimeEntry timeEntry)

使用TimeEntry作为模型类的名称

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM