For at bruge en pakket database (dvs. en inkluderet som et aktiv) til fuld brug skal databasen udpakkes (automatisk) og kopieres til et passende sted (oftest data/data/
For at "pakke" skal databasen inkluderes i aktivmappen og helst til en databasemappe (påkrævet, hvis du bruger SQLiteAssetHelper uden ændringer ).
Derudover skal kopieringen udføres, før databasen rent faktisk åbnes, hvorefter den kan åbnes.
Brug af SQLiteAssetHelper
-
Det allerførste trin er at oprette databasen, der skal pakkes, dette vil ikke blive dækket, da der er adskillige værktøjer tilgængelige. For dette eksempel er databasen en fil med navnet test.db
-
Du skal derefter oprette dit projekt, i dette tilfælde er projektet blevet kaldt DBtest med en Compnay Domian som com.DBtest så pakkenavnet er dbtest.com.dbtest .
-
Næste trin er at kopiere databasen til aktivmappen.
- Oprettelse af aktiverne mappe i src/main mappe, hvis den ikke allerede eksisterer.
- Oprettelse af mappen databaser"" i **aktiverne mappe, hvis den ikke allerede eksisterer.
-
Kopiering af databasefilen (test.db i dette eksempel) ind i databasemappen.
-
Næste trin er at konfigurere projektet til at bruge SQLiteAssetHelper ved at inkludere det i appens build.gradle .
- Rediger build.gradle i appen mappe.
- Tilføj linjen
implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1'
i afhængighedsafsnittet. - Klik på Synkroniser nu
-
Opret en klasse, der er en underklasse af den nyligt/nu tilgængelige SQLiteAssethelper-klasse. Til denne øvelse vil den hedde DBHelper .
- Højreklik på MainActivity java-klasse, vælg Ny og derefter Java-klasse.
- Indtast DBHelper i feltet Navn .
- Begynd at skrive SQLiteAsset i SuperClass-feltet (nu vil SQliteAssetHelper-klassen være valgbar), så vælg den. Det skulle løse sig at være:-
- Klik på OK.
-
Opret konstruktøren til DBHelper-klassen på linje med
:-
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);
}
}
-
Opret en instans af DBHelper og få adgang til databasen.
- Bemærk for nemheds skyld en anden klasse kaldet CommonSQLiteUtilities , som kopieret fra Er der nogen metoder, der hjælper med at løse almindelige SQLite-problemer?
-
Opret en instans af DBHelper cclass ved hjælp af noget i stil med
DBHelper mDBHlpr =new DBHelper(this);
-
ved hjælp af CommonSQLiteUtilities blev databasen tilgået ved hjælp af :-
CommonSQLiteUtilities.logDatabaseInfo(mDBHlpr.getWritableDatabase());
-
MainActivity blev i sin helhed
:-
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());
}
}
Resultatet var en vellykket kørselslogning :-
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
- De første to linjer er fra
SQliteAssethelper
, resten er fralogDatabaseInfo
metoden tilCommonSQLiteUtilities
klasse. - Ved efterfølgende kørsler vil databasen ikke blive kopieret, da den allerede eksisterer.