Connexió SQL des de Java



Per a qualsevol programador java que treballi amb Bases de Dades SQL (com Oracle, MySQL, SQL Server i altres..), la connexió entre aquestes dues eines és clau. Recordo quan em van ensenyar connexió SQL des de PHP i, per a què enganyar-nos, Java arriba a ser tan minuciós que esperava un procés més complicat, ja podreu veure que no. El pilar més important és la combinació de Java amb JDBC: fàcil i poderosa a la vegada.

En aquesta entrada us ensenyaré a mantenir una connexió entre la BD i el nostre projecte Java, més endavant ja tractaré les queries i les dades que obtenim d'aquestes: comencem la casa pels fonaments doncs.


Prèvis a la connexió

Nosaltres treballarem amb un model DBMS, però aquests pasos es poden seguir també amb altres sistemes, només haurem d'afegir el driver de connexió adequat. Nosaltres doncs farem servir el driver JDBC i per treballar amb aquest necessitarem triar una d'aquestes dos opcions:

-DriverManager i DataSource

Jo treballo normalment amb la classe Drivermanager on es connecta una aplicació a una font de dades, especificada en forma de URL. Quan aquesta classe intenta per primer cop establir una connexió, automàticament carrega qualsevol driver JDBC que troba entre el path de la classe. En cas que treballéssim en un entorn com Eclipse o Netbeans, els hauríem d'afegir prèviament al projecte. És fàcil de treballar-hi i completa

Primer doncs haurem de descarregar-nos el driver per efectuar la connexió (el podeu obtenir d'aquí), és important que controleu que la versió del driver és compatible amb el vostre Java_version (jo utilitzo driver 5.1.21 i Java 1.6). El codi que aquí exposaré està pensat per a MySQL, base de dades que actualment tinc el local. El codi canvia lleugerament entre unes i altres BD de SQL però cal tenir-ho present.
 Hi ha vàries maneres de crear l'estructura, jo sóc preferible a tenir la informació de la connexió en un fitxer apart de l'aplicació per seguretat. Crearem un fitxer config.cfg amb la següent informació:

host= "Ip d'on tenim la BD establerta"
database= "nom de la taula"
user= "usuari"
password= "pass"

i crearem dos classes java diferent: l'encarregada de capturar les dades del fitxer (l'anomenarem Configuration.java) i l'encarregada d'establir la connexió (ConnectionAction.java).

Configuration.java

public class Configuration{
       //Sera de tipus Properties per obtenir la informacio d'una manera mes encapsulada
       Properties configFile; 
       public Configuration(File cfg){
               //constructor a traves de fitxer
               configFile = new java.util.Properties();
               try {                        
                       configFile.load(new FileInputStream(cfg));
               }catch(Exception e){
                       System.err.println(e.getMessage()); 
               }
       }
       public String getPropietat(String key){
               //l'utilitzarem per obtenir els valors
               String value = this.configFile.getProperty(key);                
               return value;
       }  
       public int getNValors(){
               //quantitat de valors que tenim
               return this.configFile.size();
       }
}

ConnectionAction.java

public class ConnectionAction {

 public ConnectionAction() {
           //constructor buit
 }
 static Connection connection = null; //objecte de la connexio

 public static Connection getConnection() throws InstantiationException,
   IllegalAccessException, ClassNotFoundException {
  File ff=new File("config.cfg");

  Configuration cfl=new Configuration(ff);
        String host= cfl.getPropietat("host");
  String db=cfl.getPropietat("database");
  String user= cfl.getPropietat("user");
  String password= cfl.getPropietat("password");
  try {
   if ( (connection == null) || (connection.isClosed()) ) {
                 //si no existeix connexio o esta tancada

                //mantenim la codificacio UTF
    String url = "jdbc:mysql://"+host+":3306/"+db+"?
useUnicode=true&characterEncoding=utf-8&amp";

                //el nom del driver, important!
    Class.forName("com.mysql.jdbc.Driver").newInstance();

               //com hem comentat abans, cridem la classe DriverManager d'aquest
    connection = DriverManager.getConnection(url, user, password);

   }
  } catch (SQLException e) {
   System.err.println(e.getMessage());
            System.out.println("Error en la connexio");
  }
  return connection;
 }
 
 public static void close(){
        //per tancar la connexio 

  try {
   connection.close();
  } catch (SQLException e) {
   System.err.println(e.getMessage());
  }
 }
}

Exemple d'utilització


Ara només caldrà incloure la connexió al nostre codi d'una manera tan simple com:

 Connection con;
try {
con = ConnectionAction.getConnection();
 }
 catch (InstantiationException e) {
e.printStackTrace();

catch (IllegalAccessException e) {
e.printStackTrace();

catch (ClassNotFoundException e) {
e.printStackTrace();
}

A la següent entrada us ensenyaré com treballar amb aquesta connexió i realitzar queries a la BdD.


Recordo que qualsevol codi aquí mostrat, si no s'indica el contrari, manté el dret d'autor d'una servidora com autora, es poden copiar, utilitzar i modificar, però manté sempre l'autor original.

0 Comentarios