SQLite
 sql >> Baza danych >  >> RDS >> SQLite

Odczytywanie bazy danych z folderu zasobów

Aby wykorzystać spakowaną bazę danych (tj. dołączoną jako zasób) do pełnego wykorzystania, baza danych musi zostać rozpakowana (automatycznie) i skopiowana do odpowiedniej lokalizacji (najczęściej data/data//databases/ gdzie i będzie odpowiednio zgodna z nazwą pakietu aplikacji i nazwą bazy danych).

Aby „spakować” bazę danych należy umieścić w folderze zasobów, a najlepiej w folderze baz danych (wymagane w przypadku korzystania z SQLiteAssetHelper bez modyfikacji ).

Dodatkowo kopia musi zostać wykonana przed faktycznym otwarciem bazy danych, po czym można ją otworzyć.

Korzystanie z SQLiteAssetHelper

  1. Pierwszym krokiem jest utworzenie bazy danych do spakowania, nie zostanie to omówione, ponieważ dostępnych jest wiele narzędzi. W tym przykładzie bazą danych jest plik o nazwie test.db

  2. Powinieneś następnie stworzyć swój projekt, w tym przypadku Projekt został nazwany DBtest z firmą Compnay Domian jako com.DBtest więc nazwa pakietu to dbtest.com.dbtest .

  3. Następnym etapem jest skopiowanie bazy danych do folderu zasobów.

    1. Tworzenie zasobów folder w src/main folder, jeśli jeszcze nie istnieje.
    2. Tworzenie folderu bazy danych”” w **zasobach folder, jeśli jeszcze nie istnieje.
    3. Kopiowanie pliku bazy danych (test.db w tym przykładzie) do folderu bazy danych.

  4. Następnym etapem jest skonfigurowanie projektu do korzystania z SQLiteAssetHelper poprzez uwzględnienie go w build.gradle aplikacji .

    1. Edytuj build.gradle w aplikacji folder.
    2. Dodaj wiersz implementacja „com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1” w sekcji zależności.
    3. Kliknij Synchronizuj teraz

  1. Utwórz klasę, która jest podklasą nowo/obecnie dostępnej klasy SQLiteAssethelper. W tym ćwiczeniu będzie się nazywać DBHelper .

    1. Kliknij prawym przyciskiem myszy Aktywność główna klasa Java, wybierz Nowa, a następnie Klasa Java.
    2. W polu Nazwa wpisz DBHelper .
    3. W polu SuperClass zacznij pisać SQLiteAsset (do tej pory można wybrać klasę SQliteAssetHelper), więc wybierz ją. Powinno to być:-
    4. Kliknij OK.
  2. Utwórz konstruktor dla klasy DBHelper zgodnie z liniami

:-

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. Utwórz instancję DBHelper, a następnie uzyskaj dostęp do bazy danych.

    1. Uwaga dla ułatwienia inna klasa o nazwie CommonSQLiteUtilities , skopiowane z Czy są jakieś metody, które pomagają w rozwiązywaniu typowych problemów z SQLite?
    2. Utwórz instancję klasy DBHelper, używając czegoś na wzór

      • DBHelper mDBHlpr =nowy DBHelper(this);
    3. przy użyciu narzędzia CommonSQLiteUtilities do bazy danych uzyskano dostęp za pomocą :-

      • CommonSQLiteUtilities.logDatabaseInfo(mDBHlpr.getWritableDatabase());
    4. Główna działalność stała się w pełni

:-

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());
    }
}

Rezultatem było pomyślne rejestrowanie przebiegu :-

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
  • Pierwsze dwie linie pochodzą z SQliteAssethelper , reszta pochodzi z logDatabaseInfo metoda CommonSQLiteUtilities klasa.
  • W przypadku przebiegów podsekwencji baza danych nie zostanie skopiowana, ponieważ już istnieje.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak losowo ustawić tekst do przycisków z SQLite bez powtórzeń?

  2. PowerManager.PARTIAL_WAKE_LOCK android

  3. Importuj plik CSV do tabeli SQLite

  4. Zamów SQLite według daty1530019888000

  5. Jak poprawić wydajność bazy danych SQLite dla Androida?