Autore Topic: Connessione a database mysql locale tramite connector jdbc  (Letto 4724 volte)

Offline AmboSE87

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S3 - Galaxy S2 - Galaxy Tab P1000
  • Sistema operativo:
    Windows 7 - Ubuntu 12.04
Connessione a database mysql locale tramite connector jdbc
« il: 08 Settembre 2012, 16:27:51 CEST »
0
Ciao a tutti,
Questo è il mio primo topic, spero di fare tutto come si deve, è un pò che cerco prima di postare  o_O !
Sto tentando di fare una piccola app che mi permetta di collegarmi, tramite protocollo TCP/IP al database MySql, inanzitutto posto il codice:

Codice (Java): [Seleziona]
public class ConnectionMysql extends Activity implements OnClickListener {

        public Button btnTest;
        public EditText editText;
       
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.act_conn_mysql);
        editText = (EditText)findViewById(R.id.EditText);
        btnTest = (Button)findViewById(R.id.btnTest);
        btnTest.setOnClickListener(this);
        testConnection();
        }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.act_conn_mysql, menu);
        return true;
    }
   
    public void testConnection()
    {
         System.out.println("MySQL Connect Example.");
         Connection conn = null;
         String url = "jdbc:mysql://192.168.1.5:3306/";
         String dbName = "test";
         String driver = "com.mysql.jdbc.Driver";
         String userName = "root";
         String password = "ambopwd";
         try {
           Class.forName(driver).newInstance();
           conn = DriverManager.getConnection(url+dbName,userName,password);
           System.out.println("Connected to the database");
           conn.close();
           System.out.println("Disconnected from database");
         } catch (Exception e) {
           e.printStackTrace();
           editText.setText(e.getMessage() + " " + e.getStackTrace());
         }
       
    }

        public void onClick(View v) {
                System.out.println("test");
                 editText.setText("");
                 testConnection();     
        }
}

Ho importato spero correttamente la libreria jdbc presente in:

-- C:\Program Files (x86)\MySQL\MySQL Tools for 5.0\java\lib

chiamata:

-- mysql-connector-java-5.0.4-bin.jar

PS. Ho provato anche ad utilizzare la versione scaricata dal sito MySql 5.1.21

Nel packed Explorer la trovo sotto la voce:

-- Referenced Libraries

Malgrado ciò mi dà errore nel caricamento della libreria:

Codice: [Seleziona]
09-08 16:05:26.005: I/System.out(22723): test
09-08 16:05:26.015: I/System.out(22723): MySQL Connect Example.
09-08 16:05:29.330: W/System.err(22723): java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
09-08 16:05:29.335: W/System.err(22723):         at java.lang.Class.classForName(Native Method)
09-08 16:05:29.340: W/System.err(22723):         at java.lang.Class.forName(Class.java:217)
09-08 16:05:29.345: W/System.err(22723):         at java.lang.Class.forName(Class.java:172)
09-08 16:05:29.350: W/System.err(22723):         at com.testmysql.ConnectionMysql.testConnection(ConnectionMysql.java:45)
09-08 16:05:29.355: W/System.err(22723):         at com.testmysql.ConnectionMysql.onClick(ConnectionMysql.java:60)
09-08 16:05:29.360: W/System.err(22723):         at android.view.View.performClick(View.java:3644)
09-08 16:05:29.365: W/System.err(22723):         at android.view.View$PerformClick.run(View.java:14313)
09-08 16:05:29.370: W/System.err(22723):         at android.os.Handler.handleCallback(Handler.java:605)
09-08 16:05:29.375: W/System.err(22723):         at android.os.Handler.dispatchMessage(Handler.java:92)
09-08 16:05:29.380: W/System.err(22723):         at android.os.Looper.loop(Looper.java:137)
09-08 16:05:29.380: W/System.err(22723):         at android.app.ActivityThread.main(ActivityThread.java:4517)
09-08 16:05:29.380: W/System.err(22723):         at java.lang.reflect.Method.invokeNative(Native Method)
09-08 16:05:29.385: W/System.err(22723):         at java.lang.reflect.Method.invoke(Method.java:511)
09-08 16:05:29.385: W/System.err(22723):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
09-08 16:05:29.385: W/System.err(22723):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
09-08 16:05:29.385: W/System.err(22723):         at dalvik.system.NativeStart.main(Native Method)
09-08 16:05:29.390: W/System.err(22723): Caused by: java.lang.NoClassDefFoundError: com/mysql/jdbc/Driver
09-08 16:05:29.390: W/System.err(22723):         ... 16 more
09-08 16:05:29.395: W/System.err(22723): Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
09-08 16:05:29.395: W/System.err(22723):         at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
09-08 16:05:29.395: W/System.err(22723):         at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
09-08 16:05:29.400: W/System.err(22723):         at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
09-08 16:05:29.400: W/System.err(22723):         ... 16 more
09-08 16:07:32.600: W/IInputConnectionWrapper(22723): showStatusIcon on inactive InputConnection


Ho fatto delle ricerche su con questo argomento:

Codice: [Seleziona]
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

Ma sono qui a postare...  :-[

Vi allego il sorgente, attraverso il quale potrete ben capire che mi sono avvicinato ad android da qualche giorno  O:-)

Consapevole di una mia macroscopica cavolata vi ringrazio




Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Connessione a database mysql locale tramite connector jdbc
« Risposta #1 il: 08 Settembre 2012, 19:00:32 CEST »
0
Cosa intendi con "importato"? L'hai messa nella cartella libs del progetto?

Offline AmboSE87

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S3 - Galaxy S2 - Galaxy Tab P1000
  • Sistema operativo:
    Windows 7 - Ubuntu 12.04
Re:Connessione a database mysql locale tramite connector jdbc
« Risposta #2 il: 08 Settembre 2012, 19:21:45 CEST »
0
Ciao Ricky,

Mi sei stato di aiuto, provengo dal mondo microsoft c#, e in visual studio quando inserisco una .dll esterna devo solo referenziarla, ci pensa l'IDE a copiarla dove serve, immagino che qui non sia così, o forse in qualche impostazione devo specificare che venga anche copiata!
Comunque, fatto sta che questo problema me l'hai risolto  :D

Adesso mi da dei problemi legati ai permessi così ad occhio LogCat, ma prima di rompervi le scatole faccio qualche prova.

Grazie ancora

Offline ceklo

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +1
    • Mostra profilo
Re:Connessione a database mysql locale tramite connector jdbc
« Risposta #3 il: 16 Settembre 2012, 09:00:22 CEST »
0
Ciao AmboSE87,

dato che sto lavorando anch'io con lo stesso argomento ti chiedo aiuto, magari sei fresco di nozioni (il post è recentissimo).

Ho scaricato il tuo progetto, ho notato che mancava: mysql-connector-java-5.1.22-bin.jar , quindi ho copiato sotto la cartella libs.
Se lancio l'applicazione non funziona, ottengo il seguente messaggio: com.mysql.jdbc.Driver [Ljava.lang.StackTraceElement;@44f52d30 direttamente sullo schermo del emulatore, probabilmente perché non ho settato l'accesso al driver.
Probabilmente mi manca capire il significato di: String driver = "com.mysql.jdbc.Driver", che si trova nel metodo: public void testConnection().
Magari se posti nuovamente il progetto funzionante provo a copiare la soluzione.

Il testo del LogCat è: 09-16 07:42:33.689: W/System.err(534): Caused by: java.net.ConnectException: /127.0.0.1:3306 - Connection refused.

Grazie
Saluti
Ceklo
« Ultima modifica: 16 Settembre 2012, 09:44:31 CEST da ceklo »

Offline ceklo

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +1
    • Mostra profilo
Re:Connessione a database mysql locale tramite connector jdbc
« Risposta #4 il: 16 Settembre 2012, 10:31:03 CEST »
0
Torno alla carica,

Ho seguito le indicazioni trovate su: java - Android + MySQL using com.mysql.jdbc.Driver - Stack Overflow, quindi ho scaricato il driver:  MySQL ::  Download Connector/J , dato come unico funzionante.
Ottengo sempre l'exeption che stampo in un Toast (vedi allegato).

In alcuni post si legge anche che il connettore JDBC non funziona con Android: java - Android JDBC not working: ClassNotFoundException on driver - Stack Overflow.

Sono confuso, mi aiutate per favore?

Grazie
Saluti
ceklo

« Ultima modifica: 16 Settembre 2012, 10:34:13 CEST da ceklo »

Offline ceklo

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +1
    • Mostra profilo
Re:Connessione a database mysql locale tramite connector jdbc
« Risposta #5 il: 16 Settembre 2012, 10:42:56 CEST »
0
Ma che strana cosa....

Codice: [Seleziona]
    public void testConnection() {
           
         Connection conn = null;
         String url = "jdbc:mysql://10.0.2.2:3306/";
         String dbName = "tabelladati";
         String driver = "com.mysql.jdbc.Driver";
         String userName = "test";
         String password = "miapassword";
         try {
           Class.forName(driver).newInstance();
           conn = DriverManager.getConnection(url+dbName,userName,password);
           Toast.makeText(getBaseContext(), "Connected to the database.", Toast.LENGTH_LONG).show();

           conn.close();
           Toast.makeText(getBaseContext(), "Disconnected form the database.", Toast.LENGTH_LONG).show();

         } catch (Exception e) {
                 Toast.makeText(getBaseContext(), "Exception e." + e.getMessage() , Toast.LENGTH_LONG).show();
           e.printStackTrace();
           //editText.setText(e.getMessage() + " " + e.getStackTrace());
         }
    }

se metto url = "jdbc:mysql://127.0.0.1:3306/127.0.0.1 non funziona, invece con: url = "jdbc:mysql://10.0.2.2:3306/ ottengo entrambi toast, relativi alla conferma di connessione avvenuta, e successivamente di disconnessione.

ma da sempre 127.0.0.1 è il localhost, chi potrebbe mai essere 10.0.2.2 ?

Aggiungendo questo codice sotto try e prima di conn.close() ottengo la prova di funzionamento, dato che riesco a recuperare dati dalla tabella disponibile in localhost....!

Codice: [Seleziona]
           Statement stmt = conn.createStatement();
           ResultSet rs = (ResultSet) stmt.executeQuery("SELECT LOTTO, ID, DATA_ACQUISTO FROM tabella1");
           String entry = null;
           while (rs.next()){
               entry = rs.getString(1) + "-" + rs.getString(2) + "-" + rs.getString(3);
           }
           Toast.makeText(getBaseContext(), entry, Toast.LENGTH_LONG).show();

Mi chiedo nuovamente perché 10.0.2.2 ? Devo capire questo fatto per gestire correttamente l'accesso ai dati sul server in rete tramite Wi-Fi.

Grazie
Saluti
Ceklo
« Ultima modifica: 16 Settembre 2012, 11:24:26 CEST da ceklo »

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Connessione a database mysql locale tramite connector jdbc
« Risposta #6 il: 16 Settembre 2012, 10:55:09 CEST »
0
adb logcat | tee /tmp/logcat | grep TAG

Offline ceklo

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +1
    • Mostra profilo
Re:Connessione a database mysql locale tramite connector jdbc
« Risposta #7 il: 16 Settembre 2012, 12:32:46 CEST »
0
Grazie
Ora e' chiaro!
saluti
Ceklo

Offline supernio

  • Nuovo arrivato
  • *
  • Post: 18
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Mac OS X 10.8
Re:Connessione a database mysql locale tramite connector jdbc
« Risposta #8 il: 11 Aprile 2013, 23:13:58 CEST »
0
Scusate se mi intrometto, dovendo connettere anch'io la mia app ad un database esterno (altervista) fra i vari metodi ho trovato anche questo riportato AmboSE87, ho notato che user e pass del db sono in chiaro nel codice java e volevo sapere se è conveniente usare questo metodo per connessioni esterne o se si incorre facilmente in una intercettazione dei dati d'accesso del database da malintenzionati.

Offline ceklo

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +1
    • Mostra profilo
Re:Connessione a database mysql locale tramite connector jdbc
« Risposta #9 il: 17 Giugno 2013, 09:26:21 CEST »
0
Una nota importante:

Dopo avere copiato il connector mysql-connector-java-3.0.17-ga-bin.jar in libs (questa versione e non altre....) andare in Build Path > Configure Build Path, premere la linguetta Order and Export (la quarta a destra), assicurarsi che sia stato selezionato il connetore, altrimenti non viene incluso nel pacchetto *.apk.

Ciao
Ceklo
« Ultima modifica: 17 Giugno 2013, 09:30:52 CEST da ceklo »