sql >> Databáze >  >> RDS >> SQLite

Čtení databáze ze složky aktiv

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

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

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

  3. Dalším krokem je zkopírování databáze do složky aktiv.

    1. Vytvoření aktiv složku v src/main složka, pokud ještě neexistuje.
    2. Vytvoření složky databases"" ve složce **assets složka, pokud ještě neexistuje.
    3. Kopírování souboru databáze (test.db v tomto příkladu) do složky databáze.

  4. Další fází je nastavení projektu tak, aby využíval SQLiteAssetHelper jeho zahrnutím do build.gradle aplikace .

    1. Upravte build.gradle v aplikaci složka.
    2. Přidejte řádek implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1' v sekci závislostí.
    3. Klikněte na Synchronizovat nyní

  1. Vytvořte třídu, která je podtřídou nově/nyní dostupné třídy SQLiteAssethelper. Pro toto cvičení se bude jmenovat DBHelper .

    1. Klikněte pravým tlačítkem na Hlavní aktivita Java class, vyberte New a poté Java Class.
    2. Do pole Název zadejte DBHelper .
    3. 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:-
    4. Klikněte na tlačítko OK.
  2. 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);
    }
}
  1. Vytvořte instanci DBHelper a poté přistupte k databázi.

    1. 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?
    2. Vytvořte instanci cclass DBHelper pomocí něčeho ve smyslu

      • DBHelper mDBHlpr = new DBHelper(this);
    3. pomocí CommonSQLiteUtilities byla databáze přístupná pomocí :-

      • CommonSQLiteUtilities.logDatabaseInfo(mDBHlpr.getWritableDatabase());
    4. 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í z logDatabaseInfo metoda CommonSQLiteUtilities třída.
  • Při následných spuštěních nebude databáze zkopírována, protože již existuje.


  1. spouští vpřed křížové vydání v R12.2

  2. Chyba PDB Unplug ORA-17528

  3. Jak vložit blob do databáze pomocí SQL Server Management Studio

  4. Zjistěte, zda je objekt uživatelsky definovanou tabulkou na serveru SQL pomocí OBJECTPROPERTY()