【问题标题】:Failed to open Database Android Java SQLite无法打开数据库 Android Java SQLite
【发布时间】:2015-02-07 19:26:17
【问题描述】:

这是我的代码:

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

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

}

显然这是在我的主要活动中。

我还为我的主要活动添加了权限:

    <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

【问题讨论】:

  • 您是否尝试更改路径?您可以使用 getExternalFilesDir()getExternalStoragePublicDirectory() 以编程方式获取 SD 卡的路径(请查看 developer.android.com/guide/topics/data/… 了解更多详细信息)

标签: java android sqlite


【解决方案1】:

如果您的应用程序需要私有数据库,我建议您使用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)。

【讨论】:

  • 感谢您的回复。知道问题的原因是什么吗?
  • @John:对不起,我的帖子没有完成:我猜问题是你的路径 ("/...) 或者 Android 4.3/4.4 不允许访问所有内容的事实在 SD 卡上。您会在网络上找到很多关于此的信息。
猜你喜欢
  • 2014-08-13
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-01
  • 1970-01-01
  • 2012-03-23
相关资源
最近更新 更多