Chcete-li využít zabalenou databázi (tj. zahrnutou jako aktivum) pro plné využití, je třeba databázi rozbalit (automaticky) a zkopírovat na vhodné místo (nejčastěji data/data/<package_name>/databases/<database_name>
kde <package_name>
a <database_name>
bude podle názvu balíčku aplikace a názvu databáze).
Pro „zabalení“ by měla být databáze zahrnuta do složky aktiv a nejlépe do složky databází (požadováno, pokud používáte SQLiteAssetHelper bez úprav ).
Kromě toho je nutné provést kopii před skutečným otevřením databáze, poté ji lze otevřít.
Využití SQLiteAssetHelper
-
Úplně prvním krokem je vytvoření databáze, která má být zabalena, to nebude pokryto, protože existuje mnoho dostupných nástrojů. V tomto příkladu je databází soubor s názvem test.db
-
Poté byste měli vytvořit svůj projekt, v tomto případě byl projekt nazván DBtest s Compnay Domian jako com.DBtest takže název balíčku je dbtest.com.dbtest .
-
Dalším krokem je zkopírování databáze do složky aktiv.
- Vytvoření aktiv složku v src/main složka, pokud ještě neexistuje.
- Vytvoření složky databases"" ve složce **assets složka, pokud ještě neexistuje.
-
Kopírování souboru databáze (test.db v tomto příkladu) do složky databáze.
-
Další fází je nastavení projektu tak, aby využíval SQLiteAssetHelper jeho zahrnutím do build.gradle aplikace .
- Upravte build.gradle v aplikaci složka.
- Přidejte řádek
implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1'
v sekci závislostí. - Klikněte na Synchronizovat nyní
-
Vytvořte třídu, která je podtřídou nově/nyní dostupné třídy SQLiteAssethelper. Pro toto cvičení se bude jmenovat DBHelper .
- Klikněte pravým tlačítkem na Hlavní aktivita Java class, vyberte New a poté Java Class.
- Do pole Název zadejte DBHelper .
- Do pole SuperClass začněte psát SQLiteAsset (teď bude třída SQliteAssetHelper volitelná), takže ji vyberte. Mělo by to být:-
- Klikněte na tlačítko OK.
-
Vytvořte konstruktor pro třídu DBHelper v souladu s
:-
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);
}
}
-
Vytvořte instanci DBHelper a poté přistupte k databázi.
- Poznámka pro usnadnění další třída s názvem CommonSQLiteUtilities , jak je zkopírováno z Existují nějaké metody, které pomáhají při řešení běžných problémů SQLite?
-
Vytvořte instanci cclass DBHelper pomocí něčeho ve smyslu
DBHelper mDBHlpr = new DBHelper(this);
-
pomocí CommonSQLiteUtilities byla databáze přístupná pomocí :-
CommonSQLiteUtilities.logDatabaseInfo(mDBHlpr.getWritableDatabase());
-
Hlavní aktivita se v plném rozsahu stala
:-
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());
}
}
Výsledkem bylo úspěšné protokolování běhu :-
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
- První dva řádky jsou z
SQliteAssethelper
, zbytek pochází zlogDatabaseInfo
metodaCommonSQLiteUtilities
třída. - Při následných spuštěních nebude databáze zkopírována, protože již existuje.