Eksporter SQLite-data fra din Android-enhed

For et par uger siden skrev jeg en artikel om, hvordan man gennemser SQLite-data på Android-emulatoren. Men hvad sker der, når du har brug for at hente data fra en faktisk Android-enhed? Nå, medmindre denne enhed er rodfæstet, vil du ikke være i stand til at komme til dataene ved hjælp af Eclipse og Dalvik Debug Monitor Server (DDMS); skal du være i stand til at skubbe dataene til enhedens SD-hukommelse. Det er her denne tutorial kan hjælpe.

Følg sammen med de trinvise instruktioner, eller download og importer hele projektet til Eclipse.

1. Opret et nyt Android-projekt i Eclipse. Mål Android 2.2 eller nyere.

2. For at få adgang til SD-kortet skal din ansøgning anmode om tilladelse i filen AndroidManifest.xml.

 AndroidManifest.xml 

3. Åbn filen Activity_main.xml i mappen / res / layout. Til denne demo stabler vi simpelthen tre knapper i et lineært layout.

 activity_main.xml 

4. Åbn filen /src/MainActivity.java, og opret en aktivitet, der implementerer on-click-behandleren. Wire knapperne i on oprette tilsidesættelse.

 MainActivity.java-pakke com.authorwjf.sqliteexport; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.channels.FileChannel; import android.os.Bundle; import android.os. Miljø; import android.view.View; import android.view.View.OnClickListener; import android.widget.Toast; import android.app.Aktivitet; import android.database.sqlite.SQLiteDatabase; offentlig klasse MainActivity udvider Aktivitetsimplementerer OnClickListener {privat statisk final String SAMPLE_DB_NAME = "TrekBook"; privat statisk final String SAMPLE_TABLE_NAME = "Info"; @Override offentligt tomrum onCreate (Bundle gemtInstanceState) {super.onCreate (gemtInstanceState); setContentView (R.layout.activity_main); findViewById (R.id.button1) .setOnClickListener (dette); findViewById (R.id.button2) .setOnClickListener (dette); findViewById (R.id.button3) .setOnClickListener (dette); } @Override offentligt ugyldigt onClick (View v) {switch (v.getId ()) {case R.id.button1: deleteDB (); pause; sag R.id.button2: exportDB (); pause; sag R.id.button3: createDB (); pause; }}} 

5. Det er tid til at implementere vores tre private arbejdstagerfunktioner. Lad os starte med at slette, da det er den nemmeste.

 privat tomrum deleteDB () {boolean result = this.deleteDatabase (SAMPLE_DB_NAME); if (resultat == true) {Toast.makeText (dette, "DB slettet!", Toast.LENGTH_LONG) .show (); }} 

6. Dernæst implementerer vi create db-funktionen. Til vores formål bruger vi raw sql til at oprette en dåse-database med en enkelt tabel og datarække.

 privat tomrum createDB () {SQLiteDatabase sampleDB = this.openOrCreateDatabase (SAMPLE_DB_NAME, MODE_PRIVATE, null); sampleDB.execSQL ("CREATE TABLE IF NOT EXISTS" + SAMPLE_TABLE_NAME + "(LastName VARCHAR, FirstName VARCHAR, " + "Rank VARCHAR);"); sampleDB.execSQL ("INSERT INTO" + SAMPLE_TABLE_NAME + "Værdier ('Kirk', 'James, T', 'Captain');"); sampleDB.close (); sampleDB.getPath (); Toast.makeText (dette, "DB Created @" + sampleDB.getPath (), Toast.LENGTH_LONG) .show (); } 

7. Vi kommer til vores eksportdata funktion. Hvis du læser dokumentationen til at skrive til SD-kortet, vil du se, at min metode adskiller sig lidt fra den anbefalede teknik. Google anbefaler at tjekke miljøet.getExternalStorageDirectory (). CanWrite () -metoden, før du prøver at kopiere til enhedens eksterne lager. Efter min erfaring er dette upålideligt. Returneringsværdien for denne metode bestemmes af hardware-producenten, og jeg har fundet mange tilfælde (inklusive Nexus 4), hvor metoden returnerer falsk, men skrivningen fungerer fint. Mit råd er bare at indpakke hele blokken i en prøvefangst.

 private void exportDB () {File sd = Environment.getExternalStorageDirectory (); Fildata = Miljø.getDataDirectory (); FileChannel kilde = null; FileChannel destination = null; String currentDBPath = "/ data /" + "com.authorwjf.sqliteexport" + "/ databaser /" + SAMPLE_DB_NAME; String backupDBPath = SAMPLE_DB_NAME; File currentDB = ny fil (data, currentDBPath); File backupDB = ny fil (sd, backupDBPath); prøv {source = new FileInputStream (currentDB) .getChannel (); destination = nyt FileOutputStream (backupDB) .getChannel (); destination.transferFrom (kilde, 0, kilde.størrelse ()); source.close (); destination.close (); Toast.makeText (dette, "DB eksporteret!", Toast.LENGTH_LONG) .show (); } fangst (IOException e) {e.printStackTrace (); }} 

Nu er du klar til at prøve det. Husk, at denne kode er beregnet til at køre på en enhed, ikke emulatoren (skønt det er muligt at få den til at fungere på en emulator, hvis du konfigurerer den med emuleret ekstern lagring).

Figur A


Når du har eksporteret databasen, skal du tilslutte enheden til en pc i masselagringstilstand for at overføre databasen. Når du har filen på din pc, kan du følge instruktionerne i min tidligere Android-artikel om SQLite-data for at gennemse den.

© Copyright 2021 | mobilegn.com