Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 28
  1. #1
    Utente di HTML.it L'avatar di ubbicom
    Registrato dal
    Mar 2004
    Messaggi
    1,407

    [Java\Android\MySQL] Could not create connection to database server

    Ciao.


    Ho creato un'applicazione android con connessione driver JDBC ad un database MySQL 5.6
    Ma quando eseguo il debug nel mio smartphone\tablet, ottengo questo errore:


    com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientC onnectionException:
    Could not create connection to database server. Attempted reconnect 3 times.
    Giving up


    Come risolvere questo errore?


    Grazie

    codice:
    package com.ccmex.mysql;
    
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.Statement;
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.TextView;
    
    
    public class MainActivity extends Activity {
    
    
        private static final String url = "jdbc:mysql://localhost:3306/world?autoReconnect=true";
        private static final String user = "XXXXXX";
        private static final String pass = "XXXXXX";
    
    
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            testDB();
        }
    
    
        public void testDB() {
                TextView tv = (TextView)this.findViewById(R.id.textView1);
            try {
                Class.forName("com.mysql.jdbc.Driver");
                Connection con = DriverManager.getConnection(url, user, pass);
                /* System.out.println("Database connection success"); */
    
    
                String result = "Database connection success\n";
                Statement st = con.createStatement();
                ResultSet rs = st.executeQuery("select * from city;");
                ResultSetMetaData rsmd = rs.getMetaData();
    
    
                while(rs.next()) {
                        result += rsmd.getColumnName(1) + ": " + rs.getInt(1) + "\n";
                        result += rsmd.getColumnName(2) + ": " + rs.getString(2) + "\n";
                        result += rsmd.getColumnName(3) + ": " + rs.getString(3) + "\n";
                }
                tv.setText(result);
            }
            catch(Exception e) {
                e.printStackTrace();
                tv.setText(e.toString());
            }   
    
    
        }
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    codice:
    private static final String url = "jdbc:mysql://localhost:3306/world?autoReconnect=true";

    Cioè... tu hai MySQL installato dentro al tuo device android? Non mi risulta esistano versioni di MySQL per Android...

    Mi sa che è il caso di rivedere quella stringa di connessione, in modo che non cerchi di collegarsi con localhost, ma con l'host su cui sta effettivamente girando il server di MySQL.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di ubbicom
    Registrato dal
    Mar 2004
    Messaggi
    1,407
    Grazie per la risposta e l'interessamento al mio problema.

    Non mi sono spiegato bene:
    1. in un pc notebook con windows 7 e connesso alla rete di casa ho installato MySQL, eclipse ed android;
    2. con eclipse ho sviluppato una semplice applicazione android che dovrebbe collegarsi al db MySQL installato sul notebook di cui sopra;
    3. ho collegato tramite porta usb un tablet al notebook;
    4. avvio il debug della suddetta applicazione sul tablet;
    5. ho l'errore come da titolo discussione;
    6. ho provato a modificare la stringa di connessione al db MySQL sostituendo a localhost: l'indirizzo ip del notebook (che però ad ogni riavvio del notebook cambia) ed anche 127.0.0.1 ed anche 10.0.2.2 ma il risultato non cambia;
    7. Il server MySQL è installato e gira funzionando sull'indirizzo ip 192.168.1.91;
      Funziona perchè con le credenziali user e password implementate nella classe java accedo regolarmente al db MySQL


    Spero sia più chiaro.
    Grazie

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Sì, è più chiaro, ma il problema è lo stesso: localhost significa "la macchina su cui sto girando" e si riferisce, quindi, al dispositivo android (che sia virtuale o fisico non importa) e sul dispositivo android, di sicuro MySQL non c'è. Infatti è sulla tua macchina "host" (che per il dispositivo è una macchina diversa, ovviamente).

    Il server MySQL è installato e gira funzionando sull'indirizzo ip 192.168.1.91;
    Bene... allora devi collegarti a quell'indirizzo, non a localhost.

    codice:
    private static final String url = "jdbc:mysql://192.168.1.91:3306/world?autoReconnect=true";

    Ci sono anche altre considerazioni da fare:

    1) Nel DBMS è stato consentito l'accesso da remoto all'utente che usi per la connessione? E' una configurazione che va fatta sul server MySQL.

    2) Nella tua macchina host (la 192.168.1.91) hai qualche firewall abilitato (anche il Windows Firewall)? Se sì, hai aperto la porta 3306? Altrimenti nessuno si collega alla tua macchina su quella porta.


    Ciao.
    Ultima modifica di LeleFT; 07-02-2014 a 10:23
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    LeleFT ti ha già risposto, comunque vedo - sperando di non inserire stupidaggini - di articolare un po' di più:

    127.0.0.1 e localhost sono la stessa cosa. Vuol dire macchina (server) locale. Tablet incluso. Quindi nè l'uno nè l'altro vanno bene.

    La connessione USB non depone a tuo favore: meglio se lo connetti in wi-fi alla rete, almeno si becca un indirizzo ip appartenente alla rete stessa e forse facciamo un passo avanti.

    Ammesso che tu adesso sia connesso alla rete con il tablet, verifica la tua configurazione di MySQL: accetta connessioni da client che non siano localhost / 127.0.0.1 ? Se sì, usa l'indirizzo ip locale della macchina su cui gira MySQL come indirizzo di connessione (nel tuo caso: 192.168.1.91), se no, cambia l'impostazione di MySQL.

    Connessioni dall'esterno: se non hai un indirizzo ip fisso, puoi provare ad appoggiarti a qualche servizio esterno (tipo dyndns o altro: molti router propongono già nelle loro pagine di configurazione, alcuni servizi per la connessione via remoto).

    EDIT: ecco, LeleFT ha integrato.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Utente di HTML.it L'avatar di ubbicom
    Registrato dal
    Mar 2004
    Messaggi
    1,407
    Grazie per le risposte.


    1. l'indirizzo IP del notebook dove risiede MySql è il seguente 192.168.1.144;
    2. riesco a collegarmi al db MySQL sul notebook da un altro pc della stessa rete lan con l'utente 'root'@'94-775d2a.lan' che ho configurato su MySQL per l'accesso da remoto;
    3. ho modificato così la stringa di connessione nel progetto android:

    codice:
        
    private static final String url = "jdbc:mysql://192.168.1.144:3306/test?autoReconnect=true";    
    private static final String user = "root";
    private static final String pass = "psw";
    ed ho errore:
    runtime error: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    1. nella cartella referenced libraries del progetto ho installato mysql-connector-java-5.1.24-bin.jar
    2. sul notebook la versione del connector/j è la 5.1.24


    Cosa devo fare?
    Ultima modifica di ubbicom; 07-02-2014 a 21:04

  7. #7
    scusate se mi intrometto e forse dico una sciocchezza.
    ma non penso che android possa connettersi direttamente a un db.
    in genere si usano web service per queste cose.

  8. #8
    Utente di HTML.it L'avatar di ubbicom
    Registrato dal
    Mar 2004
    Messaggi
    1,407
    Quote Originariamente inviata da fermat Visualizza il messaggio
    scusate se mi intrometto e forse dico una sciocchezza.
    ma non penso che android possa connettersi direttamente a un db.
    in genere si usano web service per queste cose.
    Cosa intendi per web service?

  9. #9
    senza andare troppo sul complicato questo tutorial (ma ce ne stanno una marea) può fare al caso tuo: http://www.tutorialspoint.com/androi..._php_mysql.htm

  10. #10
    Utente di HTML.it L'avatar di ubbicom
    Registrato dal
    Mar 2004
    Messaggi
    1,407
    Quote Originariamente inviata da fermat Visualizza il messaggio
    senza andare troppo sul complicato questo tutorial (ma ce ne stanno una marea) può fare al caso tuo: http://www.tutorialspoint.com/androi..._php_mysql.htm
    grazie, ma in questo caso devo avere apache installato sul pc per far funzionare le pagine PHP ... e poi se volessi collegarmi in hosting ad un db mysql tramite php:
    1. sul server hosting deve esserci il connector mysql j installato;
    2. quando provo a collegarmi :

    Connessione a Mysql non riuscita. - Access denied for user 'XXXXX'@'localhost' (using password: YES)

    Le stesse credenzilai funzionano invece in ASP e dot net ...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.