JAVA – Collegarsi ad un database remoto

gennaio 15th, 2008 - (5 Comments)



Ci è capitato più volte di sviluppare applicazioni web-based, collegate ad altre applicazioni web-based con le quali devono dialogare per lo scambio di dati ed informazioni. In Internet è oramai pieno di guide e articoli che spiegano, a volte chiaramente e a volte un pò meno, il funzionamento di semplici script PHP, ASP o .NET per aiutare chi è alle prime armi o per facilitare il compito degli sviluppatori che possono così contare su risorse già parzialmente scritte.

Ciò che più raramente si trova in Internet è una guida che spieghi come collegare un’applicazione che “gira” in locale con una web-base, e che quindi vive nel mondo Internet. E allora….ecco ciò che stavate cercando!

Supponiamo che, in locale, vi siate sviluppati una piccola applicazione Java che gestisce l’archivio dei film che vi siete comprati negli anni. Avete però la necessità di memorizzare i dati in un database che sia disponibile in rete, perchè volete che l’archivio sia visibile anche sul vostro sito. Come fare? Ovviamente duplicare il database remoto in locale non è una soluzione ottimale.

In poche parole, quello che vi interessa ottenere, è di far dialogare la vostra applicazione locale scritta in Java con, supponiamo, il vostro sito Joomla, e quindi scritto in PHP e basato su database MYSQL.

Supponendo che la vostra applicazione Java sia scritta correttamente, il pezzo di codice che ci interessa analizzare è il seguente:

……
try {
String driver = “com.mysql.jdbc.Driver”;
Class.forName(driver);
//stringa di connessione al database server
String url = “jdbc:mysql://ip_tuo_server:3306/”;

//esempio: connessione local server
//String url = “jdbc:mysql://”;
//Equivale a: “jdbc:mysql://127.0.0.1:3306/”

//Otteniamo una connessione con username e password
con = DriverManager.getConnection (url, “tuo_username”, “tua_password”);
System.out.println(“<Connessione riuscita>\n”);
con.setCatalog(“tuo_database”);
//Creiamo un oggetto Statement per poter interrogare il db
cmd = con.createStatement ();

//Query
String qry = “SELECT * FROM tua_tabella”;
res = cmd.executeQuery(qry);

//Stampiamone i risultati riga per riga
while (res.next()) {
//System.out.print(res.getString(“id”)+” “);
System.out.println(res.getString(“titolo_film”));
}
} catch {…}

……

I commenti presenti all’interno del codice dovrebbero già chiarire le istruzioni scritte in Java. Possiamo tuttavia aggiungere qualche riga di spiegazione:

  • String driver = “com.mysql.jdbc.Driver”;
    Class.forName(driver);

    Queste due righe di codice servono per stabilire il tipo di driver che intendiamo usare: in questo caso, abbiamo supposto che il database remoto sia un db MYSQL, e dunque dobbiamo utilizzare il driver MYSQL per connetterci al database remoto.
  • String url = “jdbc:mysql://ip_tuo_server:3306/”;

    Con questa riga di codice assegnamo alla variabile url la stringa di connessione: tutto ciò che dobbiamo fare è sostituire la dicitura ip_tuo_server con l’IP o il nome del server sul quale “gira” il database remoto. Se la connessione con il database server va a buon fine, verrà stampata la stringa “<Connessione riuscita>“;

  • con.setCatalog(“tuo_database”);

    Questa riga di codice ci permette di dichiarare il nome del database remoto che vogliamo interrogare e che ovviamente “gira” sull’IP dichiarato precedentemente; tutto ciò che dobbiamo fare è sostituire la dicitura tuo_database con il nome del database in questione.

  • String qry = “SELECT * FROM tua_tabella”;

    Nella variabile qry salviamo la query che interrogherà il database; supponendo che il databatabase remoto sia già popolato, è possibile utilizzare la query di esempio, sostituendo tua_tabella con il nome della tabella da cui ci interessa prendere i dati.

  • while (res.next())…

    Iteriamo sull’oggeto res, che possiamo vederlo come l’insieme degli elementi risultanti dall’interrogazione al database server; per ogni elemento, stampiamo il titolo ( System.out.println(res.getString(“titolo_film”)); ) supponendo che esista nella tabella interrogata il campo ‘titolo’.

You can follow any responses to this entry through the RSS 2.0 You can leave a response, or trackback.

5 Responses

  • marco says:

    ciao art,

    in questo caso ovviamente non si può accedere direttamente al database server dall’esterno (situazione che tra l’altro rispecchia la più diffusa per ovvi motivi di sicurezza).

    In questi casi si procede a seconda di cosa si deve implementare: ad esempio potresti implementare dei web services SOAP (Simple Object Access Protocol) che gestiscono le richieste che ti servono, per citare una soluzione possibile.

  • art says:

    Ciao e grazie per l’esempio. Se la porta 3306 non e’ abilitata dall’esterno come ci si comporta?

  • marco says:

    ciao Alessio, e grazie per il “grande”! ;)

    La risposta alla tua domanda è si, MySQL può essere utilizzato per gestire giochi multiplayer, anche se molto ovviamente dipende dal tipo di progetto e dai suoi requisiti.

  • Alessio says:

    Scusa ma i database MySQl vengono usati anche per gestire dei giochi multiplayer? Una semplice curiosità. Comunque sei un grande.

  • asif says:

    sei un grande :-)



Leave a Reply

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

*

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">