Premiers pas avec Fast SQL
-
Installez le package
Fenêtre de terminal npm i @capgo/capacitor-fast-sqlFenêtre de terminal pnpm add @capgo/capacitor-fast-sqlFenêtre de terminal yarn add @capgo/capacitor-fast-sqlFenêtre de terminal bun add @capgo/capacitor-fast-sql -
Synchronisation avec les projets natifs
Fenêtre de terminal npx cap syncFenêtre de terminal pnpm cap syncFenêtre de terminal yarn cap syncFenêtre de terminal bunx cap sync -
Configurer les plateformes
Autoriser l’accès au réseau local dans
Info.plist:ios/App/App/Info.plist <key>NSAppTransportSecurity</key><dict><key>NSAllowsLocalNetworking</key><true/></dict>Android
Section titled “Android”Ajoutez une exception en texte clair pour le trafic localhost :
android/app/src/main/AndroidManifest.xml <application android:networkSecurityConfig="@xml/network_security_config">...</application>###Web Installez sql.js pour le stockage Web de secours :
Terminal window npm install sql.js
Pourquoi Fast SQL ?
Section titled “Pourquoi Fast SQL ?”Fast SQL évite une sérialisation lourde des ponts en utilisant un transport HTTP local vers SQLite natif, ce qui est beaucoup plus rapide pour les jeux de résultats volumineux et les écritures de style synchronisation.
Utilisation de base
Section titled “Utilisation de base”import { FastSQL, IsolationLevel, KeyValueStore } from '@capgo/capacitor-fast-sql';
const db = await FastSQL.connect({ database: 'myapp', encrypted: false, readOnly: false,});
await db.execute(` CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT UNIQUE, created_at INTEGER DEFAULT (strftime('%s', 'now')) )`);
await db.run('INSERT INTO users (name, email) VALUES (?, ?)', ['John', 'john@example.com']);const users = await db.query('SELECT * FROM users');Méthodes de connexion principales
Section titled “Méthodes de connexion principales”execute(statement, params?)-> renvoie le résultat SQL completquery(statement, params?)-> renvoierowsrun(statement, params?)-> renvoie{ rowsAffected, insertId }executeBatch(operations)-> renvoie un tableau de résultats
import { type SQLBatchOperation } from '@capgo/capacitor-fast-sql';
const rows = await db.query('SELECT * FROM users WHERE email LIKE ?', ['john%']);
const batch: SQLBatchOperation[] = [ { statement: 'INSERT INTO users (name, email) VALUES (?, ?)', params: ['Alice', 'alice@acme.dev'] }, { statement: 'INSERT INTO users (name, email) VALUES (?, ?)', params: ['Bob', 'bob@acme.dev'] },];await db.executeBatch(batch);Transactions
Section titled “Transactions”assistant de rappel
Section titled “assistant de rappel”await db.transaction(async (tx) => { await tx.run('UPDATE accounts SET balance = balance - 100 WHERE id = ?', [1]); await tx.run('UPDATE accounts SET balance = balance + 100 WHERE id = ?', [2]);});contrôle explicite
Section titled “contrôle explicite”import { IsolationLevel } from '@capgo/capacitor-fast-sql';
await db.beginTransaction(IsolationLevel.Serializable);try { await db.run('UPDATE wallets SET points = points - 1 WHERE user_id = ?', [42]); await db.commit();} catch (error) { await db.rollback(); throw error;}Niveaux d’isolement pris en charge :
ReadUncommittedReadCommittedRepeatableReadSerializable
Données binaires (BLOB)
Section titled “Données binaires (BLOB)”const imageData = new Uint8Array([0xFF, 0xD8, 0xFF, 0xE0]);await db.run('INSERT INTO assets (name, data) VALUES (?, ?)', ['avatar', imageData]);
const rows = await db.query('SELECT data FROM assets WHERE name = ?', ['avatar']);const retrieved = rows[0].data; // Uint8ArrayModes de cryptage et de lecture seule
Section titled “Modes de cryptage et de lecture seule”const secureDb = await FastSQL.connect({ database: 'secure_db', encrypted: true, encryptionKey: 'replace-with-a-strong-key',});
const readOnlyDb = await FastSQL.connect({ database: 'public_db', readOnly: true,});Sur Android, le mode chiffré utilise SQLCipher ; inclure la dépendance dans l’application build.gradle.
KeyValueStore
Section titled “KeyValueStore”KeyValueStore est un wrapper pratique pour les données clé/valeur mobiles.
import { KeyValueStore } from '@capgo/capacitor-fast-sql';
const kv = await KeyValueStore.open({ database: 'kv', store: 'session', encrypted: true, encryptionKey: 'super-secret-key',});
await kv.set('session', { token: 'abc', expiresAt: Date.now() + 3600_000 });const session = await kv.get('session');await kv.has('session');await kv.keys();await kv.remove('session');await kv.clear();await kv.close();Cycle de vie de la connexion
Section titled “Cycle de vie de la connexion”await FastSQL.disconnect('myapp');await FastSQL.disconnectAll();const openDatabases = FastSQL.getOpenDatabases();const same = FastSQL.getConnection('myapp');Gestion des erreurs
Section titled “Gestion des erreurs”try { await FastSQL.connect({ database: 'myapp' }); await db.query('SELECT * FROM unknown_table');} catch (error) { console.error('Fast SQL error:', error);}Modèles SQL courants
Section titled “Modèles SQL courants”Vérifiez si la table existe
Section titled “Vérifiez si la table existe”const result = await db.query( "SELECT name FROM sqlite_master WHERE type='table' AND name=?", ['users']);
const tableExists = result.length > 0;Obtenir le schéma de la table
Section titled “Obtenir le schéma de la table”const schema = await db.query('PRAGMA table_info(users)');console.log('Columns:', schema);Compter les lignes
Section titled “Compter les lignes”const result = await db.query('SELECT COUNT(*) as count FROM users');const count = result[0].count;Pagination
Section titled “Pagination”const pageSize = 20;const page = 1;const offset = (page - 1) * pageSize;
const users = await db.query( 'SELECT * FROM users ORDER BY created_at DESC LIMIT ? OFFSET ?', [pageSize, offset]);## Conseils sur les performances
- Utilisez les transactions pour plusieurs opérations - beaucoup plus rapidement que les validations individuelles
- Utilisez les opérations par lots pour les insertions en masse - plus efficaces que les boucles
- Créer des index sur les colonnes fréquemment interrogées
- Utiliser les instructions préparées avec des paramètres (?) - empêche l’injection SQL et améliore les performances
- Utilisez directement le protocole HTTP pour les très grands ensembles de résultats
- Fermer les connexions lorsque vous ne vous en servez pas pour libérer des ressources
Prochaines étapes
Section titled “Prochaines étapes”Consultez le tutoriel complet pour connaître les modèles avancés, notamment :
- Architecture des services de base de données
- Systèmes migratoires
- Synchroniser les moteurs
- Requêtes et jointures complexes
- Optimisation des performances