sqlite-Datenbanken von Android auf PC übertragen

U

User

Neues Mitglied
0
Guten Tag,

ich habe eine Frage bezüglich der sqlite-Datenbanken bei Android. Ich habe ein Programm geschrieben, dass Daten (Postleitzahlen mit Datum und Uhrzeit) in einer Datenbank speichert. Diese würde ich nun gerne auch mit dem PC auslesen können.

Bei den Emulatoren habe ich eine Möglichkeit gefunden, indem ich dort im Ordner /data/data/[Programmname]/databases die jeweilige Datenbank aufrufe und auslesen kann. Wenn ich aber mein Android-Gerät mit dem PC verbinde finde ich weder auf der SD-Karte noch im internen Speicher eine passende Datei.

Deshalb nun meine Frage: Gibt es eine Möglichkeit, die Datenbank auch auf dem PC zu sehen? Oder gibt es vielleicht Software für Android, mit der die Datenbanken verschickt werden können? Ich selbst habe auch nach längerem Suchen (über Google) keine Ideen mehr.

Mit freundlichen Grüßen,
User
 
Liegt auf dem Gerät an derselben Stelle, allerdings hat da nur die App selber Zugriff (und root halt, das ist klar).
 
Kommt man denn vielleicht mit anderen Apps an die Datenbank?

Als ich das Gerät an einen PC angeschlossen habe, wurde mir im Ordner Data nichts weiter angezeigt (noch nichteinmal ein Unterordner). Auch mit Android selbst werden keine Unterordner angezeigt...
 
Du brauchst also entweder root. Dann kannst Du von Hand oder mit apps aus dem Market die db verschieben, auslesen oder irgendwohinexportieren. Oder Deine App muss eine zusätzliche Funktion bekommen, vielleicht nur in einem speziellen Modus für Dich zu verwenden, die die DB exportiert, z.B. als CSV Datei, auf SD. Die kann Dein PC dann wieder einlesen.
 
Man kann afair auch den Speicherort der DB vorher festlegen und sie so auf der SD Karte speichern.
 
Müsste die App nicht auch ihre eigene .db-Datei lesen können und die ganz simpel selber auf die SD-Karte kopieren können? Dürfte ja nur ein reines Zugriffsrechte-Problem sein, und Leserechte hat der User der App logischerweise auf die Datei.
 
@klausa2: Wie komme ich in den root-Modus? Ich habe leider noch nicht viel Erfahrung mit Android sammeln können. Das weitere exportieren wäre auch ein Idee, leider kann ich dann aber nur schwer etwas an der Datenbank verändern.

@the_alien: Muss ich den Speicherort dann im Code angeben? Ich habe bislang nur den Datenbanknamen über
Code:
private static final String DATENBANK_NAME = "postleitzahlen.db"
in meinem Quellcode festgelegt.


EDIT: @Kranki: Wenn das gehen würde, wäre es natürlich auch praktisch. Dann könnte ich zum Beispiel bei Beenden des Programms eine Kopie erstellen. Leider weiss ich aber (noch) nicht, wie ich dies lösen könnte.
 
Ich habe nun einmal den Quellcode unter diesen Link ausprobiert: https://www.android-hilfe.de/forum/...datenank-auf-sd-karte-mit-demo-app.15376.html

Leider kann ich das Programm aber nicht auf dem Gerät starten, da die Installation fehlschlägt (Vielleicht wegen der Version von Android? Konnte die vom Quelltext bisher nicht in Eclipse verändern, da ich kein passendes Menü gefunden habe).

Außerdem habe ich den Quellcode verwendet, um die Datenbank auf der SD-Karte zu speichern. Aber auch dort wird die Datenbank nicht angezeigt, als ob die Datei garnicht vorhanden wäre...
 
Ich weiss ist schon länger als ein Jahr her, aber bin zuffälig auf diesem Thread gestossen. Hatte das selbe Problem und habe es durch ein einfaches kopieren gelöst, genau das was Kranki schon geschrieben hat (Also die DB vom tele zur SD Karte kopieren).

Naja, wenns jemand interessiert..:
Code:
private void copy_to_sd() throws IOException {
        File inputFile = new File("/data/data/[paketname]/databases/myDB");
        File outputFile = new File("/sdcard/myDB");  
        
        FileReader in = new FileReader(inputFile);
        FileWriter out = new FileWriter(outputFile);
        
        int c;

        while ((c = in.read()) != -1)
          out.write(c);

        in.close();
        out.close();
}
wobei myDB die zu kopierende Daten Bank ist.
Natürlich muss man auch rechte für den Zugriff auf der SD haben..!

-MFG BFK-
 
Zuletzt bearbeitet:
BFK schrieb:
Ich weiss ist schon länger als ein Jahr her, aber bin zuffälig auf diesem Thread gestossen. Hatte das selbe Problem und habe es durch ein einfaches kopieren gelöst, genau das was Kranki schon geschrieben hat (Also die DB vom tele zur SD Karte kopieren).

Naja, wenns jemand interessiert..:
Code:
private void copy_to_sd() throws IOException {
        File inputFile = new File("/data/data/[paketname]/databases/myDB");
        File outputFile = new File("/sdcard/myDB");  
        
        FileReader in = new FileReader(inputFile);
        FileWriter out = new FileWriter(outputFile);
        
        int c;

        while ((c = in.read()) != -1)
          out.write(c);

        in.close();
        out.close();
}
wobei myDB die zu kopierende Daten Bank ist.
Natürlich muss man auch rechte für den Zugriff auf der SD haben..!

-MFG BFK-


Hallo,

der Code hat soweit bei mir funktioniert, jedoch bekomme ich eine Fehlermeldung, dass das file entweder encrypted oder corrupted ist, wenn ich es mit dem FireFox Plugin SQLiteManager öffne.

Hattest du schonmal ein ähnliches Problem?

Grüße Spookykid
 
Hallo Spookykid,
Ja ich hatte das gleiche Problem. Habe es auch mit dem Sqlite Manager öffnen wollen und es ging nicht, kam genau die gleich Fehlermeldung.
Erst dann habe ich andere Methoden ausprobiert und die folgende scheint die beste zu sein..:

Code:
private void copy_to_sd(){       
                
        File inputFile = new File("/data/data/[packetname]/databases/Track-DB");
        File outputFile = new File("/sdcard/myDB");
        
        FileReader in = null;
        FileWriter out = null;
        try {
            in = new FileReader(inputFile);
        } catch (FileNotFoundException e) {
            // Es gibt keine gespeicherte DB
        }
        if(in != null)
        {            
            try {
                out = new FileWriter(outputFile);
            } catch (IOException e) {
                // Problem beim speichern der DB auf der Karte
            }  
        
        }
        
        if(in != null && out != null)
        {
            try {
                  copyFile(inputFile, outputFile);
                  
               } catch (IOException e) {
                 // Problem beim kopieren der DB
                 Toast.makeText(getApplicationContext(), "Beim kopieren der DB ist ein Fehler aufgetreten..!", Toast.LENGTH_LONG).show();  
               }
               
            Toast.makeText(getApplicationContext(), "Die DB wurde erfolgreich kopiert..!", Toast.LENGTH_LONG).show();  
        }
        
      }

Wie es aussieht ist es besser "copyFile" zu benutzen, anstatt es selber zu machen..!

Hoffe ich konnte helfen..!

-MFG BFK-
 
Danke für deine Antwort. Ich werde es bei Gelegenheit einsetzen ;-)
 
Code:
    void copy(String from, String to)throws Exception{
        FileChannel in = new FileInputStream(from).getChannel();
        FileChannel out = new FileOutputStream(to).getChannel();
        in.transferTo(0, in.size(), out);
        in.close();
        out.close();
    }

Ist auch zigmal schneller als die "Zeichen für Zeichen" Variante. ;)
 

Ähnliche Themen

R
Antworten
6
Aufrufe
997
swa00
swa00
M
Antworten
4
Aufrufe
1.169
swa00
swa00
B
Antworten
4
Aufrufe
472
bb321
B
Zurück
Oben Unten