bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


Barra lateral

ASIX Administració de Sistemes Informàtics i Xarxes
Tots els mòduls del cicle
MP01 Implantació de sistemes operatius
Totes les UFs del modul
MP02 Gestió de bases de dades
Totes les UFs del modul
MP03 Programació bàsica
Totes les UFs del modul
MP04 Llenguatges de marques i sistemes de gestió d'informació
Totes les UFs del modul
MP05 Fonaments de maquinari
Totes les UFs del modul
MP06 Administració de sistemes operatius
Totes les UFs del modul
MP07 Planificació i administració de xarxes
Totes les UFs del modul
MP08 Serveis de xarxa i Internet
Totes les UFs del modul
MP09 Implantació d'aplicacions web
Totes les UFs del modul
MP10 Administració de sistemes gestors de bases de dades
Totes les UFs del modul
MP11 Seguretat i alta disponibilitat
Totes les UFs del modul
MP12 Formació i orientació laboral
Totes les UFs del modul
MP13 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP14 Projecte
Totes les UFs del modul
DAM Desenvolupament d’aplicacions multiplataforma
Tots els mòduls del cicle
MP01 Sistemes informàtics
Totes les UFs del modul
MP02 Bases de dades
Totes les UFs del modul
MP03 Programació bàsica
Totes les UFs del modul
MP04 Llenguatges de marques i sistemes de gestió d'informació
Totes les UFs del modul
MP05 Entorns de desenvolupament
Totes les UFs del modul
MP06 Accés a dades
Totes les UFs del modul
MP07 Desenvolupament d’interfícies
Totes les UFs del modul
MP08 Programació multimèdia i dispositius mòbils
Totes les UFs del modul
MP09 Programació de serveis i processos
Totes les UFs del modul
MP10 Sistemes de gestió empresarial
Totes les UFs del modul
MP11 Formació i orientació laboral
Totes les UFs del modul
MP12 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP13 Projecte de síntesi
Totes les UFs del modul
MPDual Mòdul Dual / Projecte
DAW Desenvolupament d’aplicacions web
Tots els mòduls del cicle
MP01 Sistemes informàtics
Totes les UFs del modul
MP02 Bases de dades
Totes les UFs del modul
MP03 Programació
Totes les UFs del modul
MP04 Llenguatge de marques i sistemes de gestió d’informació
Totes les UFs del modul
MP05 Entorns de desenvolupament
Totes les UFs del modul
MP06 Desenvolupament web en entorn client
Totes les UFs del modul
MP07 Desenvolupament web en entorn servidor
Totes les UFs del modul
MP08 Desplegament d'aplicacions web
Totes les UFs del modul
MP09 Disseny d'interfícies web
Totes les UFs del modul
MP10 Formació i Orientació Laboral
Totes les UFs del modul
MP11 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP12 Projecte de síntesi
Totes les UFs del modul
SMX Sistemes Microinformàtics i Xarxes
Tots els mòduls del cicle
MP01 Muntatge i manteniment d’equips
Totes les UFs del modul
MP02 Sistemes Operatius Monolloc
Totes les UFs del modul
MP03 Aplicacions ofimàtiques
Totes les UFs del modul
MP04 Sistemes operatius en xarxa
Totes les UFs del modul
MP05 Xarxes locals
Totes les UFs del modul
MP06 Seguretat informàtica
Totes les UFs del modul
MP07 Serveis de xarxa
Totes les UFs del modul
MP08 Aplicacions Web
Totes les UFs del modul
MP09 Formació i Orientació Laboral
Totes les UFs del modul
MP10 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP11 Anglès
Totes les UFs del modul
MP12 Síntesi
Totes les UFs del modul
CETI Ciberseguretat en Entorns de les Tecnologies de la Informació
Tots els mòduls del cicle
CiberOT Ciberseguretat en Entorns d'Operació
Tots els mòduls del cicle
java_sqlite

SQLite a Java


Exemples

sqlite_java-exemple2.zip

Accés a Bases de Dades, JDBC

JDBC (Java Database Connectivity) és l’API bàsica de Java per accedir a Bases de Dades

- És fàcil de fer servir

- Pot connectar amb casi totes les bases de dades del mercat

- No té utilitats per traduïr de SQL a objectes Java (ni al revés)

Accés a Bases de Dades, SQLite

SQLite és un sistema de gestió de base de dades lleuger, que NO segueix el model client-servidor.

- Soporta usuaris simultanis, però no és molt eficient al fer-ho.

- És “zero-configuration”, no cal instal·lar-la i treballa amb un sol arxiu local

- Permet camps de longitud variable

Es pot descarregar el .jar d’aquí

SQLite, Establir la connexió

Cal posar “jdbc:sqlite:” i la ruta de l’arxiu que servirà de base de dades

Si no existeix en crea una nova buida amb aquest nom d’arxiu

Abans d’acabar el programa cal tancar correctament la connexió amb ‘.close()

Connection conn = null;
try {
    String url = "jdbc:sqlite:" + filePath;
    conn = DriverManager.getConnection(url);
    if (conn != null) {
        DatabaseMetaData meta = conn.getMetaData();
        System.out.println("BBDD driver: " + 
meta.getDriverName());
    }
    System.out.println("BBDD SQLite connectada");
} catch (SQLException e) { e.printStackTrace(); }
 
// Executar consultes …
 
try {
    if (conn != null) {
        conn.close();
        System.out.println("DDBB SQLite desconnectada");
    }
} catch (SQLException ex) {         
    System.out.println(ex.getMessage()); 
}

SQLite, executeUpdate

Les consultes que no retornen una taula (DROP, CREATE, INSERT, UPDATE, …) s’han d’executar amb ‘.executeUpdate

int result = 0;
String sql = “DROP TABLE warehouses;;
try {
    Statement stmt = conn.createStatement();
    result = stmt.executeUpdate(sql);
} catch (SQLException e) { e.printStackTrace(); }

SQLite, executeQuery

Les consultes que retornen una taula (SELECT) s’han d’executar amb ‘.executeQuery

El resultat s’obté en un objecte ‘ResultSet’, del que en podem obtenir les dades segons el tipus que correspon a la columna:

- rs.getInt(nomColumna)

- rs.getString(nomClumna)

ResultSet rs = null;
String sql = “DROP TABLE warehouses;;
try {
    Statement stmt = conn.createStatement();
    rs = stmt.executeQuery(sql);
} catch (SQLException e) { e.printStackTrace(); }
 
System.out.println("Contingut de la taula:");
while (rs.next()) {
    System.out.println("    " + rs.getInt("id") + ", " 
   + rs.getString("name"));
}

Exemple, mostrar dades de SQLite

Aquest exemple mostra les dades d'una base de dades SQLite

MainSQLite.java

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
 
/*
 * Aquest exemple mostra les 
 * dades de SQLite
 */
 
public class MainSQLite {
 
    public static void main(String[] args) throws SQLException {
        String basePath = System.getProperty("user.dir") + "/";
        String filePath = basePath + "database.db";
        ResultSet rs = null;
 
        // Connectar (crea la BBDD si no existeix)
        Connection conn = UtilsSQLite.connect(filePath);
 
        // Llistar les taules
        ArrayList<String> taules = UtilsSQLite.listTables(conn);
        System.out.println("Taules: " + taules);
 
        for (int cntTab = 0; cntTab < taules.size(); cntTab = cntTab + 1) { 
            String nomTaula = taules.get(cntTab);
 
            // Mostrar les columnes de la taula
            rs = UtilsSQLite.querySelect(conn, "SELECT * FROM " + nomTaula + ";");
            ResultSetMetaData rsmd = rs.getMetaData();
            System.out.println("Columnes de la taula " + nomTaula + ":");
            for (int cntCol = 1; cntCol <= rsmd.getColumnCount(); cntCol = cntCol + 1) { 
                // Les columnes començen a 1, no hi ha columna 0!
                String label = rsmd.getColumnLabel(cntCol);
                String name = rsmd.getColumnName(cntCol);
                int type = rsmd.getColumnType(cntCol);
                System.out.println("    " + label + ", " + name + ", " + type);
            }
 
            // Mostrar la informació de la taula
            System.out.println("Continguts de la taula " + nomTaula + ":");
            rs = UtilsSQLite.querySelect(conn, "SELECT * FROM " + nomTaula + ";");
            while (rs.next()) {
                String txt = "";
                for (int cntCol = 1; cntCol <= rsmd.getColumnCount(); cntCol = cntCol + 1) {
                    if (cntCol == 1) { txt = txt + "    "; } else { txt = txt + ", "; }
                    int type = rsmd.getColumnType(cntCol);
                    String name = rsmd.getColumnName(cntCol);
                    switch (type) {
                        case java.sql.Types.INTEGER:
                            txt = txt + rs.getInt(name);
                            break;
                        case java.sql.Types.VARCHAR:
                            txt = txt + rs.getString(name);
                            break;
                        case java.sql.Types.REAL:
                            txt = txt + rs.getFloat(name);
                            break;
                        case java.sql.Types.BIGINT:
                            txt = txt + rs.getLong(name);
                            break;
                        case java.sql.Types.BOOLEAN:
                            txt = txt + rs.getBoolean(name);
                            break;
                        default:
                            txt = txt + "???";
                            break;
                    }
                }
                System.out.println(txt);
            }
        }
 
        // Desconnectar
        UtilsSQLite.disconnect(conn);
    }
}

UtilsSQLite.java

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
 
public class UtilsSQLite {
 
    public static Connection connect (String filePath) {
        Connection conn = null;
 
        try {
            String url = "jdbc:sqlite:" + filePath;
            conn = DriverManager.getConnection(url);
            if (conn != null) {
                DatabaseMetaData meta = conn.getMetaData();
                System.out.println("BBDD driver: " + meta.getDriverName());
            }
            System.out.println("BBDD SQLite connectada");
        } catch (SQLException e) { e.printStackTrace(); }
 
        return conn;
    }
 
    public static void disconnect (Connection conn ) {
        try {
            if (conn != null) { 
                conn.close(); 
                System.out.println("DDBB SQLite desconnectada");
            }
        } catch (SQLException ex) { System.out.println(ex.getMessage()); }
    }
 
    public static ArrayList<String> listTables (Connection conn) {
        ArrayList<String> list = new ArrayList<>();
        try {
            ResultSet rs = conn.getMetaData().getTables(null, null, null, null);
            while (rs.next()) {
                list.add(rs.getString("TABLE_NAME"));
            }
        } catch (SQLException ex) { System.out.println(ex.getMessage()); }
        return list;
    }
 
    public static int queryUpdate (Connection conn, String sql) {
        int result = 0;
        try {
            Statement stmt = conn.createStatement();
            result = stmt.executeUpdate(sql);
        } catch (SQLException e) { e.printStackTrace(); }
        return result;
    }
 
    public static ResultSet querySelect (Connection conn, String sql) {
        ResultSet rs = null;
        try {
            Statement stmt = conn.createStatement();
            rs = stmt.executeQuery(sql);
        } catch (SQLException e) { e.printStackTrace(); }
        return rs;
    }
}

Exemple, iniciar dades a SQLite

Aquest exemple mostra com iniciar a SQLite (fa ús de UtilsSQLite.java anterior)

Main.java

import java.io.File;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
 
/*
 * Aquest exemple mostra com fer una 
 * connexió a SQLite amb Java
 * 
 * A la primera crida, crea l'arxiu 
 * de base de dades hi posa dades,
 * després les modifica
 * 
 * A les següent crides ja estan
 * originalment modificades
 * (tot i que les sobreescriu cada vegada)
 */
 
public class Main {
 
    public static void main(String[] args) throws SQLException {
        String basePath = System.getProperty("user.dir") + "/";
        String filePath = basePath + "database.db";
        ResultSet rs = null;
 
        // Si no hi ha l'arxiu creat, el crea i li posa dades
        File fDatabase = new File(filePath);
        if (!fDatabase.exists()) { initDatabase(filePath); }
 
        // Connectar (crea la BBDD si no existeix)
        Connection conn = UtilsSQLite.connect(filePath);
 
        // Llistar les taules
        ArrayList<String> taules = UtilsSQLite.listTables(conn);
        System.out.println(taules);
 
        // Demanar informació de la taula
        rs = UtilsSQLite.querySelect(conn, "SELECT * FROM warehouses;");
        ResultSetMetaData rsmd = rs.getMetaData();
        System.out.println("Informació de la taula:");
        for (int cnt = 1; cnt < rsmd.getColumnCount(); cnt = cnt + 1) { 
            // Les columnes començen a 1, no hi ha columna 0!
            String label = rsmd.getColumnLabel(cnt);
            String name = rsmd.getColumnName(cnt);
            int type = rsmd.getColumnType(cnt);
            System.out.println("    " + label + ", " + name + ", " + type);
        }
 
        // SELECT a la base de dades
        rs = UtilsSQLite.querySelect(conn, "SELECT * FROM warehouses;");
        System.out.println("Contingut de la taula:");
        while (rs.next()) {
            System.out.println("    " + rs.getInt("id") + ", " + rs.getString("name"));
        }
 
        // Actualitzar una fila
        UtilsSQLite.queryUpdate(conn, "UPDATE warehouses SET name=\"MediaMarkt\" WHERE id=2;");
 
        // Esborrar una fila
        UtilsSQLite.queryUpdate(conn, "DELETE FROM warehouses WHERE id=3;");
 
        // SELECT a la base de dades
        rs = UtilsSQLite.querySelect(conn, "SELECT * FROM warehouses;");
        System.out.println("Contingut de la taula modificada:");
        while (rs.next()) {
            System.out.println("    " + rs.getInt("id") + ", " + rs.getString("name"));
        }
 
        // Desconnectar
        UtilsSQLite.disconnect(conn);
    }
 
    static void initDatabase (String filePath) {
        // Connectar (crea la BBDD si no existeix)
        Connection conn = UtilsSQLite.connect(filePath);
 
        // Esborrar la taula (per si existeix)
        UtilsSQLite.queryUpdate(conn, "DROP TABLE IF EXISTS warehouses;");
 
        // Crear una nova taula
        UtilsSQLite.queryUpdate(conn, "CREATE TABLE IF NOT EXISTS warehouses ("
                                    + "	id integer PRIMARY KEY AUTOINCREMENT,"
                                    + "	name text NOT NULL);");
 
        // Afegir elements a una taula
        UtilsSQLite.queryUpdate(conn, "INSERT INTO warehouses (name) VALUES (\"Amazon\");");
        UtilsSQLite.queryUpdate(conn, "INSERT INTO warehouses (name) VALUES (\"El Corte Inglés\");");
        UtilsSQLite.queryUpdate(conn, "INSERT INTO warehouses (name) VALUES (\"Mecalux\");");
 
        // Desconnectar
        UtilsSQLite.disconnect(conn);
    }
}
java_sqlite.txt · Darrera modificació: 2022/11/23 18:18 per albert_palacios_jimenez