Создание базы данных SQLite openOrCreateDatabase, каков правильный путь к базе данных приложения - PullRequest
1 голос
/ 15 марта 2019

В настоящее время я испытываю возможности 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) не удается открыть файл в строке 35652 [8201f4e1c5] (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 ]

1 голос
/ 16 марта 2019

Вы можете получить путь к стандартному / рекомендуемому местоположению, используя метод 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: <<<<<
0 голосов
/ 15 марта 2019

Вы добавили <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> в свой манифест?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...