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 6720 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 261 articles
|BIO_PSEUDO|
Commentaires récents

Publié par jmc dans CMS

Lien sur mon site, rubriques Téléchargez http://users.skynet.be/jean-marie.capellen/

Publié par brayan dans logiciel

je vous retour modem ip pour configury net firwell

Publié par jmc dans CMS

Autre lien de chargement : http://www.fobec.com/protec/logiciels2/encadre.php3?id_log=217&cat=VBureautique

Publié par rsuinux dans php5

Merci pour cet article.
Cela m'a debloque pour sqlite3 sur openwrt :)
Cordialement.

Publié par arthur dans java

essaye avec une while, cela devrais marcher. mais après je ne sais pas comment paramétrer. c'est toi qui voit