Publié le 02/04/2014
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
3 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 5941 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 261 articles
|BIO_PSEUDO|
Commentaires récents

Publié par vieux dans CMS

et comment ce le procurent ton ?

Publié par stam dans tuto

Le code est interessant. Que doit contenir le fichier index ?

Publié par sakhr dans tuto

merci b c pour les plusieurs tailles d'images

Publié par Marcos dans java

Bon travail , mais il a quelque chose d'etrange ! Je devais faire l'interface publique de classe avec des variables de position separees Position NORMAL = null; Position RIGHT = null; et posit...

Publié par snoop dans java

simple, rapide et effectif du premier coup.
Merci!