Publié le 02/04/2014
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
0 commentaires

Faire des requetes dans une table SQLite

La base de données SQLite est le principale moteur Sql sur les smartphones. Le langage JAVA étant souvent utilisé sur Android, voyons comment combiner le moteur Sql avec notre langage préféré.

Charger le driver SQLite pour JAVA

La spécificité du moteur SQLite est la simplicité de son architecture. Pour utiliser les bases de données, il suffit d'inclure le driver SQLite à son application. Par exemple les étapes à suivre avec JAVA et Netbeans:

Charger le driver: se rendre sur la page sqlite4java, en plus de son propre driver, la page recense les drivers Sqlite les plus populaires,
Inclure la lib au projet: sous Netbeans, click droit sur le projet, sélectionner properties puis libraries/add Jar

Créer une table SQLite

Le mécanisme de connexion et de requête Sql avec Sqlite est le même que celui en Mysql ou un autre moteur de base de donnée d'ailleurs. Après avoir sélectionner le driver, une connexion est établit avec la base de données puis les requêtes Sql sont envoyés au fur et à mesure.
Pour l'exemple, créons une table animals contenant les champs suivants:
ANI_NAME: nom de l'animal de type TEXT,
ANI_KIND
: race de type TEXT,
ANI_AGE: age de l'animal de type NUMERIC,

Pour la création de la table Animals, les types des champs sont génériques (TEXT, NUMERIC, ...). Il est tout à fait possible d'affiner la taille et le type de champs comme on le ferait en MySql. Je vous invite à consulter la documentation sur le site sqlite.org.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
 
/**
 * Utiliser SQLite avec JAVA
 * @see http://www.fobec.com/java/1142/faire-requetes-dans-une-table-sqlite.html
 * @author Fobec 04/2014
 */
public class SqliteDataBase {
 
     .....
 
    /**
     * Créer la table Animals
     */
    public void createTable() {
        this.connect();
        if (this.connection != null) {
            try {
                String SQL = "CREATE TABLE TB_ANIMALS (ANI_NAME TEXT NOT NULL"
                        + ",ANI_KIND TEXT,ANI_AGE NUMERIC);";
                Statement stt = this.connection.createStatement();
                stt.executeUpdate(SQL);
            } catch (SQLException ex) {
                Logger.getLogger(SqliteDataBase.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}

Insérer puis sélectionner des données

Les mécanismes d'insertion et de sélection de données dans SQLite sont à nouveau les memes que pour les autres bases de données. Pour l'exemple de cet article, voyons comment:
- insérer: 4 nouveaux animaux de type chat et chien,
- sélectionner: sélectionner uniquement les animaux de type chat puis afficher le contenu dans la console.

Arretons les discours, copier puis coller la class dans votre editeur Java préféré.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
 
/**
 * Utiliser SQLite avec JAVA
 *
 * @see http://www.fobec.com/java/1142/faire-requetes-dans-une-table-sqlite.html
 * @author Fobec 04/2014
 */
public class SqliteDataBase {
 
    private Connection connection;
    private final String DB_PATH = "c:";
    private final String DB_NAME = "animals.db";
 
    /**
     * Se connecter
     */
    public void connect() {
        try {
            Class.forName("org.sqlite.JDBC");
            String file = this.DB_PATH + this.DB_NAME;
            this.connection = DriverManager.getConnection("jdbc:sqlite:" + file);
        } catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(SqliteDataBase.class.getName()).log(Level.SEVERE, null, ex);
            this.connection = null;
        }
    }
 
    /**
     * Fermer la connexion
     */
    public void close() {
        try {
            this.connection.close();
        } catch (SQLException ex) {
            Logger.getLogger(SqliteDataBase.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
 
    /**
     * Créer la table Animals
     */
    public void createTable() {
        this.connect();
        if (this.connection != null) {
            try {
                String SQL = "CREATE TABLE TB_ANIMALS (ANI_NAME TEXT NOT NULL"
                        + ",ANI_KIND TEXT,ANI_AGE NUMERIC);";
                Statement stt = this.connection.createStatement();
                stt.executeUpdate(SQL);
            } catch (SQLException ex) {
                Logger.getLogger(SqliteDataBase.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
 
    /**
     * Insérer une ligne dans la table
     * @param name String
     * @param kind String
     * @param age int
     */
    public void insert(String name, String kind, int age) {
        if (this.connection == null) {
            this.connect();
        }
 
        try {
            String SQL = "INSERT INTO TB_ANIMALS VALUES(?,?,?);";
            PreparedStatement ins_stmt = connection.prepareStatement(SQL);
 
            ins_stmt.setString(1, name);
            ins_stmt.setString(2, kind);
            ins_stmt.setInt(3, age);
 
            ins_stmt.executeUpdate();
        } catch (SQLException ex) {
            Logger.getLogger(SqliteDataBase.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
 
    /**
     * Sélectionner tous les chats
     */
    public void select_Cats() {
        if (this.connection == null) {
            this.connect();
        }
 
        try {
            String SQL="SELECT * FROM TB_ANIMALS WHERE ANI_KIND=?";
            PreparedStatement stmt = connection.prepareStatement(SQL);
            stmt.setString(1, "chat");
            ResultSet rs = stmt.executeQuery();
 
            System.out.println("Les animaux de race chat:");
            while (rs.next()) {
                System.out.println("nom:"+rs.getString("ANI_NAME")+" age:"+rs.getInt("ANI_AGE"));
            }
 
            stmt.close();
        } catch (SQLException ex) {
            Logger.getLogger(SqliteDataBase.class.getName()).log(Level.SEVERE, null, ex);
        }
 
    }
 
    /**
     * Exemple
     * @param args 
     */
    public static void main(String[] args) {
        SqliteDataBase sqliteDataBase = new SqliteDataBase();
        sqliteDataBase.createTable();
        sqliteDataBase.insert("Clochette", "chat", 3);
        sqliteDataBase.insert("Matou", "chat", 5);
        sqliteDataBase.insert("Sacha", "chien", 3);
        sqliteDataBase.insert("Baby", "chien", 8);
        sqliteDataBase.select_Cats();
    }
}

Utiliser le moteur SQLite avec JAVA

Est-ce un bon choix ?
Du point de vue pratique, SQLite est parfait, il suffit d'ajouter une petite librairie pour que l'application dispose d'une base de donnée. Avec MySql par exemple, il aurait fallut en plus installer puis configurer une serveur de base de donnée.
Au niveau de l'optimisation, on peut pinailler sur l'absence de fonctions incluses par rapport à MySQL comme la compression automatique ou encore l'explication de requete. Mais bon, pour un projet avec des volumes de 500 000 lignes et une une base de quelques Go, le moteur SQLite fera parfaitement l'affaire.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
java - class
Mise a jour
02/04/2014
Visualisation
vu 7799 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 267 articles
|BIO_PSEUDO|
Commentaires récents

Publié par MasterMbg dans java

Salut! merci pour le code, si tu y ajoutais des commentaires avant chaque module ce serait encore plus facilitant! merci infiniment...

Publié par stux dans java

Génial.. C'est exactement ce que je cherchais.

Publié par piranhas dans java

bonjour, je veux te signaler que la piece jointe est fausse car il n\'y pas de liaison entre le modele et la vue, toutes le information passe par le controlleur.

Publié par eldiablo dans java

Malheureusement, ce code n'est pas correct.
Cette classe accepte des dates comme : "31/00/2011"

Publié par olibul dans CMS

var
fn: string;

begin

Result:= False;
if strFont <> \'\' then begin

// Tester le nom: si affectation directe à TFont, modifications aléatoires...