Iniziare
-
Installa il pacchetto
Terminal window npm i @capgo/capacitor-data-storage-sqliteTerminal window pnpm add @capgo/capacitor-data-storage-sqliteTerminal window yarn add @capgo/capacitor-data-storage-sqliteTerminal window bun add @capgo/capacitor-data-storage-sqlite -
Sincronizza con i progetti nativi
Terminal window npx cap syncTerminal window pnpm cap syncTerminal window yarn cap syncTerminal window bunx cap sync -
Configura il plugin
Esempio di Archiviazione Base:
import { CapacitorDataStorageSqlite } from '@capgo/capacitor-data-storage-sqlite';// Apri un database di archiviazioneawait CapacitorDataStorageSqlite.openStore({database: 'myapp_storage'});// Memorizza datiawait CapacitorDataStorageSqlite.set({key: 'user_preferences',value: JSON.stringify({ theme: 'dark' })});Esempio di Archiviazione Crittografata:
// Apri archiviazione crittografataawait CapacitorDataStorageSqlite.openStore({database: 'secure_storage',encrypted: true,mode: 'encryption'});// Memorizza dati sensibiliawait CapacitorDataStorageSqlite.set({key: 'api_token',value: 'secret_token_value'});Nessuna configurazione aggiuntiva richiesta per iOS.
Nessuna configurazione aggiuntiva richiesta per Android.
-
Operazioni base
import { CapacitorDataStorageSqlite } from '@capgo/capacitor-data-storage-sqlite';// Imposta un valoreawait CapacitorDataStorageSqlite.set({key: 'username',value: 'john_doe'});// Ottieni un valoreconst { value } = await CapacitorDataStorageSqlite.get({key: 'username'});console.log('Username:', value); // "john_doe"// Rimuovi un valoreawait CapacitorDataStorageSqlite.remove({key: 'username'});// Cancella tutti i datiawait CapacitorDataStorageSqlite.clear();// Verifica se la chiave esisteconst { result } = await CapacitorDataStorageSqlite.iskey({key: 'username'});console.log('La chiave esiste:', result); // true o false// Ottieni tutte le chiaviconst { keys } = await CapacitorDataStorageSqlite.keys();console.log('Tutte le chiavi:', keys);// Ottieni tutti i valoriconst { values } = await CapacitorDataStorageSqlite.values();console.log('Tutti i valori:', values); -
Utilizzo avanzato
import { CapacitorDataStorageSqlite } from '@capgo/capacitor-data-storage-sqlite';export class StorageService {private dbName = 'app_storage';private isEncrypted = false;async initialize(encrypted = false) {this.isEncrypted = encrypted;// Apri archiviazione con opzioniawait CapacitorDataStorageSqlite.openStore({database: this.dbName,encrypted: encrypted,mode: encrypted ? 'encryption' : 'no-encryption',version: 1});}// Metodi di archiviazione genericiasync setObject<T>(key: string, data: T): Promise<void> {const value = JSON.stringify(data);await CapacitorDataStorageSqlite.set({ key, value });}async getObject<T>(key: string): Promise<T | null> {try {const { value } = await CapacitorDataStorageSqlite.get({ key });return value ? JSON.parse(value) : null;} catch (error) {console.error('Errore nel recupero dell\'oggetto:', error);return null;}}// Operazioni batchasync setMultiple(items: Record<string, any>): Promise<void> {for (const [key, value] of Object.entries(items)) {await CapacitorDataStorageSqlite.set({key,value: typeof value === 'string' ? value : JSON.stringify(value)});}}async getMultiple(keys: string[]): Promise<Record<string, any>> {const results: Record<string, any> = {};for (const key of keys) {try {const { value } = await CapacitorDataStorageSqlite.get({ key });results[key] = value;} catch (error) {results[key] = null;}}return results;}// Gestione tabelleasync getTables(): Promise<string[]> {const { tables } = await CapacitorDataStorageSqlite.tables();return tables;}async deleteTable(table: string): Promise<void> {await CapacitorDataStorageSqlite.deleteTable({ table });}// FunzionalitĂ Import/Exportasync exportToJson(): Promise<any[]> {const { keys } = await CapacitorDataStorageSqlite.keys();const { values } = await CapacitorDataStorageSqlite.values();return keys.map((key, index) => ({key,value: values[index]}));}async importFromJson(data: Array<{ key: string; value: string }>): Promise<void> {// Cancella dati esistentiawait CapacitorDataStorageSqlite.clear();// Importa nuovi datifor (const item of data) {await CapacitorDataStorageSqlite.set({key: item.key,value: item.value});}}// Filtraggio e ricercaasync keysStartingWith(prefix: string): Promise<string[]> {const { keys } = await CapacitorDataStorageSqlite.keys();return keys.filter(key => key.startsWith(prefix));}async filterByPrefix(prefix: string): Promise<Array<{ key: string; value: string }>> {const { keys } = await CapacitorDataStorageSqlite.keys();const { values } = await CapacitorDataStorageSqlite.values();const filtered: Array<{ key: string; value: string }> = [];keys.forEach((key, index) => {if (key.startsWith(prefix)) {filtered.push({ key, value: values[index] });}});return filtered;}// Chiudi il database quando hai finitoasync close(): Promise<void> {await CapacitorDataStorageSqlite.closeStore({database: this.dbName});}}// Esempio di utilizzoconst storage = new StorageService();await storage.initialize(true); // Usa crittografia// Memorizza dati utenteawait storage.setObject('user_profile', {id: 123,name: 'John Doe',email: 'john@example.com'});// Recupera dati utenteconst profile = await storage.getObject<any>('user_profile');console.log('Profilo utente:', profile);
Riferimento API
Section titled âRiferimento APIâopenStore(options: OpenStoreOptions)
Section titled âopenStore(options: OpenStoreOptions)âApre un database di archiviazione.
Parametri:
options.database: string - Nome del databaseoptions.encrypted: boolean - Abilita crittografiaoptions.mode: string - âencryptionâ o âno-encryptionâoptions.version: number - Versione del database
closeStore(options: CloseStoreOptions)
Section titled âcloseStore(options: CloseStoreOptions)âChiude il database di archiviazione.
set(options: SetOptions)
Section titled âset(options: SetOptions)âMemorizza una coppia chiave-valore.
Parametri:
options.key: string - Chiave di archiviazioneoptions.value: string - Valore da memorizzare
get(options: GetOptions)
Section titled âget(options: GetOptions)âRecupera un valore per chiave.
Restituisce: Promise<{ value: string }>
remove(options: RemoveOptions)
Section titled âremove(options: RemoveOptions)âRimuove una coppia chiave-valore.
clear()
Section titled âclear()âCancella tutti i dati dallâarchiviazione.
iskey(options: IskeyOptions)
Section titled âiskey(options: IskeyOptions)âVerifica se una chiave esiste.
Restituisce: Promise<{ result: boolean }>
Ottiene tutte le chiavi di archiviazione.
Restituisce: Promise<{ keys: string[] }>
values()
Section titled âvalues()âOttiene tutti i valori di archiviazione.
Restituisce: Promise<{ values: string[] }>
tables()
Section titled âtables()âOttiene tutti i nomi delle tabelle.
Restituisce: Promise<{ tables: string[] }>
deleteTable(options: DeleteTableOptions)
Section titled âdeleteTable(options: DeleteTableOptions)âElimina una tabella specifica.
Interfacce
Section titled âInterfacceâinterface OpenStoreOptions { database: string; encrypted?: boolean; mode?: string; version?: number;}
interface SetOptions { key: string; value: string;}
interface GetOptions { key: string;}
interface RemoveOptions { key: string;}Note sulle Piattaforme
Section titled âNote sulle Piattaformeâ- Utilizza SQLite3 con SQLCipher opzionale per la crittografia
- I dati persistono attraverso gli aggiornamenti dellâapp
- Supporta iOS 11.0+
Android
Section titled âAndroidâ- Utilizza SQLite con SQLCipher opzionale
- I dati persistono attraverso gli aggiornamenti dellâapp
- Supporta Android 5.0 (API 21)+
Casi dâUso Comuni
Section titled âCasi dâUso Comuniâ- Preferenze Utente: Memorizza impostazioni e preferenze dellâapp
- Gestione Cache: Cache risposte API e dati
- Archiviazione Offline: Memorizza dati per accesso offline
- Gestione Sessioni: Gestisci sessioni utente in modo sicuro
- Archiviazione Token: Memorizza token di autenticazione in modo sicuro
Best Practice
Section titled âBest Practiceâ-
Usa la Crittografia per Dati Sensibili
// Per dati sensibili come tokenawait openStore({database: 'secure_db',encrypted: true,mode: 'encryption'}); -
Organizza le Chiavi con Prefissi
// Usa prefissi per l'organizzazioneawait set({ key: 'user:123:profile', value: userData });await set({ key: 'cache:api:users', value: apiData }); -
Gestisci con Attenzione i Dati Grandi
// Per oggetti grandi, considera la compressioneconst compressed = compress(largeData);await set({ key: 'large_data', value: compressed }); -
Pulizia Regolare
// Rimuovi voci cache scaduteconst keys = await keys();for (const key of keys.keys) {if (key.startsWith('cache:') && isExpired(key)) {await remove({ key });}}
Risoluzione Problemi
Section titled âRisoluzione ProblemiâIl database non si apre:
- Verifica che il nome del database sia valido (alfanumerico, trattini bassi)
- Assicurati che non ci siano caratteri speciali nel nome del database
- Verifica che la modalitĂ di crittografia corrisponda al database esistente
I dati non persistono:
- Assicurati che
openStoresia chiamato prima delle operazioni - Verifica eventuali errori nella console
- Verifica che i nomi delle chiavi siano stringhe
Problemi di prestazioni:
- Evita di memorizzare valori molto grandi
- Usa operazioni batch quando possibile
- Considera lâuso di piĂš database per diversi tipi di dati