Gestion et utilisation de la base de données SQLite 3
SQLite 3 est un système de gestion de base de données relationnelle embarqué très populaire. Grâce à sa légèreté, son absence de processus serveur dédié et le stockage des données dans un seul fichier, il constitue un choix idéal pour les applications mobiles, les systèmes embarqués, les petites applications de bureau ainsi que pour les environnements de développement locaux. La gestion et l'utilisation de SQLite 3 sont simples. Ce guide détaillé, à destination des utilisateurs de ServBay, explique comment gérer et exploiter efficacement SQLite 3 dans l’environnement ServBay, en abordant la vérification de l'installation, la connexion, les opérations de base, la sauvegarde et la restauration des données, l’optimisation des performances ainsi que les bonnes pratiques de sécurité.
Vue d’ensemble
ServBay, en tant qu’environnement local complet de développement web, intègre par défaut SQLite 3 et ses bibliothèques de développement associées. Vous pouvez donc accéder et manipuler SQLite 3 directement en ligne de commande ou via les différents langages de programmation pris en charge par ServBay (PHP, Node.js, Python, Go, etc.), sans installation supplémentaire requise. Cela simplifie grandement l’utilisation de SQLite 3 en local.
Installation et configuration de SQLite 3
SQLite 3 est intégré par défaut à ServBay ; aucune étape d’installation supplémentaire n’est donc nécessaire. L’exécutable et les bibliothèques nécessaires à SQLite 3 sont directement inclus dans le package ServBay.
Vérifier l’installation de SQLite 3
Pour vérifier rapidement l’accessibilité de SQLite 3 fourni par ServBay et afficher sa version, exécutez la commande suivante dans le terminal :
bash
sqlite3 --version
1
Si la commande renvoie un numéro de version de SQLite 3 (par exemple 3.41.2 2023-03-26 11:52:19 ...
), cela signifie que SQLite 3 est correctement intégré et prêt à l’emploi.
Création et connexion à une base de données SQLite 3
Une base SQLite 3 est, par essence, un simple fichier. Par défaut, ServBay recommande d’enregistrer vos fichiers de base de données dans le répertoire /Applications/ServBay/db/sqlite
, mais ce n’est pas une obligation : vous pouvez sélectionner un autre emplacement selon vos besoins projet. La création ou la connexion à la base se fait généralement via l’outil en ligne de commande sqlite3
ou via les bibliothèques dédiées des différents langages.
Connexion via l’outil en ligne de commande
L'outil sqlite3
est la méthode la plus directe pour gérer une base SQLite 3.
Créer ou ouvrir une base : Exécutez la commande suivante dans le terminal. Si le fichier de base n'existe pas à l'emplacement indiqué, la commande
sqlite3
le créera automatiquement ; s'il existe, elle établira la connexion à ce fichier.bashsqlite3 /Applications/ServBay/db/sqlite/servbay.db
1(Dans l’exemple, la base est nommée
servbay.db
pour illustrer le lien avec le produit ServBay.)Une fois à l’invite
sqlite>
, vous pouvez entrer des requêtes SQL ou utiliser les commandes internes commençant par des points (.commands
).Quitter SQLite 3 : Pour sortir, tapez la commande
.exit
à l’invitesqlite>
.sql.exit
1
Connexion depuis un langage de programmation
Les différents langages pris en charge par ServBay proposent chacun des bibliothèques pour se connecter et manipuler SQLite 3. Voici un exemple en PHP et un autre en Node.js.
Exemple PHP
ServBay intègre généralement l'extension SQLite 3 pour PHP (php-sqlite3
). Utilisez la classe native SQLite3
pour ouvrir la base.
php
<?php
// Spécifiez le chemin du fichier base de données, idéalement dans le dossier db/sqlite de ServBay
$database_file = '/Applications/ServBay/db/sqlite/servbay.db';
// Connexion à la base SQLite 3
// Le constructeur SQLite3 créera le fichier si besoin
$db = new SQLite3($database_file);
if (!$db) {
die("Impossible de se connecter à la base SQLite 3 : " . $db->lastErrorMsg());
}
echo "Connexion à SQLite 3 réussie : " . $database_file . "\n";
// Création de la table (si elle n’existe pas)
$create_table_sql = "CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE
)";
$db->exec($create_table_sql);
echo "La table 'users' a été vérifiée ou créée.\n";
// Insertion de données
$name = 'ServBay Demo User';
$email = 'demo@servbay.demo';
$insert_sql = $db->prepare('INSERT INTO users (name, email) VALUES (:name, :email)');
$insert_sql->bindValue(':name', $name, SQLITE3_TEXT);
$insert_sql->bindValue(':email', $email, SQLITE3_TEXT);
if ($insert_sql->execute()) {
echo "Insertion réussie.\n";
} else {
echo "Échec de l’insertion : " . $db->lastErrorMsg() . "\n";
}
// Requête de données
$query_sql = "SELECT id, name, email FROM users";
$result = $db->query($query_sql);
if ($result) {
echo "Résultats de la requête :\n";
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
echo "ID : " . $row['id'] . ", Nom : " . $row['name'] . ", Email : " . $row['email'] . "\n";
}
} else {
echo "Échec de la requête : " . $db->lastErrorMsg() . "\n";
}
// Fermeture de la connexion à la base
$db->close();
unset($db); // Libération des ressources
echo "Connexion à la base fermée.\n";
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Exemple Node.js
Pour utiliser SQLite 3 avec Node.js, installez d’abord le package npm sqlite3
. Depuis votre projet :
bash
npm install sqlite3
1
Vous pouvez ensuite utiliser cette bibliothèque dans votre code :
javascript
const sqlite3 = require('sqlite3').verbose();
const path = require('path');
// Spécifiez le chemin du fichier base pour assurer la compatibilité multiplateforme
const dbPath = path.join('/Applications/ServBay/db/sqlite', 'servbay.db');
// Connexion à la base
// Le fichier sera créé s’il n’existe pas
let db = new sqlite3.Database(dbPath, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, (err) => {
if (err) {
console.error('Impossible de se connecter à la base SQLite 3 :', err.message);
} else {
console.log('Connexion à la base de données réussie.');
}
});
// Exécution séquentielle
db.serialize(() => {
// Création de la table (si elle n’existe pas)
db.run(`CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE
)`, (err) => {
if (err) {
console.error('Échec de la création de table :', err.message);
} else {
console.log('La table "users" a été vérifiée ou créée.');
}
});
// Insertion de données
const name = 'ServBay Demo User';
const email = 'demo@servbay.demo';
db.run(`INSERT INTO users (name, email) VALUES (?, ?)`, [name, email], function(err) {
if (err) {
// SQLITE_CONSTRAINT correspond à une contrainte d’unicité
if (err.errno === 19) { // SQLITE_CONSTRAINT
console.warn(`L’utilisateur '${name}' (${email}) existe déjà, insertion ignorée.`);
} else {
console.error('Échec de l’insertion :', err.message);
}
} else {
console.log(`Insertion réussie, ID : ${this.lastID}`);
}
});
// Requête de données
db.all(`SELECT id, name, email FROM users`, [], (err, rows) => {
if (err) {
throw err;
}
console.log('Résultats de la requête :');
rows.forEach((row) => {
console.log(`ID : ${row.id}, Nom : ${row.name}, Email : ${row.email}`);
});
});
});
// Fermeture de la base
db.close((err) => {
if (err) {
console.error('Échec de la fermeture de la base :', err.message);
} else {
console.log('Connexion à la base fermée.');
}
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Remarque : En cas d’utilisation réelle, veillez à sécuriser le chemin du fichier de base et à bien gérer les erreurs ainsi que les accès concurrents.
Gestion de la base de données
Opérations SQL de base
Une fois connecté à la base SQLite 3, vous pouvez exécuter les commandes SQL classiques pour gérer vos données. Voici quelques exemples courants :
Créer une table : définir la structure des données.
sqlCREATE TABLE products ( product_id INTEGER PRIMARY KEY AUTOINCREMENT, product_name TEXT NOT NULL, price REAL DEFAULT 0.00 );
1
2
3
4
5Insérer des données : ajouter de nouveaux enregistrements.
sqlINSERT INTO products (product_name, price) VALUES ('ServBay T-Shirt', 19.99); INSERT INTO products (product_name, price) VALUES ('ServBay Sticker Pack', 4.99);
1
2Interroger les données : lire les enregistrements.
sqlSELECT * FROM products; SELECT product_name, price FROM products WHERE price > 10.00;
1
2Mettre à jour les données : modifier des enregistrements existants.
sqlUPDATE products SET price = 24.99 WHERE product_name = 'ServBay T-Shirt';
1Supprimer des données : retirer un ou plusieurs enregistrements.
sqlDELETE FROM products WHERE product_id = 1; DELETE FROM products; -- Supprimer toutes les données de la table
1
2Supprimer une table : effacer toute la table et ses données.
sqlDROP TABLE products;
1
Ces instructions peuvent être exécutées directement dans le client en ligne de commande sqlite3
ou via des bibliothèques SQLite depuis un langage de programmation.
Sauvegarde et restauration
La sauvegarde et la restauration d’une base SQLite 3 sont très simples car toute la base correspond à un unique fichier.
Sauvegarder la base
La manière la plus simple de sauvegarder consiste simplement à copier le fichier de la base. ServBay recommande d’enregistrer les sauvegardes dans /Applications/ServBay/backup/sqlite
pour une meilleure organisation.
Exemple de sauvegarde via la ligne de commande :
bash
# Créer le répertoire de sauvegarde (si nécessaire)
mkdir -p /Applications/ServBay/backup/sqlite
# Copier le fichier base pour sauvegarde
# Inclure la date ou un horodatage dans le nom du fichier permet d’identifier chaque version
cp /Applications/ServBay/db/sqlite/servbay.db /Applications/ServBay/backup/sqlite/servbay_$(date +%Y%m%d_%H%M%S).db
1
2
3
4
5
6
2
3
4
5
6
Vous pouvez aussi utiliser la commande .backup
de sqlite3
pour réaliser une sauvegarde "à chaud" (lorsque la base est ouverte), mais pour le développement local, une simple copie est en général suffisante.
Restaurer la base
Pour restaurer la base, il suffit de recopier le fichier de sauvegarde à l’emplacement d’origine. Avant cela, veillez à stopper toute application ou service ServBay susceptible d’utiliser la base pour éviter tout risque de verrouillage ou d’incohérence des données.
bash
# Supposons que vous souhaitez restaurer la sauvegarde la plus récente
# Identifiez le dernier fichier sauvegardé ex : servbay_20231027_103000.db
LATEST_BACKUP=$(ls -t /Applications/ServBay/backup/sqlite/servbay_*.db | head -n 1)
# Vérifiez la présence de la sauvegarde
if [ -z "$LATEST_BACKUP" ]; then
echo "Erreur : aucune sauvegarde SQLite trouvée."
exit 1
fi
echo "Fichier de sauvegarde à restaurer : $LATEST_BACKUP"
# Arrêtez les services ou applis concernés si besoin...
# Par exemple : assurez-vous qu’aucun processus PHP utilisant la base ne fonctionne
# Recopier la sauvegarde en remplacement du fichier base
cp "$LATEST_BACKUP" /Applications/ServBay/db/sqlite/servbay.db
echo "Restauration de la base terminée."
# Redémarrez les services ou applis concernés...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Important : Si la base est en cours d’écriture, une simple copie du fichier peut entraîner des corruptions. Il est préférable d’arrêter complètement les accès ou d'utiliser les API de sauvegarde à chaud de SQLite via les bibliothèques pour des cas complexes.
Optimisation des performances
SQLite 3 offre plusieurs commandes PRAGMA et stratégies d’indexation pour optimiser ses performances.
Optimisation par index
Créer des index sur les colonnes souvent utilisées dans les filtres (WHERE
), les jointures (JOIN
) ou les tris (ORDER BY
) permet d’accélérer considérablement les requêtes.
sql
-- Créer un index unique sur la colonne email de users
CREATE UNIQUE INDEX idx_users_email ON users(email);
-- Créer un index simple sur product_name de products
CREATE INDEX idx_products_name ON products(product_name);
1
2
3
4
5
2
3
4
5
Optimisation des requêtes
La commande EXPLAIN QUERY PLAN
permet d’analyser la façon dont SQLite exécute une requête, et d’identifier les éventuels goulets d’étranglement.
sql
EXPLAIN QUERY PLAN SELECT * FROM users WHERE email = 'demo@servbay.demo';
EXPLAIN QUERY PLAN SELECT product_name FROM products ORDER BY price DESC;
1
2
2
Analysez la sortie pour vérifier l’utilisation des index ou la présence d’un "scan table" (parcours complet de la table).
Optimisation de la configuration (PRAGMA)
Les commandes PRAGMA contrôlent la configuration d’exécution de SQLite 3. Voici les principales options liées aux performances :
PRAGMA journal_mode;
/PRAGMA journal_mode = mode;
: contrôle du mode du journal. Le modeWAL
(Write-Ahead Logging) offre généralement de meilleures performances en cas d'accès simultanés (écritures/lectures concurrents). Par défaut, cela peut êtreDELETE
ouTRUNCATE
. Passez le mode enWAL
pour réduire les blocages à l’écriture.sqlPRAGMA journal_mode = WAL;
1PRAGMA synchronous;
/PRAGMA synchronous = niveau;
: définit le niveau de synchronisation avec le système de fichiers.OFF
(ou0
) maximise la rapidité mais peut entraîner une perte de données en cas de crash système.FULL
(ou1
) ouNORMAL
(ou2
) assurent une meilleure sécurité, au détriment des performances. Pour le développement local,OFF
est souvent accepté pour de meilleures performances.sqlPRAGMA synchronous = OFF;
1PRAGMA cache_size;
/PRAGMA cache_size = pages;
: définit le nombre de pages de base mises en cache en mémoire. L’augmentation du cache réduit les accès disque mais augmente la consommation mémoire.sqlPRAGMA cache_size = -20000; -- Fixe le cache à 20Mo (négatif = en Ko)
1
Remarque : Les paramètres PRAGMA s’appliquent uniquement à la connexion en cours. Pour une configuration persistante, appliquez-les systématiquement lors de la connexion ou au lancement de votre application.
Sécurité
Bien que SQLite 3 soit un moteur de base de données par fichier, certaines précautions de sécurité sont recommandées même en développement local.
Permissions sur les fichiers
Assurez-vous que les permissions du fichier base SQLite sont correctement configurées pour n’accorder l’accès qu’à l’utilisateur ou aux processus de développement ServBay associés, afin d’éviter tout accès non autorisé.
bash
# Exemple : restreindre la lecture et l’écriture au propriétaire courant
# Adaptez selon l’utilisateur effectif de ServBay
chmod 600 /Applications/ServBay/db/sqlite/servbay.db
1
2
3
2
3
Chiffrement des données
SQLite 3 ne propose pas le chiffrement des données en natif. Si vous manipulez des données sensibles en développement local, envisagez des extensions comme SQLCipher pour ajouter le support du chiffrement. Cela implique d’installer des bibliothèques supplémentaires et d’utiliser des API spécifiques pour manipuler des bases chiffrées.
Problèmes courants et solutions
Impossible de se connecter à SQLite 3
- Vérifiez le chemin du fichier base : Assurez-vous que le chemin spécifié dans votre connexion ou votre commande est correct, et que le fichier existe bien à cet emplacement.
- Vérifiez les permissions : Confirmez que l’utilisateur ServBay ou votre utilisateur terminal dispose bien des permissions lecture/écriture sur le fichier. Vérifiez-les avec
ls -l /Applications/ServBay/db/sqlite/servbay.db
et ajustez-les viachmod
ouchown
selon le besoin. - Fichier base corrompu ? Essayez de vous connecter à la base avec l’outil
sqlite3
. Si vous obtenez une erreur, il est possible que le fichier soit endommagé : restaurez alors à partir d’une sauvegarde.
Problèmes de verrouillage (Database is locked)
Lors d’opérations d’écriture, SQLite 3 verrouille le fichier base. Si plusieurs processus essaient d’écrire ou, selon le mode, de lire simultanément, des erreurs de verrouillage peuvent survenir.
Vérifiez les accès concurrents : Assurez-vous qu’aucune autre application ou instance de serveur/script de développement n’accède simultanément au même fichier base.
Activez le mode WAL : Utiliser
PRAGMA journal_mode = WAL;
améliore la gestion concurrente et limite les blocages. Appliquez ce PRAGMA dès la connexion à la base.Gérez les erreurs de verrouillage : Prévoyez dans votre code une gestion des erreurs de verrouillage : au lieu d’arrêter immédiatement, implémentez une politique de nouvelle tentative après temporisation. La plupart des bibliothèques SQLite permettent de configurer un délai ("busy timeout") qui prolonge automatiquement les tentatives avant de retourner une erreur.
Par exemple, avec la bibliothèque Node.js
sqlite3
:javascriptdb.configure("busyTimeout", 5000); // Fixe le délai d’attente à 5000ms (5s)
1En PHP, la classe
SQLite3
ne propose pas directement cette méthode. Prévoyez alors un mécanisme de répétition dans votre code applicatif ou, si disponible, utilisez la fonction bas niveausqlite_busy_timeout
.
Conclusion
ServBay est un environnement de développement web local conçu pour les développeurs, intégrant SQLite 3 de manière puissante et intuitive. Grâce à ce guide, vous savez désormais valider l’installation, créer et utiliser des bases SQLite 3, effectuer leur gestion courante, les sauvegarder/restaurer efficacement, optimiser leurs performances et appliquer les mesures de sécurité de base dans l’environnement ServBay. Léger et pratique, SQLite 3 s’avère être un excellent choix pour le développement local, les tests et les petits projets. Associé à la chaîne d’outils ServBay (PHP, Node.js, Python, Go, serveurs web & bases diverses), il vous permet de concevoir et tester des applications complexes en toute simplicité.