从资产文件夹升级Android SQLite数据库
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了从资产文件夹升级Android SQLite数据库,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5476字,纯文字阅读大概需要8分钟。
内容图文
![从资产文件夹升级Android SQLite数据库](/upload/InfoBanner/zyjiaocheng/899/cd37c0c2fab847bfa1a519b63347890c.jpg)
我目前有一个我在Assets文件夹中使用的数据库.我有升级它的问题.每当我启动DATABASE_VERSION数字时,它只会更新某些时间.当它升级时,它会在开始时崩溃,我必须重新打开应用程序.
这是我的createDatabase()
public void createDataBase() throws IOException {
boolean dbExist = checkdatabase();
if (dbExist) {
Log.v("DB Exists", "db exists");
// By calling this method here onUpgrade will be called on a
// writeable database, but only if the version number has been
// bumped
this.getWritableDatabase();
}
dbExist = checkdatabase();
if (!dbExist) {
// By calling this method and empty database will be created into
// the default system path of your application so we are gonna be
// able to overwrite that database with our database.
this.getReadableDatabase();
try {
copyDataBase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}
onUpgrade()
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (newVersion > oldVersion){
Log.v("Database Upgrade", "Database version is higher than previous.");
myContext.deleteDatabase(DB_NAME);
}
我想删除我正在使用的旧数据库,只是让新数据库可用于应用程序布局.
将createDataBase()添加到onUpgrade()时,这是我的LogCat
03-06 15:17:15.348: V/DB Exists(2150): db exists
03-06 15:17:15.388: V/Database Upgrade(2150): Database version is higher than previous.
03-06 15:17:15.398: D/AndroidRuntime(2150): Shutting down VM
03-06 15:17:15.398: W/dalvikvm(2150): threadid=1: thread exiting with uncaught exception (group=0xb3f6d648)
03-06 15:17:15.418: E/AndroidRuntime(2150): FATAL EXCEPTION: main
03-06 15:17:15.418: E/AndroidRuntime(2150): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.productguide/com.example.productguide.PowersportsEquivalent}: java.lang.IllegalStateException: getDatabase called recursively
03-06 15:17:15.418: E/AndroidRuntime(2150): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
03-06 15:17:15.418: E/AndroidRuntime(2150): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
03-06 15:17:15.418: E/AndroidRuntime(2150): at android.app.ActivityThread.access$600(ActivityThread.java:141)
03-06 15:17:15.418: E/AndroidRuntime(2150): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
03-06 15:17:15.418: E/AndroidRuntime(2150): at android.os.Handler.dispatchMessage(Handler.java:99)
03-06 15:17:15.418: E/AndroidRuntime(2150): at android.os.Looper.loop(Looper.java:137)
03-06 15:17:15.418: E/AndroidRuntime(2150): at android.app.ActivityThread.main(ActivityThread.java:5103)
03-06 15:17:15.418: E/AndroidRuntime(2150): at java.lang.reflect.Method.invokeNative(Native Method)
03-06 15:17:15.418: E/AndroidRuntime(2150): at java.lang.reflect.Method.invoke(Method.java:525)
03-06 15:17:15.418: E/AndroidRuntime(2150): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
03-06 15:17:15.418: E/AndroidRuntime(2150): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-06 15:17:15.418: E/AndroidRuntime(2150): at dalvik.system.NativeStart.main(Native Method)
03-06 15:17:15.418: E/AndroidRuntime(2150): Caused by: java.lang.IllegalStateException: getDatabase called recursively
03-06 15:17:15.418: E/AndroidRuntime(2150): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:204)
03-06 15:17:15.418: E/AndroidRuntime(2150): at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188)
03-06 15:17:15.418: E/AndroidRuntime(2150): at com.example.productguide.DataBaseHelper.createDataBase(DataBaseHelper.java:143)
03-06 15:17:15.418: E/AndroidRuntime(2150): at com.example.productguide.DataBaseHelper.onUpgrade(DataBaseHelper.java:248)
03-06 15:17:15.418: E/AndroidRuntime(2150): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:257)
03-06 15:17:15.418: E/AndroidRuntime(2150): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
03-06 15:17:15.418: E/AndroidRuntime(2150): at com.example.productguide.DataBaseHelper.createDataBase(DataBaseHelper.java:136)
03-06 15:17:15.418: E/AndroidRuntime(2150): at com.example.productguide.PowersportsEquivalent.onCreate(PowersportsEquivalent.java:57)
03-06 15:17:15.418: E/AndroidRuntime(2150): at android.app.Activity.performCreate(Activity.java:5133)
03-06 15:17:15.418: E/AndroidRuntime(2150): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
03-06 15:17:15.418: E/AndroidRuntime(2150): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
03-06 15:17:15.418: E/AndroidRuntime(2150): ... 11 more
解决方法:
浏览Google时,我找到了问题的答案.
通过将以下代码添加到我的copyDataBase()
SQLiteDatabase checkdb = null;
try{
String myPath = DB_PATH + DB_NAME;
checkdb = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
// Once the DB has been copied, set the new version
checkdb.setVersion(DATABASE_VERSION);
}
catch(SQLiteException e)
{
//database does’t exist yet.
}
并在onUpgrade()中包含以下代码
if (oldVersion < newVersion){
Log.v("Test", "Within onUpgrade. Old is: " + oldVersion + " New is: " + newVersion);
myContext.deleteDatabase(DB_NAME);
try {
copyDataBase();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我的数据库现在升级到数据库,并在每次更改DATABASE_VERSION整数时删除先前的数据库.
内容总结
以上是互联网集市为您收集整理的从资产文件夹升级Android SQLite数据库全部内容,希望文章能够帮你解决从资产文件夹升级Android SQLite数据库所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。