[英]android sqliteDatabase table recreation
在运行我的android应用程序时,我已经在其中创建了一个database
和一个表user
。
问题是,当我第一次创建user
表时,我错过了要创建的字段password
。 因此,我重写了我的代码,以便再次创建user
表,其中包含字段password
。
但是问题是我已将代码放在DatabaseHelper类中的onCreate
方法中。
由于数据库已经存在,因此函数onCreate
将永远不会调用。
谁能告诉我如何解决这个问题。
您可以使用onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
方法DatabaseHelper类
db-数据库。
oldVersion-旧的数据库版本。
newVersion-新的数据库版本。
在需要升级数据库时调用。 实现应使用此方法删除表,添加表或执行其他任何升级到新架构版本所需的操作。 可以在这里找到SQLite ALTER TABLE文档。 如果添加新列,则可以使用ALTER TABLE将它们插入活动表中。 如果重命名或删除列,则可以使用ALTER TABLE重命名旧表,然后创建新表,然后使用旧表的内容填充新表。 参量
几乎没有可用的方法:
如果您具有设备的超级用户访问权限或使用仿真器-可以使用adb shell
查找SQLite数据库并将其删除(这样它将在下次启动应用程序时重新创建它)或使用sqlite命令行工具 -修改表结构自己。 当然,仅当您在开发过程中错过了某些东西并愿意快速修复它而不考虑任何现有用户时,这才适合。
增加应用程序的版本号并实现onUpgrade方法,您可以在该方法上对现有数据库进行所有必需的转换。 这应该用于实际的应用程序版本升级,考虑现有用户及其应用程序安装。
一个简单的选择就是在设置菜单上卸载设备上的应用程序(或使用adb卸载命令),然后如果再次运行该应用程序,该数据库也将被删除并重新创建。
快速而简单,而无需实施onUpgrade之类的东西,这将在应用程序投放市场时/确实在使用中。
您只需使用adb shell访问sqlite数据库,如果您的应用已安装在手机上,则需要root访问权限。 这里是一些参考-寻找从远程Shell检查sqlite3数据库
另一种方法是从“设置”->“应用程序”->“管理应用程序”->“您的应用程序”中删除数据库,然后单击“清除数据”按钮,这将删除您的Sqlite数据库和“共享首选项”。 之后,您可以使用正确的表DDL重新运行您的应用程序,并且将使用正确的定义创建数据库。
以编程方式来讲,您将需要从助手中覆盖onOpen并使用db.execSql()将表更改DDL放入。 将您的alter table放在此处,或者将其放到最前面,然后使用正确的定义创建新的table。 这是该类的参考SQLiteOpenHelper和SQLiteDatabase ,也请参考此处
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.