На самом деле снимок экрана в значительной степени подтверждает, что файл в папке ресурсов является допустимой базой данных 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, которая будет добавлена, она содержит локаль.
- Несколько других таблиц.
- Несколько индексов, которыеавтоматически создаются из-за ограничений или подразумеваемых ограничений
- Короче говоря, все как положено.