Eksporter SQLite-data fra Android-enheten din

For et par uker siden skrev jeg en artikkel om hvordan du bla gjennom SQLite-data på Android-emulatoren. Men hva skjer når du trenger å hente data fra en faktisk Android-enhet? Vel, med mindre den enheten er forankret, vil du ikke kunne komme til dataene ved å bruke Eclipse og Dalvik Debug Monitor Server (DDMS); må du kunne skyve dataene til enhetens SD-minne. Det er her denne opplæringen kan hjelpe.

Følg med trinnvise instruksjoner, eller last ned og importer hele prosjektet til Eclipse.

1. Lag et nytt Android-prosjekt i Eclipse. Målrett Android 2.2 eller nyere.

2. For å få tilgang til SD-kortet, må applikasjonen din be om tillatelse i filen AndroidManifest.xml.

 AndroidManifest.xml 

3. Åpne filen Activity_main.xml i mappen / res / layout. For denne demonstrasjonen stabler vi ganske enkelt tre knapper i en lineær layout.

 activity_main.xml 

4. Åpne filen /src/MainActivity.java og opprett en aktivitet som implementerer on-click-behandleren. Koble opp knappene i overstyring av on create.

 MainActivity.java-pakke com.authorwjf.sqliteexport; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; importer 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 utvider aktivitets implementeringer OnClickListener {private statisk final String SAMPLE_DB_NAME = "TrekBook"; private static final String SAMPLE_TABLE_NAME = "Info"; @Override offentlig tomrom onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); findViewById (R.id.button1) .setOnClickListener (this); findViewById (R.id.button2) .setOnClickListener (this); findViewById (R.id.button3) .setOnClickListener (this); } @Override offentlig tomrom onClick (View v) {switch (v.getId ()) {case R.id.button1: deleteDB (); gå i stykker; sak R.id.button2: exportDB (); gå i stykker; sak R.id.button3: createDB (); gå i stykker; }}} 

5. Det er på tide å implementere våre tre private arbeiderfunksjoner. La oss starte med å slette, siden det er det enkleste.

 private void deleteDB () {boolean result = this.deleteDatabase (SAMPLE_DB_NAME); if (result == true) {Toast.makeText (dette, "DB Deleted!", Toast.LENGTH_LONG) .show (); }} 

6. Deretter implementerer vi create db-funksjonen. For våre formål bruker vi raw sql for å lage en hermetisk database med en enkelt tabell og datarekke.

 private void 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 + "Verdier ('Kirk', 'James, T', 'Captain');"); sampleDB.close (); sampleDB.getPath (); Toast.makeText (dette, "DB Created @" + sampleDB.getPath (), Toast.LENGTH_LONG) .show (); } 

7. Vi kommer til eksportdatafunksjonen vår. Hvis du leser dokumentasjonen for å skrive til SD-kortet, vil du se at metoden min skiller seg litt fra anbefalt teknikk. Google anbefaler å sjekke metoden Environment.getExternalStorageDirectory (). CanWrite () før du prøver å kopiere til enhetens eksterne lagring. Etter min erfaring er dette upålitelig. Returverdien for denne metoden bestemmes av maskinvareprodusenten, og jeg har funnet mange tilfeller (inkludert Nexus 4) der metoden returnerer falsk, men skrivingen fungerer helt fint. Mitt råd er å bare pakke hele blokken i en prøvefangst.

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

Nå er du klar til å prøve. Husk at denne koden er ment å kjøre på en enhet, ikke emulatoren (selv om det er mulig å få den til å fungere på en emulator hvis du konfigurerer den med emulert ekstern lagring).

Figur A


Når du har eksportert databasen, må du koble enheten til en PC i masselagringsmodus for å overføre databasen. Når du har filen på PCen din, kan du følge instruksjonene i min forrige Android-artikkel om SQLite-data for å bla gjennom den.

© Copyright 2021 | pepebotifarra.com