Einbindung von JDBC in eine Android App

  • 12 Antworten
  • Letztes Antwortdatum
K

klichtmetzer

Neues Mitglied
0
Hallo Forum,
ich heiße Lukas, bin 24 , Student der Wirtschaftsinformatik und brauche eure Hilfe.
Meine Projektgruppe und ich sind gerade dabei eine App zu schreiben welche einen Speiseplan darstellen soll. Der Plan liegt in Form einer MySQL Datenbank auf einem Server, der über das Internet erreichbar ist. Soweit sogut. Per Eclipse können wir auch super auf die Datenbank zugreifen. Sobald wir dies aber in der App versuchen hagelt es Exceptions bei der initialisierung des Datenbanktreibers. JDBC ist im Projekt als externe .JAR Bibliothek angebunden. Muss diese speziell mit exportiert werden? Ich bin langsam am Verzeweifeln.
Habt ihr eine Idee? Vielen Dank im Vorraus!
Gruss Lukas

Dies ist der Zugriff auf die DB:

public class Sql {
//public static void main (String Args[]){
//zugriff();
//}


public static String zugriff () {
// System.out.println("uff");
String s ="eins";
String t ="tschüss";
String v = "klappt";
try {
Class.forName( "com.mysql.jdbc.Driver" );
}

catch ( ClassNotFoundException e ) {
return "Fehler bei ODBC-JDBC-Bridge";

}

Connection conn = null;
Statement stmt;
ResultSet rSet;

try {
String url = "jdbc:mysql://IPADRESSE/Gruppe";
conn = DriverManager.getConnection( url, "USername", "Passwort" );
stmt = conn.createStatement();
String sqlQuery = "SELECT * from speisen";
rSet = stmt.executeQuery( sqlQuery );
while ( rSet.next() ){
System.out.println ( rSet.getString(1)+"\t "+rSet.getString(2)+"\t "+rSet.getString(3));
}
stmt.close();
return rSet.getString(2);
}

catch ( SQLException e ) {
System.out.println( "Fehler bei Tabellenabfrage " + e );
return t;
}

finally {
try {
if ( conn != null )
conn.close();
}
catch ( SQLException e ) {}
}
}
}
 
Was spricht dagegen eine kleine API für den DB Zugriff am Server zu machen??

Wäre der übliche weg und wahrscheinlich sicherer und einfacher.

Gesendet von meinem Nexus 5 mit der Android-Hilfe.de App
 
Dafür spricht eigentlich alles und nichts, aber auch gar nichts spricht für den direkten Zugriff auf die Datenbank.
Jeder der die App hat, kann damit direkt auf die Datenbank zugreifen, wenn der genutze user evtl (aus Versehen) auch noch schreibrechte hat könnte er dann sogar die Datennank manipulieren.

Aber ansonsten wäre die Frage, wo genau welche Exceptions fliegen.
 
Der User wird später nur lese-Rechte haben. Die Exception fliegt beim Einbinden des Treibers für JDBC. Also eine
"catch ( ClassNotFoundException e ) {
return "Fehler bei ODBC-JDBC-Bridge";" Exception. Ich habe das Gefühl das diese jdbc.jar nicht mit an die App übergeben wird. Es geht hierbei erstmal darum ob das was wir vorhaben generell möglich ist, oder ob wir uns im Vorfeld verplant haben. Unsere 3Mann Gruppe hat leider kaum bis keine Erfahrung bei Android Programmierung.
 
Man macht trotzdem nie eine direkte Verbindung zur Datenbank. Immer über einen Webservice!
 
Es mag sein, dass man dies so nicht macht, aber bei uns ist es eine Vorgabe vom Prof, dass wir es so machen. Ich habe mitlerweile eine lauffähige Version. Allerdings nur mit Android 2.3 und einer älterenjdbc Version. Weiss jemand ob es auch aktuellere jdbc Versionen gibt die mit Android 4.* kompatibel sind gibt? Vielen Dank. Wie gesagt es ist momentan eine Vorgabe es so zu machen.
 
Was klappt denn nicht?
Wenn ich kurz auf SO schaue, im Gegensatz zu <4 muss man ab 4 den JDBC-Code in einen AsyncTask packen (da der behandelt wird wie bzw. eigtl nichts anderes ist als Netzwerkoperationen)
 
Doofer Prof. Der sollte es eigentlich besser wissen.
 
vermutlich ist das ein JDBC 3.xxx Treiber den Du gefunden hast.
War wohl der einzige der mit Android funktionierte. Hat nichts mit
Android 2.3 oder 4.x zu tun.

Offiziell gibt es kein funktionsfähigen JDBC Treiber für MySQL der
für Android geeignet wäre !

Wenn der Prof. aber genau diese Forderung stellt, hat das evtl. seinen Sinn :tongue:

Vll. will er erzwingen, dass ihr den bestehenden JDBC Code so anpasst,
dass der Treiber lauffähig ist !

Die "JDBC.jar" musst Du einbinden, ClassNotFoundException kommt aber
dennoch bei aktuellen 5.xxx Treibern. Der Dalvanik-VM fehlt einfach die
ein oder andere Klasse, welche der Treiber verlangt.

Entweder ein REST-Interface bereitstellen oder Treiber selber coden, was
auch nicht schwer ist.
 
Oder den Prof mal dagegen reden, warum man dies nicht macht, welche Sicherheitsrisiken dies birgt, weshalb es auch keinen funktionierenden JDBC-Treiber gibt und zeigen, dass man sich damit beschäftigt hat.
 
Hallo, danke nochmal für die vielen Antworten.
Wir sind jetzt soweit, dass wir android-intern eine Datenbank mit SQlite Datenbank laufen haben, welche wir auch füllen können. Unsere Idee ist es jetzt eine .CSV datei per Internet oder Netzwerk innerhalb unserer FH freizugeben, auf welche die App dann zugreifen soll. Wie immer funktioniert das in reinem java super. Sobald ich es in unseren Android Workspace packe klappt dieses wieder nicht, obwohl ich nur standard Java Bibliotheken verwende.
Hier das Codebeispiel:
Code:
  public static String zugriff() throws IOException
  {
  
    try{
    FileReader fr = new FileReader("//192.168.2.132/freig$/tipps.csv");
    BufferedReader br = new BufferedReader(fr);
    int i = 0;
    int eintraegeges=0;
    String[][] u =new String[77][2];
    String[] p =new String[2];
    boolean z = true;
   while (z==true){
       String v = br.readLine();
       if (v == null){
           z = false;
       }
       else{
           p=v.split(";");
           u[i][0]=p[0];
           u[i][1]=p[1];
           i++;
           eintraegeges++;
           
    }
    i=0;
       while (i<eintraegeges){
           System.out.println(u[i][0]+"\t"+u[i][1]);
           i++;
           }
       }
   br.close();
return u[0][0];
    }
    
    catch ( IOException e ) {
          return "Fehler beim Lesen der Datei!";

        }
    }
Er knallt mir wieder in die Exception...
Laut meiner manifest.xml sollte die App Netzwerkzugriff haben.

Vielen Dank schon mal.
Gruß Lukas
 
Zuletzt bearbeitet von einem Moderator:
1. Es gibt Code Tags!
2. Glaube nicht, das der FileReader mit SMB/Windows-Shares auf Android funktioniert. Stellt das CSV über HTTP bereit.
3. Netzwerkzugriff muss in Android in einen Thread ausgelagert sein.
4. Die genaue Exception zu posten ist sehr hilfreich, geht nicht ist keine Fehlermeldung
 
Hallo Leute,
eine Frage habe ich noch. Ist es möglich eine Datei (.csv oder .txt) aus dem Workspace zum Beispiel aus dem Res Verzeichnis bei der Installation der APK auf der SDKarte ablegen zu lassen? Wir wollen eine Datei auslesen und diese soll in der .apk mit übergeben werden.
Ich habe leider bisher keine direkten Hinweise gefunden.
Vielen Dank
Lukas
 

Ähnliche Themen

M
Antworten
21
Aufrufe
1.310
swa00
swa00
Mr-Fisch
Antworten
5
Aufrufe
942
migi01
migi01
Mr-Fisch
Antworten
8
Aufrufe
992
Mr-Fisch
Mr-Fisch
M
Antworten
9
Aufrufe
775
mkuz24
M
A
Antworten
5
Aufrufe
680
swa00
swa00
Zurück
Oben Unten