SQLite数据库创建openOrCreateDatabase,什么是应用程序数据库的正确路径

时间:2019-03-15 17:30:39

标签: java android sqlite

我目前正在尝试Java和Android的功能,并且想尝试创建数据库。目前,我的代码如下所示。事实是,它在创建数据库时崩溃。我收到此错误:

  

E / SQLiteDatabase:无法打开数据库“ fieldgame”。       android.database.sqlite.SQLiteCantOpenDatabaseException:未知错误(代码14):无法打开数据库

我还有另一个错误

  

03-15 18:39:30.406 32465-32486 / com.example.game.fieldgame E / SQLiteLog:(14)无法在[8201f4e1c5]的35652行打开文件       (14)os_unix.c:35652:(2)open(// fieldgame)-

我认为问题出在我指定的路径上,因为我只传递了数据库名称。我的问题是我如何才能将正确的路径简单地传递到我的应用程序数据库,以便能够从中读取

 JSONObject json = jsonParser.makeHttpRequest(urlSendCode, "GET", params);
        SQLiteDatabase fieldgameDB = SQLiteDatabase.openOrCreateDatabase("fieldgame", null);
        fieldgameDB.execSQL("CREATE TABLE IF NOT EXISTS assignments(title VARCHAR,description VARCHAR,assignmentId INT, created_at TIMESTAMP);");
        fieldgameDB.execSQL("INSERT INTO assignments VALUES(json.get(title), json.get(description),json.get(id), json.get(created_at))");
        Cursor cursor;
        cursor = (Cursor) fieldgameDB.rawQuery("SELECT * FROM assignments WHERE assignmentId = 1", null);
        cursor.moveToFirst();
        System.out.print(cursor.getString(cursor.getColumnIndex("description")));

2 个答案:

答案 0 :(得分:1)

您可以使用Context的 getDatabasePath 方法获取默认/推荐位置的路径,您可能需要创建数据库目录。

例如在活动的 onCreate 方法中使用经过简化的代码,然后:-

    mContext = this;

    // Create the database directory if it doesn't exist 
    File dbpath = mContext.getDatabasePath("fieldgames");
    if (!dbpath.getParentFile().exists()) {
        dbpath.getParentFile().mkdirs();
    }
    SQLiteDatabase fieldgameDB = SQLiteDatabase.openOrCreateDatabase(dbpath,null);
    fieldgameDB.execSQL("CREATE TABLE IF NOT EXISTS assignments(title VARCHAR,description VARCHAR,assignmentId INT, created_at TIMESTAMP);");
    fieldgameDB.execSQL("INSERT INTO assignments VALUES('title', 'description',1, 'created_at')");
    Cursor cursor;
    cursor = (Cursor) fieldgameDB.rawQuery("SELECT * FROM assignments", null);
    cursor.moveToFirst();
    DatabaseUtils.dumpCursor(cursor);
    System.out.print(cursor.getString(cursor.getColumnIndex("description")));
    cursor.close();

结果:-

03-16 08:01:23.606 13478-13478/? I/System.out: >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@2337112b
03-16 08:01:23.606 13478-13478/? I/System.out: 0 {
03-16 08:01:23.606 13478-13478/? I/System.out:    title=title
03-16 08:01:23.606 13478-13478/? I/System.out:    description=description
03-16 08:01:23.606 13478-13478/? I/System.out:    assignmentId=1
03-16 08:01:23.606 13478-13478/? I/System.out:    created_at=created_at
03-16 08:01:23.606 13478-13478/? I/System.out: }
03-16 08:01:23.606 13478-13478/? I/System.out: <<<<<

答案 1 :(得分:0)

您已将<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />添加到清单中吗?