MySQL Connector

  • Antworten:13
  • Bentwortet
Thomas L.
  • Forum-Beiträge: 58

02.08.2011, 11:31:56 via Website

Hallo,
ersteinmal: "Ja ich weiß dass es nicht die feine englische Art ist":smug:
Ich habe schon viel dazu gefunden, aber nichts was funktioniert.

Ich möchte einen MySQL Connector für Android schreiben, um mir einen Datensatz aus meiner SQL Datenbank zu holen.
Ich möchte keinen Webservice schreiben, sondern einen einfachen JDBC Connector zur MySQL Datenbank aufbauen.

Unter Java ist das gar kein Problem. Doch wenn ich die selbe Testklasse vom Desktop PC auf das Androidgerät (natürlich in die App eingebaut) ziehe. Dann funktioniert das nicht.

Ideen?

Edit: Achso, vllt noch der StackTrace
1ERROR: FATAL EXCEPTION: main
2ERROR: java.lang.VerifyError: com.mysql.jdbc.MysqlIO
3ERROR: at com.mysql.jdbc.Connection.createNewIO(Connection.java:2744)
4ERROR: at com.mysql.jdbc.Connection.<init>(Connection.java:1553)
5ERROR: at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
6ERROR: at java.sql.DriverManager.getConnection(DriverManager.java:180)
7ERROR: at java.sql.DriverManager.getConnection(DriverManager.java:214)
8ERROR: at de.test.db.TestDB.getTable(TestDB.java:15)
9ERROR: at de.test.db.TestDBAndroidActivity.onCreate(TestDBAndroidActivity.java:18)
10ERROR: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11ERROR: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
12ERROR: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
13ERROR: at android.app.ActivityThread.access$1500(ActivityThread.java:123)
14ERROR: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
15ERROR: at android.os.Handler.dispatchMessage(Handler.java:99)
16ERROR: at android.os.Looper.loop(Looper.java:123)
17ERROR: at android.app.ActivityThread.main(ActivityThread.java:3839)
18ERROR: at java.lang.reflect.Method.invokeNative(Native Method)
19ERROR: at java.lang.reflect.Method.invoke(Method.java:507)
20ERROR: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
21ERROR: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
22ERROR: at dalvik.system.NativeStart.main(Native Method)

— geändert am 02.08.2011, 12:17:54

Antworten
Gelöschter Account
  • Forum-Beiträge: 725

02.08.2011, 12:46:03 via App

ich kann dir direkt nicht weiter helfen.. aber es lohnt sich ein buch über android zu kaufen, dort wird alles über die datenbank geschrieben.. wie du sie anlegst, wie du daten beziehen kannst usw.

Antworten
Florian B.
  • Forum-Beiträge: 284

02.08.2011, 12:52:36 via Website

In der Regel ist hier das Problem, das Android nicht das gesamte JDK abbildet und in der externen Library die du vermutlich für den Connector verwendest Java Klassen referenziert werden, die es in Android nicht gibt.

Standen im Log Cat über dem Stacktrace noch andere Fehler?

— geändert am 02.08.2011, 12:53:47

Antworten
Thomas L.
  • Forum-Beiträge: 58

02.08.2011, 13:03:14 via Website

@davide:
Ich will keine SQLite Datenbank anlegen, das habe ich schon gemacht und die steht einwandfrei.
Ich will nur meine MySQL Datenbank die schon ohnehin aufm Server liegt abfragen.
Das muss keine saubere Lösung über JSON sein, da die App nicht auf den Market soll. Ist einfach eine proprietäre Lösung.
Die Empfehlung sich woanders Hilfe zu holen ist auch nicht unbedingt die Beste Antwort in einem Forum :wink: (Nur mal so als Hinweis)

@Florian:
Ja genau das ist auch meine Vermutung. Darum hatte ich hier nachgefragt. Ich glaube mitlerweile auch dass es an der Bibliothek liegt die ich eingebunden habe. Der StackTrace ist von einer älteren Bibliothek, die neuere schafft es gar nicht bis durchs dx-tool von der ADB.
Jetzt probier ichs grade mit einer dritten Version. Die Stacktraces sagen immer was anderes.

Hat das bisher hier noch kein anderer gemacht???
Gibt es keine Möglichkeit JDBC in Android zu nutzen?

Antworten
Florian B.
  • Forum-Beiträge: 284

02.08.2011, 13:41:46 via Website

Schau dir mal die StackOverflow Frage an. Ich glaube dein Unterfangen ist aussichtslos.

An deiner Stelle würde ich eher mit einem Webservice arbeiten.

Antworten
Steve Saev
  • Forum-Beiträge: 8

02.08.2011, 13:53:29 via Website

Hallo Thomas,

VerifyError ist immer ein sehr problematischer "Error" denn dann stimmt etwas mit dem Bytecode nicht. Folgende Info gibt es dazu:

"Thrown when the "verifier" detects that a class file, though well formed, contains some sort of internal inconsistency or security problem"

Das sagt natürlich alles und nichts aus. Aber ich habe gelesen, dass es zu dem Fehler kommen kann wenn z.B. die Klasse schlichtweg zu groß ist. Ich bin mir recht sicher, dass Android bzw. die Dalvik-VM da recht restriktiv ist.

Ich fürchte mit dem Mysql-JDBC Treiber wirst du also nicht weit kommen.

Grüße,

Steve

Antworten
Thomas L.
  • Forum-Beiträge: 58

02.08.2011, 14:11:17 via Website

Okay danke für die Antworten.

Trotz aller pessimistischer Aussichten (auch ganz meinerseits) :wink: => Es funktioniert.

Es lag schlichweg einfach an den Bibliotheken.
Unter Java gab es keine Probleme, aber beim Übersetzen nach Android wollten sie dann nciht so ganz.
Für alle Nachfolgenden die über diesen Thread stolpern:

mysql-connector-java-5.0.7.jar - funktioniert nicht
mysql-connector-java-5.1.17-bin.jar - funktioniert nicht

mysql-connector-java-5.1.3-rc-bin.jar heißt der Retter in der Not.

P.S. Bitte zu Hause nicht nachmachen :) ... die Lösung ist wirklich nicht die Beste

Antworten
Leif Böhme
  • Forum-Beiträge: 3

10.11.2011, 13:59:25 via Website

Hi,

funktioniert die Lösung mit der mySQL Datenbank inzwischen? Warum ist das Deiner Meinung nach keine saubere Lösung? Wo ist das Problem / Risiko? Finde den Weg über den PHP Webservice nämlich alles andere als elegant!

Kannst Du mir evtl. ein Beispiel Code mit dem JDBC Connector zeigen der mit mySQL läuft? Nur damit ich einmal das gesamte "Kunstwerk" nachvollziehen kann...

Sind wir eigenltich die einzigen die mySQL direkt ansprechen wollen? Kaum vorstellbar das alle anderen das über eine Art Middleware zaubern.

Gruß Leif

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

10.11.2011, 14:07:21 via Website

das schon seine gründe, warum man methoden entwickelt hat, um nicht direkt eine db im web anzusprechen.

für die sicherheit ist das wohl alles andere als gut, würd ich mal sagen.

swordiApps Blog - Website

Antworten
Leif Böhme
  • Forum-Beiträge: 3

10.11.2011, 14:15:37 via Website

Sorry, ich sehe da sicherheitstechnisch keinen Unterschied zwischen beiden Varianten. Oder meinst Du die Sicherheitslücken in mySQL wenn dieser direkt über sein Port im Internet erreichbar ist? Weil sicher ist das sicherlich nicht wenn man das über einen webservices abwickelt der keinerlei Verschlüsselung oder sonstige Sicherheit bietet.

Kannst Du Deine Bedenken vielleicht näher ausführen?

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

10.11.2011, 14:26:46 via Website

naja wenn dein webservice ohne jegliche sicherheit ausgestattet ist, dann ist das schon klar. aber es gibt genügend sicherheitstechnische möglichkeiten, das ganze abzusichern.

denk mal nach. warum greift "niemand" direkt auf eine mysql db übers netz zu? sicher nicht, weil alle gerne mehraufwand durch den webservice haben :D

swordiApps Blog - Website

Antworten
Leif Böhme
  • Forum-Beiträge: 3

10.11.2011, 14:55:50 via Website

Das ist zwar eine Antwort, aber keine Erklärung. Was macht den direkten Zugriff jetzt so unsicher? Lassen sich die Sicherheitsmechanismen von mySQL so leicht aushebeln? Was stimmt mit der verschlüsselten Übertragung nicht? Wozu gibt es die verschlüsselte Übertragung wenn man sie dann doch nicht einsetzen kann?

Außerdem finde ich nicht den Mehraufwand an Programmierarbeit bedenklich (den Teil der Arbeit finde ich sehr überschaubar), sondern eher den Overhead den ich dadurch bei der Benutzung der Datenbank erzeuge. Weil schneller wird es durch eine dazwischen geschaltete Middleware sicherlich nicht...

Eine Lösung die viele Benutzen muss im übrigen nicht zwingend die Beste sein. Könnte auch sein, dass es einfach nur alle nach Schema F machen weil keiner Lust hat sich selbst Gedanken zu machen. Also gibt man bei google "android mysql tut" ein und erhält das Standard Tutorial mit dem webservice das jeder benutzt.... da es funktioniert macht man auch gleich weiter und bleibt bei dem Konzept.

Es wird im Office bereich auch sehr viel häufiger Windows als Linux eingesetzt. Heißt aber noch lange nicht, dass Windows das bessere OS ist. Das heißt nur das die meisten es installiert haben. Nicht mehr und nicht weniger.

Also zurück zu dem eigentlichen Problem: Spricht abgesehen von Sicherheitsproblemen seitens mySQL etwas gegen die Lösung über JDBC?

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

10.11.2011, 17:08:23 via Website

da hast natürlich recht, dass nicht alles was alle benutzen automatisch besser ist. klar, aber wenn google, amazon und microsoft drauf bauen, dann kann man schonmal davon ausgehen, dass es gut ist.

ein gutes argument wäre da die skalierbarkeit. was wenn du viele user bekommst, deine einzelne "langsame" mysql db wird da recht schnell überfordert werden.

Oder session handling wird beim direkten zugriff auch schwer realisierbar sein.

nur ein paar gedanken von mir halt :)

swordiApps Blog - Website

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

10.11.2011, 18:24:15 via Website

Ein Argument ist bspw. das Du keinerlei Möglichkeit hast, die querys die Deine Datenbank erreichen auf das zu beschränken, was Du exponieren willst. Du kannst Deine Querys nicht mehr escapen .. Möglichen Angreifern mit "bösen" Absichten wird so Tür und Tor geöffnet ... Ich denke da nur an Querys, die Deine Datenbank derart beschäftigen, dass sie unresponsive wird .. was in der Realität meist nicht besonders schwierig ist ..

lg Voss

Antworten