This document in English.
Le pilote SQLite-JDBC fait partie d’une Série d’applications nous permettant de vous proposer des services innovants en logiciels libres.
Il est né d’un fork de xerial sqlite-jdbc suite à un refus de fusionner une demande de changement pour rendre le pilote SQLite compatible avec JDBC 4.1.
Ce pilote vous permet d’utiliser un logiciel compatible avec JDBC 4.1 et la base de données SQLite.
Etant un logiciel libre je vous encourage:
Bref, à participer au developpement de cette extension.
Car c’est ensemble que nous pouvons rendre le Logiciel Libre plus intelligent.
Son fonctionnement ne diffère pas vraiment du pilote d’origine et voici les modifications qui ont été nécessaires :
java.sql.ResultSet
) est mis en cache lors de l’exécution de requêtes SQL INSERT
ou REPLACE
par les méthodes :
java.sql.Statement.executeUpdate (String sql, int autoGeneratedKeys)
java.sql.Statement.executeUpdate (String sql, String[] columnNames)
java.sql.PreparedStatement.executeUpdate()
si les options nécessaires lors de sa création ont été fournies.INSERT
ou REPLACE
seront complétées par la clause RETURNING
à laquelle sont ajoutées les options nécessaires pour obtenir le jeu de résultats mis en cache.executeUpdate()
, est renvoyé lors de l’appel de la méthode java.sql.Statement.getGeneratedKeys()
.Devoir compléter les commandes SQL INSERT
et REPLACE
afin de pouvoir suivre l’API JDBC 4.1 peut paraître au premier abord incongru. Mais en fait c’est la solution implémentée dans le pilote IBM DB2 v11.5 (ie: il suffixe les commandes SQL INSERT
avec SELECT FROM
). Je pense que la même chose peut être vraie pour tous les pilotes JDBC 4.1 dont la base de données n’est pas écrite en Java et en tout cas ce n’est qu’un détail d’implémentation.
Ces modifications concernent uniquement le fonctionnement interne du pilote et ne sont pas visibles. En revanche, pour les rendre fonctionnels il a fallu modifier certaines méthodes d’accès au driver JDBC SQLite.
Vous trouverez la description de cette nouvelle API dans la section suivante.
Voici la liste des méthodes Java modifiées afin de supporter JDBC 4.1:
java.sql.DatabaseMetaData.supportsGetGeneratedKeys()
répond true
.java.sql.DatabaseMetaData.generatedKeyAlwaysReturned()
répond false
.java.sql.Statement.executeUpdate(String sql, int autoGeneratedKeys)
fonctionne comme suit :
java.sql.Statement.RETURN_GENERATED_KEYS
et que la commande SQL commence par INSERT
ou REPLACE
et qu’elle ne comprend qu’une seule commande SQL alors les enregistrements affectés par la commande SQL seront accessibles par la méthode java.sql.Statement.getGeneratedKeys()
(toutes les colonnes de la table seront renvoyées).getGenerateKeys()
ce qui permet d’entrelacer les requêtes avant de devoir récupérer les enregistrements à l’aide de getGeneratedKeys()
…java.sql.Statement.executeLargeUpdate(String sql, int autoGeneratedKeys)
fonctionne comme la précédente…java.sql.Statement.executeUpdate(String sql, String[] columnNames)
vous permet d’obtenir uniquement les columnNames demandés dans getGeneratedKeys()
.java.sql.Statement.executeLargeUpdate(String sql, String[] columnNames)
fonctionne comme la précédente…java.sql.Statement.executeUpdate(String sql, int[] columnIndex)
n’est pas prise en charge.java.sql.Statement.executeLargeUpdate(String sql, int[] columnIndex)
n’est pas prise en charge.java.sql.Statement.execute(String sql, int autoGeneratedKeys)
n’est pas opérationnelle, elle efface tout jeu de résultats mis en cache et appelle execute(String sql)
. Vous devez utiliser les méthodes executeUpdate(String sql, int autoGeneratedKeys)
puis getGeneratedKeys()
.java.sql.Statement.execute(String sql, String[] columnNames)
n’est pas opérationnelle, elle efface tout jeu de résultats mis en cache et appelle execute(String sql)
. Vous devez utiliser les méthodes executeUpdate(String sql, String[] columnNames)
puis getGeneratedKeys()
.java.sql.Statement.execute(String sql, int[] columnIndex)
n’est pas prise en charge.java.sql.Connection.prepareStatement(String sql, int autoGeneratedKeys)
fonctionne de la même manière que executeUpdate(String sql, int autoGeneratedKeys)
concernant l’utilisation de getGeneratedKeys()
qui doit cependant être accédé après chaque appel à la Méthode executeUpdate()
ou executeLargeUpdate()
.java.sql.Connection.prepareStatement(String sql, String[] columnNames)
fonctionne de la même manière que executeUpdate(String sql, String[] columnNames)
concernant l’utilisation de getGeneratedKeys()
qui doit cependant être accédé après chaque appel à la méthode executeUpdate()
ou executeLargeUpdate()
.java.sql.Connection.prepareStatement(String sql, int[] columnIndex)
n’est pas prise en charge.java.sql.PreparedStatement.executeUpdate()
permet d’accéder à la méthode getGeneratedKeys()
si la requête préparée a été créée avec les options nécessaires. La méthode getGeneratedKeys()
doit cependant être accédée après chaque appel à la méthode executeUpdate()
ou executeLargeUpdate()
.java.sql.PreparedStatement.executeLargeUpdate()
fonctionne comme la précédente…java.sql.PreparedStatement.execute()
n’est pas opérationnelle, elle efface tout jeu de résultats mis en cache et appelle execute()
. Vous devez utiliser les méthodes executeUpdate()
puis getGeneratedKeys()
.java.sql.PreparedStatement.executeQuery()
n’est pas opérationnelle, elle efface tout jeu de résultats mis en cache et appelle executeQuery()
. Vous devez utiliser les méthodes executeUpdate()
puis getGeneratedKeys()
.Je tiens à souligner que ce nouveau mode de fonctionnement du pilote n’est pas tout à fait le même que celui utilisé dans le pilote xerial. Cela peut nécessiter la modification de certaines requêtes SQL dans vos programmes.
Mais il vous assure que son utilisation respecte les standards JDBC 4.1.
Ce nouveau pilote va vous apporter de nombreux avantages:
INSERT
multi-lignes, cela permet des insertions massives et rapides dans la base de données avec seulement deux méthodes JDBC (produisant une seule requête SQL) executeUpdate()
puis getGeneratedKeys()
. Et ce sont les méthodes recommandées par JDBC pour exécuter les commandes SQL INSERT
, UPDATE
, DELETE
…Télécharger l’archive jar et faite en ce qu’il vous plait.