capacitor-community / capacitor-community/sqlite
bug: exportToJson: Error get tables 'Full' failed : Query result not well formatted
- Dominant language
- Swift
- Stars
- 661
- Forks
- 158
- PR merge metrics
- No merged PRs in 30d
Description
**Plugin version:**
7.0.1
**Platform(s):**
iOS
**Current behavior:**
`exportToJson: Error get tables 'Full' failed : Query result not well formatted`
**Expected behavior:**
Succeed in exporting tables to JSON
**Steps to reproduce:**
```
async exportToJson(mode = 'full') {
console.log('[ sqliteLoader.js ] Exporting database to JSON...');
return await sqlite.exportToJson({
database: DB_NAME,
jsonexportmode: mode
});
},
```
**Related code:**
Sample table:
```
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
lastName TEXT,
phoneNumber TEXT,
email TEXT,
sobrietyDate TEXT,
homeGroups TEXT,
preferences TEXT,
privacySettings TEXT,
notificationSettings TEXT, -- JSON string for notification preferences
createdAt TEXT DEFAULT CURRENT_TIMESTAMP,
updatedAt TEXT DEFAULT CURRENT_TIMESTAMP,
sql_deleted BOOLEAN DEFAULT 0 CHECK (sql_deleted IN (0, 1)),
last_modified INTEGER DEFAULT (strftime('%s', 'now'))
)
```
```
import { CapacitorSQLite } from '@capacitor-community/sqlite';
// Default database name for consistency
const DB_NAME = 'tracker.db';
/**
* Initialize SQLite database
* @returns {Promise} Database connection object
*/
export default async function initSQLiteDatabase() {
console.log('[ sqliteLoader.js:14 ] Initializing SQLite database via Capacitor...');
try {
const sqlite = CapacitorSQLite;
if (!sqlite) {
throw new Error('CapacitorSQLite plugin not found - this app requires SQLite for iOS');
}
console.log('[ sqliteLoader.js ] Found CapacitorSQLite plugin:', !!sqlite);
// Step 1: Create connection (check if already exists first)
try {
await sqlite.createConnection({
database: DB_NAME,
version: 1,
encrypted: false,
mode: 'no-encryption',
readonly: false
});
console.log('[ sqliteLoader.js:50 ] Database connection created');
} catch (connectionError) {
console.log('[ sqliteLoader.js:52 ] Connection may already exist:', connectionError.message);
}
// Step 2: Open the database
await sqlite.open({ database: DB_NAME, readonly: false });
console.log('[ sqliteLoader.js:56 ] Database opened successfully');
// Step 3: Create sync table (required for CapacitorSQLite export/import operations)
await sqlite.createSyncTable({ database: DB_NAME });
console.log('[ sqliteLoader.js:58 ] Sync table created successfully');
// Sync methods for iCloud integration
async exportToJson(mode = 'full') {
console.log('[ sqliteLoader.js ] Exporting database to JSON...');
return await sqlite.exportToJson({
database: DB_NAME,
jsonexportmode: mode
});
},
async importFromJson(jsonData) {
console.log('[ sqliteLoader.js ] Importing database from JSON...');
return await sqlite.importFromJson({
jsonstring: JSON.stringify(jsonData)
});
},
async setSyncDate(syncDate) {
console.log('[ sqliteLoader.js ] Setting sync date...');
return await sqlite.setSyncDate({
database: DB_NAME,
syncdate: syncDate
});
},
async deleteExportedRows() {
console.log('[ sqliteLoader.js ] Deleting exported rows...');
return await sqlite.deleteExportedRows({
database: DB_NAME
});
}
};
} catch (error) {
console.error('[ sqliteLoader.js ] Database initialization failed:', error);
throw error;
}
}
```
**Other information:**
I have read through https://github.com/capacitor-community/sqlite/issues/59 and it is long-closed, but I am having this problem repeatedly and cannot find a fix for it.
**Capacitor doctor:**
```
% npx cap doctor
💊 Capacitor Doctor 💊
Latest Dependencies:
@capacitor/cli: 7.4.2
@capacitor/core: 7.4.2
@capacitor/android: 7.4.2
@capacitor/ios: 7.4.2
Installed Dependencies:
@capacitor/cli: 7.4.2
@capacitor/core: 7.4.2
@capacitor/android: 7.4.2
@capacitor/ios: 7.4.2
[success] iOS looking great! 👌
[error] gradlew file is missing in android
AndroidManifest.xml is missing in app/src/main
```
Expected, since I'm not currently working on Android.
Contributor guide
Assessment
This issue has not been assessed yet.