Loading ...

Connessione a Oracle con Java e Apache DbUtils

Connessione a Oracle con Java e Apache DbUtils

Apache Commons DbUtils è una libreria per Java per gestire le operazioni su database attraverso JDBC.

Nasce con lo scopo di migliorare gli strumenti standard di Java, e mi sembra che ci riesca.

Oggi vediamo come usarla connettendeci ad un database Oracle; ma usando JDBC, la possiamo usare per tutti i database compatibili.

Prima di tutto aggiungiamo le seguenti librerie a Maven:

 <dependencies>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.3</version>
        </dependency>
        <dependency>
            <groupId>commons-dbutils</groupId>
            <artifactId>commons-dbutils</artifactId>
            <version>1.7</version>
        </dependency>
    </dependencies>

Poi creaimo una classe POJO:

public class Zona {

    private String zona;
    private String descrizione;

    public String getZona() {
        return zona;
    }

    public void setZona(String zona) {
        this.zona = zona;
    }

    public String getDescrizione() {
        return descrizione;
    }

    public void setDescrizione(String descrizione) {
        this.descrizione = descrizione;
    }

}

Infine connettiamoci al db:

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;

public class Main {

    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    static final String DB_URL = "jdbc:oracle:thin:@192.168.1.10:1521:db_test";
    static final String USER = "";
    static final String PASS = "";

    public static void main(String[] args) {
        Connection conn = null;
        try {
            QueryRunner queryRunner = new QueryRunner();
            DbUtils.loadDriver(JDBC_DRIVER);
            System.out.println("Connessione al database...");
            conn = DriverManager.getConnection(DB_URL, USER, PASS);
            // CUSTOM HANDLER
            ResultSetHandler<ArrayList<Zona>> resultHandler = resultSet -> {
                ArrayList<Zona> list = new ArrayList<>();
                while (resultSet.next()) {
                    Zona z = new Zona();
                    z.setZona(resultSet.getString("ZONA"));
                    z.setDescrizione("DESCR32");
                    list.add(z);
                }
                return list;
            };
            ArrayList<Zona> zone = queryRunner.query(conn,
                    "SELECT ZONA, DESCR32 FROM ZONA WHERE DITTA = ?",
                    resultHandler,
                    "XXL");
            for (Zona zona : zone) {
                System.out.println("NOME: " + zona.getZona());
                System.out.println("DESCRIZIONE: " + zona.getDescrizione());
                System.out.println("----------");
            }
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } finally {
            try {
                DbUtils.close(conn);
            } catch (SQLException ex) {
                System.out.println(ex.getMessage());
            }
        }
    }

}

Usando un oggetto custom, abbiamo creato un handler custom; non so se c'è una maniera migliore, ma così funziona bene.

Per il resto, mi sembra tutto di facile comprensione.

Enjoy!