Android 无法打开数据库

Android 无法打开数据库,android,sqlite,Android,Sqlite,到目前为止,我的应用程序运行良好,但在某些设备上,我遇到了一个错误(例如Android 4.1或4.3) 在DBManager类中,我有: public class DBManager { public DBHelper helper; private SQLiteDatabase db; private Cursor c; public DBManager(Context context) { helper = new DBHelper(con

到目前为止,我的应用程序运行良好,但在某些设备上,我遇到了一个错误(例如Android 4.1或4.3)

在DBManager类中,我有:

public class DBManager {
    public DBHelper helper;
    private SQLiteDatabase db;
    private Cursor c;

    public DBManager(Context context) {
        helper = new DBHelper(context);
        db = helper.getReadableDatabase();

       // db = helper.getWritableDatabase();
    }
在这方面:

 public class DBHelper extends SQLiteOpenHelper {
        private static final String DATABASE_NAME = Environment.getExternalStorageDirectory() + "/database/database.db3";
 private static final int DATABASE_VERSION = 3;

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE_SQL);

    }

清单等可以,但我不明白为什么在某些设备上会出现SQLiteCantoPendDatabaseException。我希望有人能帮我解决这个问题?Thanx预先

您正在将
数据库\u名称
设置为以返回的目录为根的路径

引用
getExternalStorageDirectory()
的文档:

如果已装入此目录,则当前可能无法访问此目录 已从设备中删除,或 发生了其他一些问题

如果您真的不需要指定数据库文件的位置,那么您应该只指定文件名(例如,“MyDB”),Android框架将为您确定合适的路径

[更新]

通常,数据库(可能包含非常重要的数据,甚至可能包含敏感的用户信息)不存储在外部存储器中,因为:

  • 其他应用程序可以访问该文件,并且
  • 用户可能会意外损坏/删除该文件

  • 如果要创建数据库的备份副本(并将其放入外部存储器),请参阅。

    为什么不发布任何代码?如何获取帮助检查这太快了:)现在我添加了代码:)您好,是的,但我的目的是使用getExternalStorageDirectory()将其存储在那里,例如/storage/emulated/0/database/databes.db3…因为这样用户每次都可以从此数据库进行备份。也许我会猜错误发生在某些设备上,因为创建数据库时路径不存在?
     public class DBHelper extends SQLiteOpenHelper {
            private static final String DATABASE_NAME = Environment.getExternalStorageDirectory() + "/database/database.db3";
     private static final int DATABASE_VERSION = 3;
    
     public DBHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(CREATE_TABLE_SQL);
    
        }