За да се използва пакетирана база данни (т.е. такава, която е включена като актив) за пълно използване, базата данни трябва да бъде разархивирана (автоматично) и копирана на подходящо място (най-често data/data/
<име_пакета>код> и
<име_на_база данни>код> ще бъде според името на пакета на приложението и съответно името на базата данни).
За да "опаковате", базата данни трябва да бъде включена в папката с активи и за предпочитане в папка с бази данни (изисква се, ако използвате SQLiteAssetHelper без модификация ).
Освен това копието трябва да бъде направено преди реалното отваряне на базата данни, след което тя може да бъде отворена.
Използване на SQLiteAssetHelper
-
Първата стъпка е да създадете базата данни, която да бъде пакетирана, това няма да бъде покрито, тъй като има много налични инструменти. За този пример базата данни е файл с име test.db
-
След това трябва да създадете своя проект, в този случай проектът е наречен DBtest с Compnay Domian като com.DBtest така че името на пакета е dbtest.com.dbtest .
-
Следващият етап е да копирате базата данни в папката с активи.
- Създаване на активи папка в src/main папка, ако все още не съществува.
- Създаване на папката бази данни" в **активите папка, ако все още не съществува.
-
Копиране на файла на базата данни (test.db в този пример) в папката на базата данни.
-
Следващият етап е да настроите проекта да използва SQLiteAssetHelper, като го включите в build.gradle на приложението .
- Редактирайте build.gradle в Приложението папка.
- Добавете реда
implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1'
в секцията зависимости. - Щракнете върху Синхронизиране сега
-
Създайте клас, който е подклас на новия/сега наличния клас SQLiteAssethelper. За това упражнение то ще се нарича DBHelper .
- Щракнете с десния бутон върху Основна активност java клас, изберете Нов и след това Java клас.
- В полето Име въведете DBHelper .
- В полето SuperClass започнете да пишете SQLiteAsset (досега класът SQliteAssetHelper ще бъде избираем), така че го изберете. Трябва да се реши да бъде:-
- Щракнете върху OK.
-
Създайте конструктора за класа DBHelper по линиите на
:-
public class DBHelper extends SQLiteAssetHelper {
public static final String DBNAME = "test.db"; //<<<< must be same as file name
public static final int DBVERSION = 1;
public DBHelper(Context context) {
super(context,DBNAME,null,DBVERSION);
}
}
-
Създайте екземпляр на DBHelper и след това отворете базата данни.
- Забележка за улеснение друг клас, наречен CommonSQLiteUtilities , както е копирано от Има ли методи, които помагат при разрешаването на често срещани проблеми със SQLite?
-
Създайте екземпляр на класа DBHelper, като използвате нещо по реда на
DBHelper mDBHlpr =нов DBHelper(това);
-
с помощта на CommonSQLiteUtilities базата данни беше достъпна с помощта на :-
CommonSQLiteUtilities.logDatabaseInfo(mDBHlpr.getWritableDatabase());
-
Основната активност в пълен размер стана
:-
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DBHelper mDBHlpr = new DBHelper(this);
CommonSQLiteUtilities.logDatabaseInfo(mDBHlpr.getWritableDatabase());
}
}
Резултатът беше успешно записване на стартиране :-
04-11 06:12:55.091 1401-1401/dbtest.com.dbtest W/SQLiteAssetHelper: copying database from assets...
database copy complete
04-11 06:12:55.123 1401-1401/dbtest.com.dbtest I/SQLiteAssetHelper: successfully opened database test.db
04-11 06:12:55.127 1401-1401/dbtest.com.dbtest D/SQLITE_CSU: DatabaseList Row 1 Name=main File=/data/data/dbtest.com.dbtest/databases/test.db
Database Version = 1
Table Name = mytable Created Using = CREATE TABLE mytable (
_id INTEGER PRIAMRY KEY,
mydata TEXT,
inserted INTEGER DEFAULT CURRENT_TIMESTAMP
)
Table = mytable ColumnName = _id ColumnType = INTEGER PRIAMRY KEY Default Value = null PRIMARY KEY SEQUENCE = 0
Table = mytable ColumnName = mydata ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
Table = mytable ColumnName = inserted ColumnType = INTEGER Default Value = CURRENT_TIMESTAMP PRIMARY KEY SEQUENCE = 0
Table Name = android_metadata Created Using = CREATE TABLE android_metadata (locale TEXT)
Table = android_metadata ColumnName = locale ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
- Първите два реда са от
SQliteAssethelper
, останалите са отlogDatabaseInfo
метод наCommonSQLiteUtilities
клас. - При подпоследователно изпълнение базата данни няма да бъде копирана, тъй като вече съществува.