我花了很长时间阅读有关经常令人困惑且经常可怕的 SQLite数据库版本号 的内容。我发现它显然按照以下方式存储在数据库头文件中60字节: - Where does Android store SQLite's database version?
我已经花了很长时间才能绕过它。创建的类(DBDatabase
,DBtable
和DBColumn
)以及一些允许我基本上拥有远离数据库架构的方法。
其中一个累积方法actionDBAlterSQL
通过PRAGMA为所有表和列比较SQLite模式,然后将生成的ALTER
语句运行到ADD
任何已添加的列。
要调用此功能,我在onExpand
中添加了DBHelper
方法,从而绕过版本控制。
我还在测试一些东西,但它确实在原理上有效。我只是通过在单个代码块中进行一些更改来添加和列,以便相对容易地管理模式/设计(如果事情与我所涉及的其他项目一样)。
但是,我发现数据库版本号的实际范围很少,除了版本结果的增加(正确完成) onUpgrade
被调用。
我的主要兴趣围绕这个问题;我是否会绕过使用版本号来破坏任何东西?
我也想知道我是否错过任何有用的功能;也许回滚到以前版本的架构甚至数据(我没有看到任何相关的东西,所以我怀疑不是这样的。)
这可能只是一种方便,而且基本上只是一个数字,如果增加允许 onUpgrade
运行?怀疑是这种情况使我沿着这条道路转移:)。
此外,如何成功使用版本号的主题似乎是一个经常出现的问题,因此这里的任何发现都可能对其他人有所帮助。
答案 0 :(得分:1)
数据库版本号只是一个方便,基本上只是一个数字,如果增加允许onUpgrade
运行。 (请参阅SQLiteOpenHelper source code中的getDatabaseLocked()
的实施。)
要解决版本号处理问题,请不要使用SQLiteOpenHelper
类。 (您可以直接使用SQLiteDatabase
。)