sql >> Databasteknik >  >> RDS >> SQLite

Läser en databas från tillgångsmappen

För att kunna använda en paketerad databas (dvs en som ingår som en tillgång) för full användning måste databasen packas upp (automatiskt) och kopieras till en lämplig plats (oftast data/data//databaser/<) /kod> där och kommer att vara enligt Appens paketnamn respektive databasnamnet).

För att "paketera" databasen bör inkluderas i tillgångsmappen och helst till en databasmapp (krävs om du använder SQLiteAssetHelper utan ändringar ).

Dessutom måste kopieringen göras innan databasen faktiskt öppnas, varefter den kan öppnas.

Använda SQLiteAssetHelper

  1. Det allra första steget är att skapa databasen som ska paketeras, detta kommer inte att täckas, eftersom det finns många tillgängliga verktyg. I det här exemplet är databasen en fil med namnet test.db

  2. Du bör sedan skapa ditt projekt i det här fallet har projektet kallats DBtest med en Compnay Domian som com.DBtest så paketnamnet är dbtest.com.dbtest .

  3. Nästa steg är att kopiera databasen till tillgångsmappen.

    1. Skapa tillgångarna mappen i src/main mapp, om den inte redan finns.
    2. Skapar mappen databaser"" i **tillgångar mapp, om den inte redan finns.
    3. Kopiera databasfilen (test.db i det här exemplet) till databasmappen.

  4. Nästa steg är att ställa in projektet för att använda SQLiteAssetHelper genom att inkludera det i appens build.gradle .

    1. Redigera build.gradle i appen mapp.
    2. Lägg till raden implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1' i avsnittet beroenden.
    3. Klicka på Synkronisera nu

  1. Skapa en klass som är en underklass till den nyligen/nu tillgängliga SQLiteAssethelper-klassen. För denna övning kommer den att heta DBHelper .

    1. Högerklicka på MainActivity java-klass, välj Ny och sedan Java-klass.
    2. I fältet Namn anger du DBHelper .
    3. Börja skriva SQLiteAsset i SuperClass-fältet (nu kommer klassen SQliteAssetHelper att vara valbar), så välj den. Det bör lösa sig att vara:-
    4. Klicka på OK.
  2. Skapa konstruktorn för DBHelper-klassen i 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. Skapa en instans av DBHelper och öppna sedan databasen.

    1. Obs för enkelhetens skull en annan klass som heter CommonSQLiteUtilities , som kopierats från Finns det några metoder som hjälper till att lösa vanliga SQLite-problem?
    2. Skapa en instans av DBHelper cclass med hjälp av något i stil med

      • DBHelper mDBHlpr =new DBHelper(detta);
    3. med hjälp av CommonSQLiteUtilities öppnades databasen med :-

      • CommonSQLiteUtilities.logDatabaseInfo(mDBHlpr.getWritableDatabase());
    4. MainActivity i sin helhet blev

:-

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 blev en lyckad körningsloggning :-

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 två första raderna är från SQliteAssethelper , resten är från logDatabaseInfo metod för CommonSQLiteUtilities klass.
  • Vid efterföljande körningar kommer databasen inte att kopieras eftersom den redan finns.


  1. Returnera endast numeriska värden i MariaDB

  2. Konfigurera Hibernate för att använda Oracles SYS_GUID() för primärnyckel

  3. Java JDBC ignorerar setFetchSize?

  4. PL/pgSQL kontrollerar om en rad finns