我无法在我的新Android应用上打开Sqlite3
数据库。为了解决问题,我创建了一个全新的应用程序。我将sqlite3数据库放在main下的Assets
文件夹中。
在清单中,我放置了以下几行:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
我在这个测试应用中只有一个活动,这是该活动中的代码。它只做了一件事:attempts to open the db
。它会立即死亡并向控制台输出错误(详见下文)
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Context context = getApplicationContext();
String db_path = String.valueOf(context.getDatabasePath("production.sqlite3"));
SQLiteDatabase db = SQLiteDatabase.openDatabase(db_path, null, SQLiteDatabase.OPEN_READWRITE);
}
}
以下是日志中的相关错误:
09-09 20:10:54.788 9850-9850/? E/SQLiteLog: (14) cannot open file at line 31278 of [2ef4f3a5b1]
09-09 20:10:54.788 9850-9850/? E/SQLiteLog: (14) os_unix.c:31278: (2) open(/data/user/0/com.hawthornemackenzie.sesame/databases/production.sqlite3) -
09-09 20:10:54.788 9850-9850/? E/SQLiteDatabase: Failed to open database '/data/user/0/com.hawthornemackenzie.sesame/databases/production.sqlite3'.
android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
它似乎从getDatabasePath
调用获得了一个有效的路径,但它似乎说该文件不存在。
答案 0 :(得分:1)
如果您阅读了日志,它确实会获取路径,但除非您已将数据库明确复制到应用程序的私有数据文件夹中,否则无法打开它。
另外值得一提的是资产是只读的,所以即使它可以打开数据库,你也只能使用SELECT语句。