Memulai
-
Instal paket
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 -
Sinkronkan dengan proyek native
Terminal window npx cap syncTerminal window pnpm cap syncTerminal window yarn cap syncTerminal window bunx cap sync -
Konfigurasikan plugin
Contoh Storage Dasar:
import { CapacitorDataStorageSqlite } from '@capgo/capacitor-data-storage-sqlite';// Open a storage databaseawait CapacitorDataStorageSqlite.openStore({database: 'myapp_storage'});// Store dataawait CapacitorDataStorageSqlite.set({key: 'user_preferences',value: JSON.stringify({ theme: 'dark' })});Contoh Storage Terenkripsi:
// Open encrypted storageawait CapacitorDataStorageSqlite.openStore({database: 'secure_storage',encrypted: true,mode: 'encryption'});// Store sensitive dataawait CapacitorDataStorageSqlite.set({key: 'api_token',value: 'secret_token_value'});Tidak diperlukan pengaturan tambahan untuk iOS.
Tidak diperlukan pengaturan tambahan untuk Android.
-
Operasi dasar
import { CapacitorDataStorageSqlite } from '@capgo/capacitor-data-storage-sqlite';// Set a valueawait CapacitorDataStorageSqlite.set({key: 'username',value: 'john_doe'});// Get a valueconst { value } = await CapacitorDataStorageSqlite.get({key: 'username'});console.log('Username:', value); // "john_doe"// Remove a valueawait CapacitorDataStorageSqlite.remove({key: 'username'});// Clear all dataawait CapacitorDataStorageSqlite.clear();// Check if key existsconst { result } = await CapacitorDataStorageSqlite.iskey({key: 'username'});console.log('Key exists:', result); // true or false// Get all keysconst { keys } = await CapacitorDataStorageSqlite.keys();console.log('All keys:', keys);// Get all valuesconst { values } = await CapacitorDataStorageSqlite.values();console.log('All values:', values); -
Penggunaan lanjutan
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;// Open storage with optionsawait CapacitorDataStorageSqlite.openStore({database: this.dbName,encrypted: encrypted,mode: encrypted ? 'encryption' : 'no-encryption',version: 1});}// Generic storage methodsasync 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 getting object:', error);return null;}}// Batch operationsasync 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;}// Table managementasync getTables(): Promise<string[]> {const { tables } = await CapacitorDataStorageSqlite.tables();return tables;}async deleteTable(table: string): Promise<void> {await CapacitorDataStorageSqlite.deleteTable({ table });}// Import/Export functionalityasync 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> {// Clear existing dataawait CapacitorDataStorageSqlite.clear();// Import new datafor (const item of data) {await CapacitorDataStorageSqlite.set({key: item.key,value: item.value});}}// Filtering and searchingasync 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;}// Close database when doneasync close(): Promise<void> {await CapacitorDataStorageSqlite.closeStore({database: this.dbName});}}// Usage exampleconst storage = new StorageService();await storage.initialize(true); // Use encryption// Store user dataawait storage.setObject('user_profile', {id: 123,name: 'John Doe',email: 'john@example.com'});// Retrieve user dataconst profile = await storage.getObject<any>('user_profile');console.log('User profile:', profile);
Referensi API
Section titled “Referensi API”Metode
Section titled “Metode”openStore(options: OpenStoreOptions)
Section titled “openStore(options: OpenStoreOptions)”Buka database storage.
Parameter:
options.database: string - Nama databaseoptions.encrypted: boolean - Aktifkan enkripsioptions.mode: string - ‘encryption’ atau ‘no-encryption’options.version: number - Versi database
closeStore(options: CloseStoreOptions)
Section titled “closeStore(options: CloseStoreOptions)”Tutup database storage.
set(options: SetOptions)
Section titled “set(options: SetOptions)”Simpan pasangan key-value.
Parameter:
options.key: string - Key storageoptions.value: string - Value untuk disimpan
get(options: GetOptions)
Section titled “get(options: GetOptions)”Ambil value berdasarkan key.
Mengembalikan: Promise<{ value: string }>
remove(options: RemoveOptions)
Section titled “remove(options: RemoveOptions)”Hapus pasangan key-value.
clear()
Section titled “clear()”Hapus semua data dari storage.
iskey(options: IskeyOptions)
Section titled “iskey(options: IskeyOptions)”Periksa apakah key ada.
Mengembalikan: Promise<{ result: boolean }>
keys()
Section titled “keys()”Dapatkan semua key storage.
Mengembalikan: Promise<{ keys: string[] }>
values()
Section titled “values()”Dapatkan semua value storage.
Mengembalikan: Promise<{ values: string[] }>
tables()
Section titled “tables()”Dapatkan semua nama tabel.
Mengembalikan: Promise<{ tables: string[] }>
deleteTable(options: DeleteTableOptions)
Section titled “deleteTable(options: DeleteTableOptions)”Hapus tabel tertentu.
Interface
Section titled “Interface”interface OpenStoreOptions { database: string; encrypted?: boolean; mode?: string; version?: number;}
interface SetOptions { key: string; value: string;}
interface GetOptions { key: string;}
interface RemoveOptions { key: string;}Catatan Platform
Section titled “Catatan Platform”- Menggunakan SQLite3 dengan SQLCipher opsional untuk enkripsi
- Data bertahan di seluruh pembaruan aplikasi
- Mendukung iOS 11.0+
Android
Section titled “Android”- Menggunakan SQLite dengan SQLCipher opsional
- Data bertahan di seluruh pembaruan aplikasi
- Mendukung Android 5.0 (API 21)+
Kasus Penggunaan Umum
Section titled “Kasus Penggunaan Umum”- Preferensi Pengguna: Simpan pengaturan dan preferensi aplikasi
- Manajemen Cache: Cache respons dan data API
- Storage Offline: Simpan data untuk akses offline
- Manajemen Sesi: Kelola sesi pengguna dengan aman
- Storage Token: Simpan token autentikasi dengan aman
Praktik Terbaik
Section titled “Praktik Terbaik”-
Gunakan Enkripsi untuk Data Sensitif
// For sensitive data like tokensawait openStore({database: 'secure_db',encrypted: true,mode: 'encryption'}); -
Organisir Key dengan Prefix
// Use prefixes for organizationawait set({ key: 'user:123:profile', value: userData });await set({ key: 'cache:api:users', value: apiData }); -
Tangani Data Besar dengan Hati-hati
// For large objects, consider compressionconst compressed = compress(largeData);await set({ key: 'large_data', value: compressed }); -
Pembersihan Rutin
// Remove expired cache entriesconst keys = await keys();for (const key of keys.keys) {if (key.startsWith('cache:') && isExpired(key)) {await remove({ key });}}
Pemecahan Masalah
Section titled “Pemecahan Masalah”Database tidak terbuka:
- Periksa nama database valid (alfanumerik, underscore)
- Pastikan tidak ada karakter khusus dalam nama database
- Verifikasi mode enkripsi cocok dengan database yang ada
Data tidak bertahan:
- Pastikan
openStoredipanggil sebelum operasi - Periksa error di konsol
- Verifikasi nama key adalah string
Masalah performa:
- Hindari menyimpan value yang sangat besar
- Gunakan operasi batch jika memungkinkan
- Pertimbangkan menggunakan beberapa database untuk tipe data berbeda