Problem mit der Verbindung zur DB

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von rotestelefon, 21.05.2012.

  1. rotestelefon, 21.05.2012 #1
    rotestelefon

    rotestelefon Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    21.05.2012
    Hallo,
    kann mir jemand bei meiner Entwicklung einer App (in NetBeans) helfen?! Mein Problem liegt bei der Verbindung zu einer Datenbank, die auf einem Webserver liegt.

    Ich habe folgenden Code:

    Code:
    import android.os.Bundle;
    import com.mysql.jdbc.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.util.Enumeration;
    import java.util.Properties;
    
    public class Activity1 {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            for (Enumeration<java.sql.Driver> e = DriverManager.getDrivers(); e.hasMoreElements();) {
                System.out.println(e.nextElement().getClass().getName());
            }
    
            Connection connection = null;
            String driverName = "com.mysql.jdbc.Driver"; 
            try {
                Class.forName(driverName).newInstance();;
            } catch (ClassNotFoundException e) {
                System.out.println("Where is your MySQL JDBC Driver?");
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            }
    
            String serverName = "";
            String mydatabase = "";
            String username = "";
            String password = "";
    
            Properties props = new Properties();
            props.setProperty("user", username);
            props.setProperty("password", password);
            props.setProperty("autoReconnect", "true");
            props.setProperty("characterEncoding", "UTF-8");
    
            String url = "jdbc:mysql://" + serverName + "/" + mydatabase; 
            try {
                connection = (Connection) DriverManager.getConnection(url, props);
                System.out.println("Connected\n" + connection);
            } catch (java.sql.SQLException e) {
                System.out.println("Connection Failed");
                e.printStackTrace();
            }
    
            try {
                connection.setAutoCommit(false);
            } catch (java.sql.SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
           
            String sql = "select * from koordinate";
            java.sql.Statement stm;
            try {
                stm = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
                ResultSet rs = stm.executeQuery(sql);
            } catch (java.sql.SQLException e) {
                e.printStackTrace();
            }
                    
        }
    }
    Im Manifest habe ich auch
    Code:
    <uses-permission android:name="android.permission.INTERNET" />
    Und "mysql-connector-java-5.1.13-bin.jar" ist bei Libraries eingebunden.

    Die App läuft ansonsten fehlerlos, aber ich bekomme immer nur ein "Connection Failed". Kann mir jemand helfen????
     
  2. DieGoldeneMitte, 21.05.2012 #2
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Stimmt der Servername, der Datenbankname? (in deinem code ist beides leer)

    Ist der Server im selben/richtigen Netzwerk? (Konfiguration vom mysql server?)

    Ich bin jetzt nicht so fit, was mysql betrifft, aber kommt der Treiber ohne JNI aus? (der müsste nämlich extra nach Android portiert werden).

    Zeig mal den ganzen Stacktrace, vielleicht ergeben sich daraus weitere hinweise.
     
  3. rotestelefon, 22.05.2012 #3
    rotestelefon

    rotestelefon Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    21.05.2012
    Also nachdem ich noch ganz neu in der Programmierung bin, weiß ich das mit dem JNI auch nicht.

    Der Servername und Datenbankname stimmt ganz sicher, ich habe ihn nur beim Kopieren raus genommen.

    Ich bin mir auch relativ sicher, dass mit dem Server alles passt.

    Ist das der Stacktrace, den du sehen wolltest? Ich habe mich damit noch nie beschäftigt, deswegen musste ich jetzt erst einmal suchen was das genau ist.

    Code:
    10:47:11.396	267	#267	ERROR	Launcher	MTP-LAUNCHER: media scanning not yet finished. 
    10:47:32.426	1237	#1237	ERROR	AndroidRuntime	/system/csc/feature.xml ==> cannot open file
    10:47:35.956	1254	#1254	ERROR	AndroidRuntime	/system/csc/feature.xml ==> cannot open file
    10:47:41.356	172	#172	ERROR	PowerManagerService	CurLock p:3 mPS:1
    10:47:44.996	1262	com.map.app	ERROR	dalvikvm	Could not find class 'javax.naming.StringRefAddr', referenced from method com.mysql.jdbc.ConnectionPropertiesImpl$ConnectionProperty.storeTo
    10:47:50.246	294	#294	ERROR	CheckinTask	Checkin failed: [url]https://android.clients.google.com/checkin[/url] (request #0)
    10:47:50.246	294	#294	ERROR	CheckinTask	org.apache.http.conn.ConnectTimeoutException: Connect to /209.85.148.139:443 timed out
    10:47:50.246	294	#294	ERROR	CheckinTask	    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:121)
    10:47:50.246	294	#294	ERROR	CheckinTask	    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:153)
    10:47:50.246	294	#294	ERROR	CheckinTask	    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
    10:47:50.246	294	#294	ERROR	CheckinTask	    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
    10:47:50.246	294	#294	ERROR	CheckinTask	    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:348)
    10:47:50.246	294	#294	ERROR	CheckinTask	    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
    10:47:50.246	294	#294	ERROR	CheckinTask	    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
    10:47:50.246	294	#294	ERROR	CheckinTask	    at android.net.http.AndroidHttpClient.execute(AndroidHttpClient.java:262)
    10:47:50.246	294	#294	ERROR	CheckinTask	    at com.google.android.common.http.GoogleHttpClient.executeWithoutRewriting(GoogleHttpClient.java:203)
    10:47:50.246	294	#294	ERROR	CheckinTask	    at com.google.android.common.http.GoogleHttpClient.execute(GoogleHttpClient.java:245)
    10:47:50.246	294	#294	ERROR	CheckinTask	    at com.google.android.common.http.GoogleHttpClient.execute(GoogleHttpClient.java:313)
    10:47:50.246	294	#294	ERROR	CheckinTask	    at com.google.android.gsf.checkin.CheckinTask.sendRequest(CheckinTask.java:243)
    10:47:50.246	294	#294	ERROR	CheckinTask	    at com.google.android.gsf.checkin.CheckinTask.doInBackground(CheckinTask.java:148)
    10:47:50.246	294	#294	ERROR	CheckinTask	    at com.google.android.gsf.checkin.CheckinService$1.doInBackground(CheckinService.java:221)
    10:47:50.246	294	#294	ERROR	CheckinTask	    at com.google.android.gsf.checkin.CheckinService$1.doInBackground(CheckinService.java:228)
    10:47:50.246	294	#294	ERROR	CheckinTask	    at android.os.AsyncTask$2.call(AsyncTask.java:185)
    10:47:50.246	294	#294	ERROR	CheckinTask	    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
    10:47:50.246	294	#294	ERROR	CheckinTask	    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
    10:47:50.246	294	#294	ERROR	CheckinTask	    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
    10:47:50.246	294	#294	ERROR	CheckinTask	    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
    10:47:50.246	294	#294	ERROR	CheckinTask	    at java.lang.Thread.run(Thread.java:1096)
     
  4. DieGoldeneMitte, 22.05.2012 #4
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Nicht ganz, das mit dem CheckinTask ist von einem völlig anderen Prozess.

    Aber die Zeile davor ist schon interessanter, die besagt, dass das MySQL JDBC Modul nicht geladen werden konnte, weil es die Klasse javax.naming.StringRefAddr nicht finden kann. Dummerweise ist javax.naming nicht bei Android dabei, was bedeutet, dass der JDBC Treiber nicht zu Android kompatibel ist.

    Du musst also entweder einen anderen JDBC Treiber finden oder ein jar-File finden, das javax.naming.* für Android bereitstellt.
     
  5. Tom299, 23.05.2012 #5
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    Für sowas benutzt man einen Webservice und macht keinen direkten Zugriff von der App auf die DB
     
  6. rotestelefon, 23.05.2012 #6
    rotestelefon

    rotestelefon Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    21.05.2012
    Wie bekomme ich denn sonst diesen Stacktrace?


    Nach stundenlangem Probieren und Suchen bin ich leider immer noch nicht weiter gekommen. Mit anderen JDBC Treibern funktioniert es auch nicht. Dann habe ich es mit jndi.jar versucht, aber ich bin auch nicht weiter gekommen. Hast du noch weitere Tips für mich?
     
  7. swordi, 23.05.2012 #7
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    wie wärs wenn du auf jdbc verzichtest und einen webservice baust ? ist sowieso die bessere lösung

    in der zeit in der du jdbc treiber für android suchst, hast sicher einen webservice realisiert :D
     
  8. rotestelefon, 23.05.2012 #8
    rotestelefon

    rotestelefon Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    21.05.2012
    Verrätst du mir dann wie ich das mache, wenn ich generell relativ wenig Ahnung habe??
     
  9. swordi, 23.05.2012 #9
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    google zeigt dir viele beispiele an.

    der einfachste weg ist sicher
    *) php datei am server
    *) mysql befragen
    *) xml oder json liefern
    *) mit android abrufen
     
  10. rotestelefon, 23.05.2012 #10
    rotestelefon

    rotestelefon Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    21.05.2012
    Das klingt aber relativ umfangreich ;-)

    Ist es denn wirklich so schwer so einen verdammten JDBC Treiber für Android zu finden der funktioniert???
     
  11. swordi, 23.05.2012 #11
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    niemand, der ernsthaft mit android etwas macht, nutzt jdbc.

    das wird schon seine gründe haben :D
     
  12. rotestelefon, 23.05.2012 #12
    rotestelefon

    rotestelefon Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    21.05.2012
    Ich mache ja auch nichts ernsthaftes ;-) Aber trotzdem brauche ich etwas das funktioniert!
     
  13. swordi, 23.05.2012 #13
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    Dann mach es so wie man es dir empfiehlt. Wenn nicht wirst dich wohl allein damit rumschlagen müssen.

    Siehst ja dass es mit jdbc Probleme gibt.

    Ein webservice ist in einem halben Tag ohne grosse vorkenntisse machbar

    Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
     
  14. rotestelefon, 23.05.2012 #14
    rotestelefon

    rotestelefon Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    21.05.2012
    Ich habe prinzipiell gar keine Vorkenntnisse - zumindest nicht mit PHP.

    Kennst du ein gutes Tutorial oä. an das man sich halten kann??
     
  15. Tom299, 23.05.2012 #15
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    Du brauchst kein PHP. Wenn du Android progammierst, dann kannst du ja Java. Mit Eclipse kannst du dir ganz einfach Java WebServices generieren lassen. Und Tutorials gibts dazu auch viele im Netz. Wie das mit Netbeans funzt, kann ich dir allerdings nicht sagen, hab das schon Jahre nicht mehr benutzt ;-)
     
  16. swordi, 23.05.2012 #16
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    dazu gibts echt tausend seiten.

    ist keine große hexerei. kannst auch java nutzen anstelle von php - klar. nur irgendwelche webhoster haben meistens nur php und kein java.

    ohne aufwand geht aber genau genommen gar nichts in der programmierung
     
  17. rotestelefon, 23.05.2012 #17
    rotestelefon

    rotestelefon Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    21.05.2012
    aber es gibt leidder auch ganz viel Mist. Deswegen meine Frage, ob da jemand Erfahrung hat und ein gutes Tutorial kennt?
     
  18. rotestelefon, 24.05.2012 #18
    rotestelefon

    rotestelefon Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    0
    Registriert seit:
    21.05.2012
    okey, es hat nun auch so funktioniert. erklären kann ich zwar nicht, was ich jetzt verändert habe, aber plötzlich gings :)
    Trotzdem danke für eure Hilfe!
     

Diese Seite empfehlen