无法在 Android 上打开 sqlite 数据库

Cannot open sqlite database on Android

我无法在我的新 Android 应用程序上打开 Sqlite3 数据库。为了隔离问题,我创建了一个全新的应用程序。我将 sqlite3 db 放在 main 下的 Assets 文件夹中。

在清单中,我放置了以下几行:

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

我在这个测试应用程序中只有一个 activity,这是 activity 中的代码。它只做一件事: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 调用中获取了有效路径,但它似乎在说该文件不存在。

如果您阅读日志,它确实获取了路径,但除非您明确将数据库复制到应用程序的私有数据文件夹中,否则无法打开它。

另外值得一提的是,资产是只读的,所以即使它可以打开数据库,你也只能使用 SELECT 语句。

参考:Reading sqlite file from asset folder