无法打开数据库 Android Java SQLite

Failed to open Database Android Java SQLite

这是我的代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    SQLiteDatabase.openOrCreateDatabase("/gregpeck.db", null);

}

显然这是在我的 Main 里面 Activity。

我也已将权限添加到我的 Main Activity:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="ie.callanan.dennis.testhw" >

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

        <application
            android:allowBackup="true"

我收到的错误信息是:

Failed to open database 'gregpeck.db'.
android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database

如果您的应用程序需要私有数据库,我建议使用 SQLiteOpenHelper

public class MyDatabaseHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "DatabaseName";
    private static final int DATABASE_VERSION = 1;
    private static final String TABLE_CREATE = "CREATE TABLE ....";

    public MyDatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase database) {
        database.execSQL(TABLE_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase database,int oldVersion,int newVersion){
        // do whatever is required for the upgrade 
    }
}

Here 你找到一个完整的例子。如果要从 SD 卡打开数据库,请使用:

File file = new File("/sdcard/db.sqlite" ); 
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(file, null);
Log.d("MyApp", "Successfully opened: "  + db.isOpen());

对于第一种情况,您不需要任何特定权限。对于第二个你做的。 注意: Android 4.3 和 4.4 确实限制了对 SD 卡的访问。因此,您可能根本无法访问数据库文件(例如,请参见 article)。