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.