安卓SQLite打开数据库的错误

来源:互联网 发布:java教程视频下载 编辑:程序博客网 时间:2024/05/16 12:55
今天准备在安卓创建一个数据库,语句如下

SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(databaseFile, null);

可是死活都会有一个错误

02-27 22:28:37.149 11221-11221/io.wicp.namespacewjx.salarycalculator E/SQLiteLog: (14) cannot open file at line 30191 of [00bb9c9ce4]02-27 22:28:37.149 11221-11221/io.wicp.namespacewjx.salarycalculator E/SQLiteLog: (14) os_unix.c:30191: (21) open(/data/data/io.wicp.namespacewjx.salarycalculator/databases/salary database.db3) - 02-27 22:28:37.159 11221-11221/io.wicp.namespacewjx.salarycalculator E/SQLiteDatabase: Failed to open database '/data/data/io.wicp.namespacewjx.salarycalculator/databases/salary database.db3'.                                                                                       android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database                                                                                           at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)                                                                                           at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209)                                                                                           at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)                                                                                           at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)                                                                                           at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)                                                                                           at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)                                                                                           at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804)                                                                                           at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789)                                                                                           at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)                                                                                           at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:709)                                                                                           at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:702)                                                                                           at io.wicp.namespacewjx.salarycalculator.model.db.DatabaseManager.initDB(DatabaseManager.java:35)                                                                                           at io.wicp.namespacewjx.salarycalculator.model.db.DatabaseManager.<init>(DatabaseManager.java:21)                                                                                           at io.wicp.namespacewjx.salarycalculator.activity.SalaryMainActivity.testWorkerDatabase(SalaryMainActivity.java:30)                                                                                           at io.wicp.namespacewjx.salarycalculator.activity.SalaryMainActivity.onCreate(SalaryMainActivity.java:21)                                                                                           at android.app.Activity.performCreate(Activity.java:5231)                                                                                           at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)                                                                                           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2163)                                                                                           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269)                                                                                           at android.app.ActivityThread.access$800(ActivityThread.java:135)                                                                                           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)                                                                                           at android.os.Handler.dispatchMessage(Handler.java:102)                                                                                           at android.os.Looper.loop(Looper.java:136)                                                                                           at android.app.ActivityThread.main(ActivityThread.java:5045)                                                                                           at java.lang.reflect.Method.invokeNative(Native Method)                                                                                           at java.lang.reflect.Method.invoke(Method.java:515)                                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)                                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)                                                                                           at dalvik.system.NativeStart.main(Native Method)


我尝试给这个程序读写的权限

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

可是错误依旧

后来,网上搜索许多的文章(原文章忘记在哪里了,不过感谢那个文章作者),才知道原来,OpenOrCreateDatabase并不会帮我们创建一个文件,这个文件必须由自己创建。于是,添加如下的代码

if (!databaseFile.exists()) {databaseFile.getParentFile().mkdirs();try {databaseFile.createNewFile();} catch (IOException e) {e.printStackTrace();}}
终于可以了,成功打开了数据库

0 0
原创粉丝点击