Daten von MySQL Datenbank in einer AndroidApp nutzen

  • Antworten:15
Hans Hubert
  • Forum-Beiträge: 4

05.05.2012, 15:28:25 via Website

Hallo,

wir brauchen eine möglichkeit Daten aus einer MySQL Datenbank die auf einem Webserver liegt möglichst elegant in einer AndroidApp zu nutzen.

Anforderungskriterien:
- Die Daten sollen Offline zur Verfügung stehen
- Read-Only
- Komprimierung (wobei das nicht umbedingt ein "MUST HAVE" ist)
- Sicherheit (evt SSL oder ähnliches - es handelt sich aber nicht um sensible Daten sondern Daten die sowieso für alle zur Verfügung stehen)
- Verfügbarkeit (MySQL Server ist allerdings immer verfügbar ;) )

Eigene Ansätze:
- Die Daten direkt aus der MySQL Datenbank auslesen (allerdings finde ich dazu nicht wirklich viel im Netz, ist das evt mit Android gar nicht ohne ext. Libs möglich?)
- Datenbank auf dem Server (per PHP-Script oder ähnliches) in SQLite konvertieren und dann per HTTP auf das Endgerät übertragen .(Das sollte ja auf jedenfall gehen)
- Die Daten via SOAP übertragen
- Die Daten via JSON übertragen

Wie würdet ihr Vorgehen? Mit einem der Oben genannten Möglichkeiten oder ganz anders?

Gruß

— geändert am 05.05.2012, 15:29:15

Antworten
Markus B.
  • Forum-Beiträge: 636

05.05.2012, 22:52:46 via App

Hi, ich würde die Daten aus der DB in ein json-Format bringen und diese dann offline: n einer sqlite speichern. Das halte ich für eine sauber Lösung.

Gruß,
Markus

Gelöschter Account

Antworten
Hans Hubert
  • Forum-Beiträge: 4

06.05.2012, 16:04:41 via Website

Hi,

danke für die Antwort!

Gibt es auch eine Möglichkeit direkt auf die MySql Datenbank zuzugreifen?
Das würde natürlich zusätzliche Wartung sparen!

Gruß

Antworten
Markus B.
  • Forum-Beiträge: 636

06.05.2012, 16:28:13 via App

Hi, du brauchst einen jdbc-Treiber, welcher unter Android kompiliert werden kann. Bzw nur Klassen aus dem Android SDK nutzt. Das geht mit irgendeinem MySql 5 Treiber, meine ich. Allerdings musst du dann für jeden query eine Verbindung zu DB aufbauen oder du hälst die Verbindung über die ganze Zeit. Das macht in Sachen mobil device nicht viel Sinn.
Besser ist also ein http-Request und dieser funktioniert oder eben nicht.

Gruß,
Markus

Antworten
Hans Hubert
  • Forum-Beiträge: 4

06.05.2012, 17:22:52 via Website

Und wenn ich dann eine View mit allen nötigen Daten dafür erstelle?
http://de.wikipedia.org/wiki/Sicht_(Datenbank)

Dadurch wird die Abfrage auf dem Server berechnet und auch im Endeffekt nur eine Abfrage ausgeführt oder sehe ich das falsch?


Gruß

— geändert am 06.05.2012, 17:26:38

Antworten
Felix
  • Forum-Beiträge: 259

06.05.2012, 23:36:55 via Website

Tach!

Hans Hubert
Und wenn ich dann eine View mit allen nötigen Daten dafür erstelle?
http://de.wikipedia.org/wiki/Sicht_(Datenbank)

Dadurch wird die Abfrage auf dem Server berechnet und auch im Endeffekt nur eine Abfrage ausgeführt oder sehe ich das falsch?

Ob View oder Abfrage, das bleibt sich ziemlich gleich. Du musst für beides deinen MySQL-Server so öffnen, dass er über Internet erreichbar ist. Das ist nicht die beste Idee, weil ihn das für alle eingerichteten Kennungen angreifbar macht. Das kommt noch zu der Aufgabe, den MySQL-Treiber selbst aufzutreiben, hinzu. Besser ist, etwas mit beispielsweise PHP zu erstellen. Daran muss man erst einmal vorbeikommen.

Du willst die Daten auch offline zur Verfügung haben, also musst du sie irgendwie auf dem Gerät cachen. Da kannst du gleich die JSON-kodiert vom Server-Script gelieferten Daten komplett in eine Datei schreiben.


Felix.

Antworten
Hans Hubert
  • Forum-Beiträge: 4

07.05.2012, 09:38:45 via Website

Okay, ich verstehe.

Und was spricht dagegen die Datenbank schon voher in SQLite umzuwandeln (via Bashscript oder ähnliches) und diese dann auf dem Client Device nur komplett einzulesen (via HTTP oder ähnliches übertragen)?

Antworten
Felix
  • Forum-Beiträge: 259

07.05.2012, 10:29:21 via Website

Tach!

Nichts spricht dagegen. Es kann sich nur ein wenig knifflig gestalten, die Datenbank an die richtige Stelle zu bekommen. Aber wie man Datenbanken unter Android kopiert ist irgendwo im Netz beschrieben.


Felix.

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

07.05.2012, 11:57:33 via Website

Knifflig? Inwiefern?
Einfach auf die SD speichern und dort benutzen :)

Antworten
Felix
  • Forum-Beiträge: 259

07.05.2012, 23:27:08 via Website

Tach!

and dev
Knifflig? Inwiefern?

Nach meinem Kenntnisstand ist es nur vorgesehen, SQLite-Datenbanken selbst zu erzeugen (unter /data/data/{namespace}/databases/). Das Hinkopieren in dieses Verzeichnis ist nicht vorgesehen und einfach so geht es wohl auch nicht. Ich hatte das mal benötigt und eine Lösung war, die Datenbank erst pro forma anlegen zu lassen und dann konnte man sie überschreiben.

Einfach auf die SD speichern und dort benutzen :)

Dort wird sie aber nicht automatisch weggeräumt, wenn die Anwendung gelöscht wird.


Felix.

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

08.05.2012, 09:46:35 via Website

Dort wird sie aber nicht automatisch weggeräumt, wenn die Anwendung gelöscht wird.

Doch, wird sie, ist nur eine Frage des gewählten Ortes.
Wenn die App ihr Zeugs unter /android/data/<pachage-name>/files/ speichert, dann werden die Daten bei der Deinstallation automatisch vom System entsorgt.

Antworten
Mario B.
  • Forum-Beiträge: 27

07.08.2012, 00:38:51 via Website

Ich habe mich gerade mal mit dem Thema beschäftigt und bin auf folgende Lösung gekommen:



  • Die Datensätze werden in der MySQL DB alle mit einem Timestamp der letzten Änderung versehen.
  • Löschungen werden in der MySQL DB nicht physisch, sondern durch ein Löschkennzeichen vorgenommen.
  • Ist das Phone Online, sucht der Updater nach dem höchsten Timestamp in der lokalen SQLite DB und sendet diesen an den Server
  • Der Server schickt alle Datensätze in JSON-Format mit Timestamp größer als dem gesendeten
  • Auf Phone werden die gesendeten Datensätze in die SQLite Datenbank gemerged
  • Die Client-App greift ausschließlich auf die SQLite DB zu

Vorteile:
  • Minimierung der Datenübertragung auf die tatsächlichen Änderungen seit letzter Online Verbindung
  • Einfache Übertragung von ADD, UPDATE und DELETE
  • Unabhängigkeit der App von der Datenherkunft (der Updater könnte sie auch aus der Cloud holen)
  • Updater und Datenkonverter können generisch geschrieben werden unter Auswertung der Schema-Informationen

— geändert am 07.08.2012, 01:12:53

Antworten
C. P.
  • Forum-Beiträge: 1

27.08.2012, 20:52:55 via Website

Guten Abend Community,

da ich ungern für meine ich denke doch einfache Frage ein neues Thema auf machen möchte schiebe ich es mal hier rein da ich denke das es hier am besten rein passt.

Ich denke das es ja rein "theoretisch" möglich ist das PHP-File auf dem Server ausfindig zu machen, über mit schneiden von Datenverkehr etc. pp. was ist wenn nun über das PHP-File sensible Daten aus einer Externen Datenbank geholt werden wie zb.: Name, Vorname oder sogar E-Mail Adresse für ein Verzeichnis die über eine App genutzt wird. Wie kann man hier Sicherheit bieten hinsichtlich Datenschutzes oder gibt es dafür eine andere Möglichkeit dass diese sensiblen Daten nicht öffentlich eingesehen werden "könnten" wenn man doch das PHP-File finden könnte?

Mir würde nur einfallen die Daten als JSON-String auszugeben aber verschlüsselt (zb.: selbst überlegte Routine) und diese in der App wieder auflösen, bzw. über das PHP-File Browser gar nicht die Seite anzeigen zu lassen aber bei der Browser vielfalt sehr schwer.

Würde mich über Ideen freuen :)

Mit freundlichen Grüßen

— geändert am 27.08.2012, 20:57:13

Antworten
Sebastian Eßling
  • Forum-Beiträge: 12

20.09.2012, 13:51:33 via Website

Hey ich habe da auch einmal eine Frage. Bin ganz neu was das entwickeln von Apps angeht und habe ein Php-Skript, welches meine Daten in JSON-Format ausliest. Aber mein httprequest funktioniert einfach nicht :-(

try{
HttpClient httpclient = new DefaultHttpClient();
HttpGet request = new HttpGet();
request.setURI(new URI("meineUrl"));
response = httpclient.execute(request);

}
catch(Exception ex){
Log.e("log_tag", "Error in http connection");
}

Die URL ist richtig. Also wenn ich Sie eingebe bekomme ich die Daten im Browser angezeigt. Das response wird oben als HttpResponse erstellt. Beim Debuggen bekomme ich aber in der Zeile: response = httpclient.execute(request); immer eine Exception??? Kann mir da vllt. wer helfen. Danke! Lg


Ah forgot to set Thread Permission!

— geändert am 20.09.2012, 14:30:51

Antworten