SQLiteDatabase.openOrCreateDatabase(file, factory)和file间的冲突问题

      前几日学习数据库,当调用SQLiteDatabase.openOrCreateDatabase获取DB的时候一直报错:Counld not open database。我当时联想翩翩到底错在何处呢?

    1.权限问题

    配置文件中申请SD卡的操作权限了吗?
   <!-- 在SDCard中创建与删除文件权限 -->
  <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
  <!-- 往SDCard写入数据权限 -->
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 2.路径不存在,我当时的代码写法是:

  
    public static void setDbPath(Context context, String dbName) {
        String packageName = context.getPackageName();
        dbPath = String.format("/data/data/%1$s/databases/%2$s", packageName,
                "love");
        File file = new File(dbPath);
        if (file.exists()) {
            System.out.println("exists");
        } else {

           file.getParentFile().mkdirs();//创建文件夹,保证父目录存在

            SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbPath,
                    null);
            DBOpenHelper helper = new DBOpenHelper(context);
            helper.onCreate(db);
            if (file.exists()) {
                System.out.println("exists");
            } else {
                System.out.println("not exists");
            }
        }
        System.out.println(dbPath);
    }

  网上百度说可能是文件路径不存在导致的(那文章还被转载好多次,这纯属他妈的扯淡)

当时我傻傻地在  

SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbPath,
                    null);

之前写上file.mkdirs();

结果还是一样不行。(第一次不行是因为忘了加权限,第二次不行却是加权限以后又加了file.mkdirs());

  file.getParentFile().mkdirs();创建父目录,文件夹就够了,然后在文件夹下面创建数据库。而file.mkdirs())是将整个路径做成了文件夹,自然无法创建数据库了


已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页