Comenzando
-
Instalar el paquete
Ventana de terminal npm i @Capgo/Capacitor-data-storage-sqliteVentana de terminal pnpm add @Capgo/Capacitor-data-storage-sqliteVentana de terminal yarn add @Capgo/Capacitor-data-storage-sqliteVentana de terminal bun add @Capgo/Capacitor-data-storage-sqlite -
Sincronizar con proyectos nativos
Ventana de terminal npx cap syncVentana de terminal pnpm cap syncVentana de terminal yarn cap syncVentana de terminal bunx cap sync -
Configurar el Plugin
Ejemplo de almacenamiento básico:
import { CapacitorDataStorageSqlite } from '@capgo/capacitor-data-storage-sqlite';// Abrir una base de datos de almacenamientoawait CapacitorDataStorageSqlite.openStore({database: 'myapp_storage'});// Almacenar datosawait CapacitorDataStorageSqlite.set({key: 'user_preferences',value: JSON.stringify({ theme: 'dark' })});Ejemplo de almacenamiento encriptado:
// Abrir almacenamiento encriptadoawait CapacitorDataStorageSqlite.openStore({database: 'secure_storage',encrypted: true,mode: 'encryption'});// Almacenar datos sensiblesawait CapacitorDataStorageSqlite.set({key: 'api_token',value: 'secret_token_value'});No se requiere configuración adicional para iOS.
No se requiere configuración adicional para Android.
-
Operaciones básicas
import { CapacitorDataStorageSqlite } from '@capgo/capacitor-data-storage-sqlite';// Establecer un valorawait CapacitorDataStorageSqlite.set({key: 'username',value: 'john_doe'});// Obtener un valorconst { value } = await CapacitorDataStorageSqlite.get({key: 'username'});console.log('Nombre de usuario:', value); // "john_doe"// Eliminar un valorawait CapacitorDataStorageSqlite.remove({key: 'username'});// Limpiar todos los datosawait CapacitorDataStorageSqlite.clear();// Verificar si existe la claveconst { result } = await CapacitorDataStorageSqlite.iskey({key: 'username'});console.log('La clave existe:', result); // true o false// Obtener todas las clavesconst { keys } = await CapacitorDataStorageSqlite.keys();console.log('Todas las claves:', keys);// Obtener todos los valoresconst { values } = await CapacitorDataStorageSqlite.values();console.log('Todos los valores:', values); -
Uso avanzado
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;// Abrir almacenamiento con opcionesawait CapacitorDataStorageSqlite.openStore({database: this.dbName,encrypted: encrypted,mode: encrypted ? 'encryption' : 'no-encryption',version: 1});}// Métodos de almacenamiento genéricosasync 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('Error al obtener objeto:', error);return null;}}// Operaciones por lotesasync 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;}// Gestión de tablasasync getTables(): Promise<string[]> {const { tables } = await CapacitorDataStorageSqlite.tables();return tables;}async deleteTable(table: string): Promise<void> {await CapacitorDataStorageSqlite.deleteTable({ table });}// Funcionalidad de importar/exportarasync 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> {// Limpiar datos existentesawait CapacitorDataStorageSqlite.clear();// Importar nuevos datosfor (const item of data) {await CapacitorDataStorageSqlite.set({key: item.key,value: item.value});}}// Filtrado y búsquedaasync 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;}// Cerrar base de datos cuando hayas terminadoasync close(): Promise<void> {await CapacitorDataStorageSqlite.closeStore({database: this.dbName});}}// Ejemplo de usoconst storage = new StorageService();await storage.initialize(true); // Usar encriptación// Almacenar datos de usuarioawait storage.setObject('user_profile', {id: 123,name: 'John Doe',email: 'john@example.com'});// Recuperar datos de usuarioconst profile = await storage.getObject<any>('user_profile');console.log('Perfil de usuario:', profile);
Referencia de API
Section titled “Referencia de API”Métodos
Section titled “Métodos”openStore(options: OpenStoreOptions)
Section titled “openStore(options: OpenStoreOptions)”Abre una base de datos de almacenamiento.
Parámetros:
options.database: string - Nombre de la base de datosoptions.encrypted: boolean - Habilitar encriptaciónoptions.mode: string - ‘Cifrado’ o ‘no-Cifrado’options.version: number - Versión de la base de datos
closeStore(options: CloseStoreOptions)
Section titled “closeStore(options: CloseStoreOptions)”Cierra la base de datos de almacenamiento.
set(options: SetOptions)
Section titled “set(options: SetOptions)”Almacena un par clave-valor.
Parámetros:
options.key: string - Clave de almacenamientooptions.value: string - Valor a almacenar
get(options: GetOptions)
Section titled “get(options: GetOptions)”Recupera un valor por clave.
Retorna: Promise<{ value: string }>
remove(options: RemoveOptions)
Section titled “remove(options: RemoveOptions)”Elimina un par clave-valor.
clear()
Section titled “clear()”Limpia todos los datos del almacenamiento.
iskey(options: IskeyOptions)
Section titled “iskey(options: IskeyOptions)”Verifica si existe una clave.
Retorna: Promise<{ result: boolean }>
keys()
Section titled “keys()”Obtiene todas las claves de almacenamiento.
Retorna: Promise<{ keys: string[] }>
values()
Section titled “values()”Obtiene todos los valores de almacenamiento.
Retorna: Promise<{ values: string[] }>
tables()
Section titled “tables()”Obtiene todos los nombres de tablas.
Retorna: Promise<{ tables: string[] }>
deleteTable(options: DeleteTableOptions)
Section titled “deleteTable(options: DeleteTableOptions)”Elimina una tabla específica.
Interfaces
Section titled “Interfaces”interface OpenStoreOptions { database: string; encrypted?: boolean; mode?: string; version?: number;}
interface SetOptions { key: string; value: string;}
interface GetOptions { key: string;}
interface RemoveOptions { key: string;}Notas de plataforma
Section titled “Notas de plataforma”- Usa SQLite3 con SQLCipher opcional para encriptación
- Los datos persisten entre actualizaciones de la aplicación
- Soporta iOS 11.0+
Android
Section titled “Android”- Usa SQLite con SQLCipher opcional
- Los datos persisten entre actualizaciones de la aplicación
- Soporta Android 5.0 (API 21)+
Casos de uso comunes
Section titled “Casos de uso comunes”- Preferencias de usuario: Almacenar configuraciones y preferencias de la aplicación
- Gestión de caché: Cachear respuestas API y datos
- Almacenamiento sin conexión: Almacenar datos para acceso sin conexión
- Gestión de sesiones: Gestionar sesiones de usuario de forma segura
- Almacenamiento de tokens: Almacenar tokens de autenticación de forma segura
Mejores prácticas
Section titled “Mejores prácticas”-
Usar encriptación para datos sensibles
// Para datos sensibles como tokensawait openStore({database: 'secure_db',encrypted: true,mode: 'encryption'}); -
Organizar claves con prefijos
// Usar prefijos para organizaciónawait set({ key: 'user:123:profile', value: userData });await set({ key: 'cache:api:users', value: apiData }); -
Manejar datos grandes con cuidado
// Para objetos grandes, considerar compresiónconst compressed = compress(largeData);await set({ key: 'large_data', value: compressed }); -
Limpieza regular
// Eliminar entradas de caché expiradasconst keys = await keys();for (const key of keys.keys) {if (key.startsWith('cache:') && isExpired(key)) {await remove({ key });}}
Solución de problemas
Section titled “Solución de problemas”La base de datos no se abre:
- Verifica que el nombre de la base de datos sea válido (alfanumérico, guiones bajos)
- Asegúrate de que no haya caracteres especiales en el nombre de la base de datos
- Verifica que el modo de encriptación coincida con la base de datos existente
Los datos no persisten:
- Asegúrate de que
openStorese llame antes de las operaciones - Verifica cualquier Error en la consola
- Verifica que los nombres de claves sean cadenas
Problemas de rendimiento:
- Evita almacenar valores muy grandes
- Usa operaciones por lotes cuando sea posible
- Considera usar múltiples bases de datos para diferentes tipos de datos