Android:SqliteDatabase的lastModified()给出了错误的值

时间:2013-12-09 12:26:13

标签: android sqlite sqlcipher

我正在使用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次日志打印值相同..

先谢谢

2 个答案:

答案 0 :(得分:1)

迪帕克,

openOrCreateDatabase不是只读操作。特别是基于Android sqlite库的包装库在数据库打开时操作一个名为android_metadata的表。这可能会导致时间戳发生变化,因为数据库在打开期间实际上已被修改。

答案 1 :(得分:0)

mDatabaseFileObj这是对来自操作系统的File对象的引用,不要将它与SQLITE数据库中的数据库混淆,仅在文件系统上实现,所以在第一行打印时,这个文件是在上次修改时打印的,

第二行你试图改变文件,第三行再次打印时间,所以按照我和文件systemn行为你会得到一个不同的时间戳,这并不意味着如果这个文件里面的内容是修改与否。

想象一下这样,在Windows中打开一个txt文件并再次保存,而不会在它们不同之前和之后更改它的通知时间。

希望得到这个帮助。