无法在 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
我无法在我的新 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