在运行我的Android应用时,我已经创建了一个database
和一个表user
。
问题是我第一次创建user
表时,我想念要创建的字段password
。
所以我重写了我的代码,以便再次创建user
表,其中包含字段password
。
但问题是我把代码放在我的DatabaseHelper类的onCreate
方法中。
由于数据库已经存在,函数onCreate
将永远不会调用。
任何人都可以告诉我如何解决这个问题。?
答案 0 :(得分:4)
您可以使用onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
方法
DatabaseHelper类
db - 数据库。
oldVersion - 旧的数据库版本。
newVersion - 新的数据库版本。
需要升级数据库时调用。实现应使用此方法删除表,添加表或执行升级到新架构版本所需的任何其他操作。 可以找到SQLite ALTER TABLE文档here。如果添加新列,则可以使用ALTER TABLE将它们插入到实时表中。如果重命名或删除列,则可以使用ALTER TABLE重命名旧表,然后创建新表,然后使用旧表的内容填充新表。 参数
答案 1 :(得分:2)
几种可能性:
如果您在设备上拥有超级用户权限或使用模拟器 - 您可以使用adb shell
查找您的SQLite数据库并简单地删除它(因此它会在您的应用下次启动时重新创建)或者使用sqlite command line tool - 自己修改表结构。当然,这只适用于您在开发过程中遗漏某些内容并愿意快速修复它,而不考虑任何现有用户。
增加应用程序的版本号并实现onUpgrade方法,您可以在现有数据库上执行所有必需的转换。这应该用于实际应用程序版本升级,考虑现有用户及其应用程序安装。
答案 2 :(得分:2)
一个简单的选项就是在设置菜单中卸载设备上的应用程序(或使用adb uninstall命令),如果再次运行应用程序,数据库也将被删除并重新创建。
快速而简单,无需实施onUpgrade或其他东西,这将适用于应用程序上市/正在使用的时候。
答案 3 :(得分:0)
您只需使用adb shell访问您的sqlite数据库,如果您的应用已安装在手机上,则需要root访问权限。这是一些reference - look for Examining sqlite3 Databases from a Remote Shell
其他方法是从Settings-> Applications-> Manage Applications-> Your App中删除您的数据库,然后点击Clear Data Button,它将删除您的Sqlite数据库和您的共享首选项。在此之后,您可以使用正确的表DDL重新运行您的应用程序,并使用正确的定义创建数据库。
从编程方面来说,您需要从帮助程序覆盖onOpen并使用db.execSql()放置表更改DDL。把你的alter table放在那里,或者先放下你的表,然后用正确的定义创建一个新表。 这是课程'参考SQLiteOpenHelper和SQLiteDatabase 另请参阅here