Omet navegació

5.3 - Exemple

A continuació posarem un exemple molt senzill, el dels empleats, en el qual primer crearem la taula per a guardar les dades, després introduirem les dades, les modificarem, i per últim les consultarem. D'aquesta manera podrem veure tots els exemples de sentències SQL.

Les dades són les mateixes que en altres ocasions:

num nom depart
edat
sou
1 Andreu 10 32 1000.00
2 Bernat 20 28 1200.00
3 Claudia 10 26 1100.00
4 Damià 10 40 1500.00

La clau principal serà el camp num de tipus enter. El nom serà de text, el departament i l'edat també enters, mentre que el sou serà real.

Per a no interferir entre tots, utilitzarem la Base de Dades SQLite, on cadascú guardarà en un fitxer seu les dades. Haureu de cuidar la ruta, que siga on voleu guardar la vostra Base de Dades. Si no poseu res en la ruta, es guardarà en el directori actiu, que és l'arrel del projecte.

Creació de la taula

La sentència SQL que crea la taula en una Base de Dades SQLite serà així:

CREATE TABLE EMPLEATS (
num INTEGER CONSTRAINT cp_emp PRIMARY KEY,
nom TEXT,
depart INTEGER,
edat INTEGER,
sou REAL );

Hem d'observar que el mètode del Statement a utilitzar és executeUpdate(), ja que la sentència de creació no torna res (no és un SELECT)

Copieu el següent codi en un fitxer Kotlin anomenat Exemple_4_21_EmpleatsCrearTaula.kt:

package exemples

import java.sql.DriverManager

fun main(args: Array<String>) {
    val url = "jdbc:sqlite:Empleats.sqlite"
    val con = DriverManager.getConnection(url)
    val st = con.createStatement()

    val sentSQL = "CREATE TABLE EMPLEAT(" +
            "num INTEGER CONSTRAINT cp_emp PRIMARY KEY, " +
            "nom TEXT, " +
            "depart INTEGER, " +
            "edat INTEGER, " +
            "sou REAL " +
            ")"

    st.executeUpdate(sentSQL)
    st.close();
    con.close()
}

Si voleu veure el resultat, podeu fer-ho des del DBeaver.
 

Inserció de dades

També volem introduir les dades que es poden veure a la taula anterior. Crearem un Statetement que reutilitzarem per anar escrivint totes les sentències INSERT. Recordeu que no és problema la reutilització si gastem el executeUpdate().
Copieu el següent codi en un fitxer Kotlin anomenat Exemple_4_22_EmpleatsInserir.kt:
package exemples

import java.sql.DriverManager

fun main(args: Array<String>) {
    val url = "jdbc:sqlite:Empleats.sqlite"
    val con = DriverManager.getConnection(url)
    val st = con.createStatement()

    st.executeUpdate("INSERT INTO EMPLEAT VALUES (1,'Andreu',10,32,1000.0)")

    st.executeUpdate("INSERT INTO EMPLEAT VALUES (2,'Bernat',20,28,1200.0)")

    st.executeUpdate("INSERT INTO EMPLEAT VALUES (3,'Clàudia',10,26,1100.0)")

    st.executeUpdate("INSERT INTO EMPLEAT VALUES (4,'Damià',10,40,1500.0)")

    st.close()
    con.close()
}
Ara sí que és un bon moment per a consultar la taula des del DBeaver. Si en ell ja teníeu oberta la taula, haureu de refrescar.

 

Modificació de dades

Ara modificarem les dades. Senzillament augmentem el sou de tots els empleats en un 5%. I també modifiquem el departament de l'empleat 3, posant-li el departament 20.

Copieu el següent codi en un fitxer Kotlin anomenat Exemple_4_23_EmpleatsModificar.kt:

ackage exemples

import java.sql.DriverManager

fun main(args: Array<String>) {
    val url = "jdbc:sqlite:Empleats.sqlite"
    val con = DriverManager.getConnection(url)
    val st = con.createStatement()

    st.executeUpdate("UPDATE EMPLEAT SET sou = sou * 1.05")

    st.executeUpdate("UPDATE EMPLEAT SET depart=20 WHERE num = 3")

    st.close()
    con.close()
}

 

Consultar les dades

Vegem de quina manera podem mostrar per pantalla tots els empleats del que cobren més de 1.100€. Ara el mètode que utilitzarem és executeQuery(), ja que aquesta consulta sí que torna dades.

Copieu el següent codi en un fitxer Kotlin anomenat Exemple_4_24_EmpleatsConsultar.kt:

package exemples

import java.sql.DriverManager

fun main(args: Array<String>) {
    val url = "jdbc:sqlite:Empleats.sqlite"
    val con = DriverManager.getConnection(url)
    val st = con.createStatement()

    val sentenciaSQL = "SELECT * FROM EMPLEAT WHERE sou > 1100"
    val rs = st.executeQuery(sentenciaSQL)

    System.out.println("Núm. \tNom \tDep \tEdat \tSou")
    System.out.println("-----------------------------------------")

    while (rs.next()) {
        print("" + rs.getInt(1) + "\t")
        print(rs.getString(2) + "\t")
        print("" + rs.getInt(3) + "\t")
        print("" + rs.getInt(4) + "\t")
        println(rs.getDouble(5))
    }

    rs.close()
    st.close()
    con.close()
}

Podeu observar com es pot usar un bucle while per obtenir el valor de totes les files retornades. També podeu veure els diferents mètodes que retornen les dades de cada columna en funció del tipus: getInt()getString(), getDouble(), ...