我正在使用sqlcipher数据库。我正在跟踪数据库的 lastModified time 。根据我的理解,lastModified()函数返回的long值只有在我们更新或向我们引用的数据库添加值时才会更改。我正在使用查询来获取(不修改)数据库中的值,因为我正在使用以下代码
mDatabaseFileObj = mContext.getDatabasePath("xxx.db");
Log.i(""," "+mDatabaseFileObj.lastModified());
mSQLiteDatabase = net.sqlcipher.database.SQLiteDatabase.openOrCreateDatabase(...)
Log.i(""," "+mDatabaseFileObj.lastModified());
mCursor = mSQLiteDatabase.rawQuery(query, null);
do{
....
}while(..)
在这个我打印了两个日志。在创建mSQLiteDatabase obj之前的第一个日志和之后的另一个日志。根据lastModified()的doc,日志打印的值应该与我只是在不修改数据库时相同。但价值正在发生变化。
我无法解决这个问题。给出你的想法。
一个附加信息是,我已将此代码片段放在一个函数中,我调用该函数5次,奇怪的是第一次单独日志打印不同的值,但其余4次日志打印值相同..
先谢谢
答案 0 :(得分:1)
迪帕克,
openOrCreateDatabase不是只读操作。特别是基于Android sqlite库的包装库在数据库打开时操作一个名为android_metadata的表。这可能会导致时间戳发生变化,因为数据库在打开期间实际上已被修改。
答案 1 :(得分:0)
mDatabaseFileObj这是对来自操作系统的File对象的引用,不要将它与SQLITE数据库中的数据库混淆,仅在文件系统上实现,所以在第一行打印时,这个文件是在上次修改时打印的,
第二行你试图改变文件,第三行再次打印时间,所以按照我和文件systemn行为你会得到一个不同的时间戳,这并不意味着如果这个文件里面的内容是修改与否。
想象一下这样,在Windows中打开一个txt文件并再次保存,而不会在它们不同之前和之后更改它的通知时间。
希望得到这个帮助。