sql >> Database teknologi >  >> RDS >> SQLite

Læsning af en database fra aktivmappen

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//databaser/ hvor og vil være i henhold til henholdsvis appens pakkenavn og databasenavnet).

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

  1. 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

  2. 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 .

  3. Næste trin er at kopiere databasen til aktivmappen.

    1. Oprettelse af aktiverne mappe i src/main mappe, hvis den ikke allerede eksisterer.
    2. Oprettelse af mappen databaser"" i **aktiverne mappe, hvis den ikke allerede eksisterer.
    3. Kopiering af databasefilen (test.db i dette eksempel) ind i databasemappen.

  4. Næste trin er at konfigurere projektet til at bruge SQLiteAssetHelper ved at inkludere det i appens build.gradle .

    1. Rediger build.gradle i appen mappe.
    2. Tilføj linjen implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1' i afhængighedsafsnittet.
    3. Klik på Synkroniser nu

  1. Opret en klasse, der er en underklasse af den nyligt/nu tilgængelige SQLiteAssethelper-klasse. Til denne øvelse vil den hedde DBHelper .

    1. Højreklik på MainActivity java-klasse, vælg Ny og derefter Java-klasse.
    2. Indtast DBHelper i feltet Navn .
    3. 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:-
    4. Klik på OK.
  2. 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);
    }
}
  1. Opret en instans af DBHelper og få adgang til databasen.

    1. 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?
    2. Opret en instans af DBHelper cclass ved hjælp af noget i stil med

      • DBHelper mDBHlpr =new DBHelper(this);
    3. ved hjælp af CommonSQLiteUtilities blev databasen tilgået ved hjælp af :-

      • CommonSQLiteUtilities.logDatabaseInfo(mDBHlpr.getWritableDatabase());
    4. 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 fra logDatabaseInfo metoden til CommonSQLiteUtilities klasse.
  • Ved efterfølgende kørsler vil databasen ikke blive kopieret, da den allerede eksisterer.


  1. Forhåndsvisning af dokumenter i Microsoft Access-formular

  2. Spørgsmål og svar fra vores Parameter Sniffing-webinarserie

  3. PostgreSQL Connection Pooling:Del 4 – PgBouncer vs. Pgpool-II

  4. Installer PL/Java 1.5.2 i PostgreSQL 11