sqlite
sqlite copied to clipboard
Community plugin for native & electron SQLite databases

SQLITE DATABASE
@capacitor-community/sqlite
CAPACITOR 4
Capacitor community plugin for Native and Electron SQLite Databases. In Native databases could be encrypted with SQLCipher
Maintainers
| Maintainer | GitHub | Social |
|---|---|---|
| Quéau Jean Pierre | jepiqueau |
CAPACITOR 4 (Master)
🚨 Release 4.0.1 all platforms ->> 🚨
As no any issues where opened against version 4.0.0-1 using Capacitor 4, Developers can now install it as normal
npm install @capacitor-community/sqlite@latest
🚨 Release 4.0.1 <<- 🚨
🚨 Release 4.0.0-1 all platforms ->> 🚨 This is a tentative of implementing @Capacitor/[email protected] proposed by rdlabo (Masahiko Sakakibara). For those who want to try it do
npm install @capacitor-community/sqlite@next
Revert quickly any issue by clearly mentionning V4 in the title of the issue.
Thanks for your help in testing
🚨 Release 4.0.0-1 <<- 🚨
CAPACITOR 3 (v3.7.0)
🚨 Release 3.4.3-3 all platforms ->> 🚨
The main change is related to the delete table's rows when a synchronization table exists as well as a last_mofidied table's column, allowing for database synchronization of the local database with a remote server database.
-
All existing triggers to YOUR_TABLE_NAME_trigger_last_modified must be modified as follows
CREATE TRIGGER YOUR_TABLE_NAME_trigger_last_modified AFTER UPDATE ON YOUR_TABLE_NAME FOR EACH ROW WHEN NEW.last_modified < OLD.last_modified BEGIN UPDATE YOUR_TABLE_NAME SET last_modified= (strftime('%s', 'now')) WHERE id=OLD.id; END; -
an new column
sql_deletedmust be added to each of your tables assql_deleted BOOLEAN DEFAULT 0 CHECK (sql_deleted IN (0, 1))This column will be autommatically set to 1 when you will use a
DELETE FROM ...sql statement in theexecute,runorexecuteSetmethods. -
In the JSON object that you provide to
importFromJson, all the deleted rows in your remote server database's tables must have thesql_deletedcolumn set to 1. This will indicate to the import process to physically delete the corresponding rows in your local database. All the others rows must have thesql_deletedcolumn set to 0. -
In the JSON object outputs by the
exportToJson, all the deleted rows in your local database have got thesql_deletedcolumn set to 1 to help in your synchronization management process with the remote server database. A systemlast_exported_dateis automatically saved in the synchronization table at the start of the export process flow. -
On successful completion of your synchronization management process with the remote server database, you must
- Set a new synchronization date (as
(new Date()).toISOString()) with thesetSyncDatemethod. - Execute the
deleteExportedRowsmethod which physically deletes all table's rows having 1 as value for thesql_deletedcolumn prior to thelast_exported_datein your local database.
- Set a new synchronization date (as
An example of using this new feature is given in solidjs-vite-sqlite-app. It has been used to test the validity of the implementation.
🚨 Release 3.4.3-3 <<- 🚨
🚨 Release 3.4.2-4 ->> 🚨 !!!! DO NOT USE IT !!!! 🚨 Release 3.4.2-4 <<- 🚨
🚨 Since release 3.4.2-3 ->> 🚨
-
overwrite boolean parameter has been added to the Json Object (default false)
true: delete the physically the database whatever the version is.false:- re-importing a database with the same
versionnumber will do nothing, keeping the existing database and will returnchanges = 0 - re-importing a database with a lower
versionnumber will throw an errorImportFromJson: Cannot import a version lower than
- re-importing a database with the same
-
During an import in
fullmode theForeign Keyconstraint has been turn off before dropping the tables and turn back on after
🚨 Since release 3.4.2-3 <<- 🚨
🚨 Since release 3.4.1 ->> 🚨
Databases location for Electron can be set in the config.config.ts as followed:
-
for sharing databases between users:
plugins: { CapacitorSQLite: { electronMacLocation: "/YOUR_DATABASES_PATH", electronWindowsLocation: "C:\\ProgramData\\CapacitorDatabases", electronLinuxLocation: "/home/CapacitorDatabases" } } -
for only the user in its Home folder
Plugins: { CapacitorSQLite: { electronMacLocation: "Databases", electronWindowsLocation: "Databases", electronLinuxLocation: "Databases" } }
For existing databases, YOU MUST COPY old databases to the new location You MUST remove the Electron folder and add it again with
npx cap add @capacitor-community/electron
npm run build
cd electron
npm i --save sqlite3
npm i --save @types:sqlite3
npm run rebuild
cd ..
npx cap sync @capacitor-community/electron
npm run build
npx cap copy @capacitor-community/electron
npx cap open @capacitor-community/electron
🚨 Since release 3.4.1 <<- 🚨
🚨 Since release 3.4.1-1 ->> 🚨
- add iosIsEncryption, androidIsEncryption in capacitor.config.ts
When your application use only
non-encrypted databasesset those parameter to false then iOS KeyChain & Android MasterKey are not defined.
🚨 Since release 3.4.1-1 <<- 🚨
🚨 Since release 3.4.0-2 ->> 🚨
-
iOS & Android only Adding biometric FaceID/TouchID to secure the pass phrase in the Keychain/SharedPreferences stores. see: Biometric_Authentication
-
iOS only Fix identical pass phrase stored in the Keychain for differents applications using the plugin by adding an application prefix to the Keychain account. Before the account
"CapacitorSQLitePlugin"was used and was the same for all applications. Now by addingiosKeychainPrefix: 'YOUR_APP_NAME'in thecapacitor.config.tsof your application, the account will be"YOUR_APP_NAME_CapacitorSQLitePlugin"If you were having a pass phrase stored, first modify thecapacitor.config.tsand then run the commandisSecretStoredwhich will manage the upgrade of the Keychain account. 🚨 Since release 3.4.0-2 <<- 🚨
🚨 Since release 3.3.3-2 ->> 🚨
- iOS only
Support for a database location not visible to iTunes and backed up to iCloud.
For this you must add to the
const config: CapacitorConfigof thecapacitor.config.tsfile of your application the following:
Pre-existing databases from theplugins: { CapacitorSQLite: { "iosDatabaseLocation": "Library/CapacitorDatabase" } }Documentsfolder will be moved to the new folderLibrary/CapacitorDatabaseand your application will work as before. If you do not modify thecapacitor.config.tsfile of your application the databases will still reside in theDocumentsfolder
🚨 Since release 3.3.3-2 <<- 🚨
🚨 Since release 3.2.5-2 ->> 🚨
- support zip file in copyFromAssets method
- add optional
overwriteparameter (true/false) default to true
🚨 Since release 3.2.5-2 <<- 🚨
🚨 Since release 3.2.3-1 ->> 🚨
The initWebStore and saveToStore methods have been added to the Web platform.
- The
initWebStorehas been added to fix the issue#172 and since then isMANDATORY
...
if(platform === "web") {
await customElements.whenDefined('jeep-sqlite');
const jeepSqliteEl = document.querySelector('jeep-sqlite');
if(jeepSqliteEl != null) {
await sqliteConnection.initWebStore()
...
}
}
...
- the
saveToStoreallows to perform intermediate save of the database in case the browser needs to delete the cache.
🚨 Since release 3.2.3-1 <<- 🚨
The test has been achieved on:
Browser Support
The plugin follows the guidelines from the Capacitor Team,
meaning that it will not work in IE11 without additional JavaScript transformations, e.g. with Babel.
Installation
npm install @capacitor-community/sqlite
npm run build
npx cap add android
npx cap add ios
npx cap add @capacitor-community/electron
and do when you update
npx cap sync
npx cap sync @capacitor-community/electron
Web
For Angular framework
- copy manually the file
sql-wasm.wasmfromnode_modules/sql.js/dist/sql-wasm.wasmto thesrc/assetsfolder of YOUR_APP
For Vue & React frameworks
- copy manually the file
sql-wasm.wasmfromnode_modules/sql.js/dist/sql-wasm.wasmto thepublic/assetsfolder of YOUR_APP
IOS
- on iOS, no further steps needed.
Android
- On Android, no further steps needed.
Electron
- On Electron, go to the Electron folder of YOUR_APPLICATION
cd electron
npm install --save sqlite3
npm install --save jszip
npm install --save-dev @types/sqlite3
npm run build
Build & Run
npm run build
npx cap copy
npx cap copy web
npx cap copy @capacitor-community/electron
Web
- Angular
ionic serve
- Vue
npm run serve
- React
npm run start
IOS
npx cap open ios
Android
npx cap open android
Electron
npx cap open @capacitor-community/electron
Readme previous releases
Issues
Configuration
No configuration required for this plugin
Supported methods
| Name | Android | iOS | Electron | Web |
|---|---|---|---|---|
| createConnection | ✅ | ✅ | ✅ | ✅ |
| closeConnection | ✅ | ✅ | ✅ | ✅ |
| isConnection | ✅ | ✅ | ✅ | ✅ |
| open (non-encrypted DB) | ✅ | ✅ | ✅ | ✅ |
| open (encrypted DB) | ✅ | ✅ | ❌ | ❌ |
| close | ✅ | ✅ | ✅ | ✅ |
| getUrl | ✅ | ✅ | ❌ | ❌ |
| getVersion | ✅ | ✅ | ✅ | ✅ |
| execute | ✅ | ✅ | ✅ | ✅ |
| executeSet | ✅ | ✅ | ✅ | ✅ |
| run | ✅ | ✅ | ✅ | ✅ |
| query | ✅ | ✅ | ✅ | ✅ |
| deleteDatabase | ✅ | ✅ | ✅ | ✅ |
| importFromJson | ✅ | ✅ | ✅ | ✅ |
| exportToJson | ✅ | ✅ | ✅ | ✅ |
| deleteExportedRows | ✅ | ✅ | ✅ | ✅ |
| createSyncTable | ✅ | ✅ | ✅ | ✅ |
| setSyncDate | ✅ | ✅ | ✅ | ✅ |
| getSyncDate | ✅ | ✅ | ✅ | ✅ |
| isJsonValid | ✅ | ✅ | ✅ | ✅ |
| isDBExists | ✅ | ✅ | ✅ | ✅ |
| addUpgradeStatement | ✅ | ✅ | ✅ | ✅ |
| copyFromAssets | ✅ | ✅ | ✅ | ✅ |
| isDBOpen | ✅ | ✅ | ✅ | ✅ |
| isDatabase | ✅ | ✅ | ✅ | ✅ |
| isTableExists | ✅ | ✅ | ✅ | ✅ |
| getTableList | ✅ | ✅ | ✅ | ✅ |
| getDatabaseList | ✅ | ✅ | ✅ | ✅ |
| getMigratableDbList | ✅ | ✅ | ❌ | ❌ |
| addSQLiteSuffix | ✅ | ✅ | ❌ | ❌ |
| deleteOldDatabases | ✅ | ✅ | ❌ | ❌ |
| moveDatabasesAndAddSuffix | ✅ | ✅ | ❌ | ❌ |
| checkConnectionsConsistency | ✅ | ✅ | ✅ | ✅ |
| isSecretStored | ✅ | ✅ | ❌ | ❌ |
| setEncryptionSecret | ✅ | ✅ | ❌ | ❌ |
| changeEncryptionSecret | ✅ | ✅ | ❌ | ❌ |
| clearEncryptionSecret | ✅ | ✅ | ❌ | ❌ |
| initWebStore | ❌ | ❌ | ❌ | ✅ |
| saveToStore | ❌ | ❌ | ❌ | ✅ |
| getNCDatabasePath | ✅ | ✅ | ❌ | ❌ |
| createNCConnection | ✅ | ✅ | ❌ | ❌ |
| closeNCConnection | ✅ | ✅ | ❌ | ❌ |
| isNCDatabase | ✅ | ✅ | ❌ | ❌ |
| transaction | ✅ | ✅ | ✅ | ✅ |
Supported SQLite Types
-Datatypes In SQLite Version 3
Documentation
API
Framework's Usage
Applications demonstrating the use of the plugin
Ionic/Angular
Ionic/React
React+Vite
Ionic/Vue
Vue
Vue+Vite
SolidJS+Vite
Usage
Dependencies
The iOS and Android codes are using SQLCipher allowing for database encryption.
The iOS codes is using ZIPFoundation for unzipping assets files
The Electron code is using sqlite3.
The Web code is using the Stencil component jeep-sqlite based on sql.js, localforage. and jszip
Contributors ✨
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!




















