sqlite db, созданный браузером db, не работает в андроид студии - PullRequest
0 голосов
/ 09 декабря 2018

Я создал базу данных SQLite, используя DB Browser, когда я перемещаю ее в папку активов и открываю в андроид-студии, она выглядит так плохо, и она не работает.Каково решение ?: (

вот скриншот

1 Ответ

0 голосов
/ 09 декабря 2018

На самом деле снимок экрана в значительной степени подтверждает, что файл в папке ресурсов является допустимой базой данных SQLite.

То есть первые 16 байтов соответствуют размеру заголовка базы данных Строка заголовка: "SQLiteformat 3 \ 000 " Формат файла базы данных .

Сама Android Studio не содержит требований для фактического открытия файла в качестве базы данных SQLite (существуют инструменты, такие как DB Browserчто сделать это).

Что вам нужно сделать, с вашим приложением, это открыть файл как базу данных SQLiteDatabase.Обычно это достигается путем копирования файла из папки ресурса в подходящее место (поскольку папка ресурса является частью пакета, доступного только для чтения), а затем часто открывая его из этого места через подкласс SQLiteOpenHelper.

Доступен класс, а именно SQLiteAssetHelper , который может сделать открытие базы данных относительно простым. Обратите внимание , что SQLiteAssetHelper ожидает, что база данных (имя совпадает с именем файла, включая расширение) будет находиться в папке database папки assets (вам, вероятно, придется создать эту папку, хотяна снимке экрана показано, что вы уже поместили базу данных в папку базы данных).

Пример

Ниже приведен краткий пример использования SQliteAssethelper для открытия базы данных и в этом случае перечисления элементов (таблицы, представления, индексы, триггеры и т. д.) согласно sqlite_master (главная таблица SQlite).

Build.gradle (приложение) (его часть): -

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:+' //<<<<<<<<<< ADDED JUST THIS LINE
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
  • См. Комментарий к добавленной строке

DatabaseHelper (подкласс SQLiteAssethelper) DBHelper.java

public class DBHelper extends SQLiteAssetHelper {

    public static final String DBNAME = "DaycareCenters.db";
    public static final int DBVERSION = 1;

    SQLiteDatabase mDB;

    public DBHelper(Context context) {
        super(context, DBNAME, null, DBVERSION);
        mDB = this.getWritableDatabase();
    }
}

Anвызов Activity (в качестве примера) MainActivity.java

public class MainActivity extends AppCompatActivity {

    DBHelper mDBHlpr;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mDBHlpr = new DBHelper(this);
        Cursor csr = mDBHlpr.mDB.rawQuery("SELECT * FROM sqlite_master",null);
        while (csr.moveToNext()) {
            Log.d("SQLITEMASTER","Name = " + csr.getString(csr.getColumnIndex("name")) + " Type = " + csr.getString(csr.getColumnIndex("type")));
        }
        csr.close();
    }
}

Результат (записан в журнал)

  • Примечание. Я только что скопировал удобную базу данныхкопировать, таблицы и т. д.st не будет совпадать с вашим.

.

12-09 09:55:19.760 1473-1473/? I/SQLiteAssetHelper: successfully opened database DaycareCenters.db
12-09 09:55:19.764 1473-1473/? D/SQLITEMASTER: Name = android_metadata Type = table
12-09 09:55:19.764 1473-1473/? D/SQLITEMASTER: Name = player_card Type = table
12-09 09:55:19.764 1473-1473/? D/SQLITEMASTER: Name = sqlite_autoindex_player_card_1 Type = index
12-09 09:55:19.764 1473-1473/? D/SQLITEMASTER: Name = email Type = table
12-09 09:55:19.764 1473-1473/? D/SQLITEMASTER: Name = region Type = table
12-09 09:55:19.764 1473-1473/? D/SQLITEMASTER: Name = card Type = table
12-09 09:55:19.764 1473-1473/? D/SQLITEMASTER: Name = pc Type = table
12-09 09:55:19.764 1473-1473/? D/SQLITEMASTER: Name = sqlite_autoindex_pc_1 Type = index
  • Первая строка из SQliteAssetHelper - это подтверждает, что база данных была скопирована из папки активов.
  • Во 2-й строке показана таблица android_metadata, это таблица для Android, которая будет добавлена, она содержит локаль.
  • Несколько других таблиц.
  • Несколько индексов, которыеавтоматически создаются из-за ограничений или подразумеваемых ограничений
  • Короче говоря, все как положено.
...