Ключ dblocation со значением nosync для объекта, который должен быть неизменяемым, заморожен.IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Ключ dblocation со значением nosync для объекта, который должен быть неизменяемым, заморожен.

Сообщение Anonymous »

В базе данных SQLite я храню данные локально на устройствах iOS и Android. Я создал общий служебный файл для подключения и работы. При открытии базы данных я получаю:

Вы попытались установить ключ «dblocation» со значением «nosync» для объекта, который должен быть неизменяемым и имеет был заморожен.

React-Native 0.74.1, Node v22.3.0, response-native-sqlite-storage 6.0.1. Служебный файл:
import SQLite, { SQLiteDatabase, ResultSet } from 'react-native-sqlite-storage';
import { databaseName, location } from './DbConfig';

SQLite.DEBUG(true);
SQLite.enablePromise(true);

const databaseConfig = {
name: databaseName,
location: location,
dblocation: location,
// createFromLocation:createFromLocation
};

export interface Item {
id: number;
name: string;
description: string;
new_column?: string; }
class DatabaseService {
private readOnly: boolean = false;

private async initDB(): Promise {
try {
const opens = await SQLite.openDatabase(databaseConfig);
console.log('opens', opens);
return opens;
} catch (error) {
console.error('Failed to open database:', error);
throw error;
}
}

private closeDatabase(db: SQLiteDatabase): void {
db.close().catch((error) => console.error('Failed to close database:', error));
}

setReadOnlyMode(isReadOnly: boolean): void {
this.readOnly = isReadOnly;
}

async createTable(): Promise {
if (this.readOnly) throw new Error('Database is in read-only mode');
const db = await this.initDB();
await db.executeSql(`
CREATE TABLE IF NOT EXISTS items (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
description TEXT
)
`);
this.closeDatabase(db);
}

async addItem(item: Item): Promise {
if (this.readOnly) throw new Error('Database is in read-only mode');
const db = await this.initDB();
const result = await db.executeSql('INSERT INTO items (name, description) VALUES (?, ?)', [
item.name,
item.description,
]);
this.closeDatabase(db);
return result[0];
}

async updateItem(id: number, item: Item): Promise {
if (this.readOnly) throw new Error('Database is in read-only mode');
const db = await this.initDB();
const result = await db.executeSql('UPDATE items SET name = ?, description = ? WHERE id = ?', [
item.name,
item.description,
id,
]);
this.closeDatabase(db);
return result[0];
}

async deleteItem(id: number): Promise {
if (this.readOnly) throw new Error('Database is in read-only mode');
const db = await this.initDB();
const result = await db.executeSql('DELETE FROM items WHERE id = ?', [id]);
this.closeDatabase(db);
return result[0];
}

async getItems(): Promise {
const db = await this.initDB();
console.log('--------', '----', db);

const [result] = await db.executeSql('SELECT * FROM items', []);
console.log('---result-----', result);

this.closeDatabase(db);

const items: Item[] = [];
for (let i = 0; i < result.rows.length; i++) {
items.push(result.rows.item(i));
}
return items;
}

async updateDatabaseVersion(newVersion: number): Promise {
if (this.readOnly) throw new Error('Database is in read-only mode');
const db = await this.initDB();
const [result] = await db.executeSql('PRAGMA user_version');
const currentVersion = result.rows.item(0).user_version;

if (currentVersion < newVersion) {
await db.executeSql('ALTER TABLE items ADD COLUMN new_column TEXT');
await db.executeSql(`PRAGMA user_version = ${newVersion}`);
}

this.closeDatabase(db);
}
}
export default new DatabaseService();

Конфигурация:
export const databaseName='Database2024.db';
export const dbVersion=1;
export const location='default'
export const createFromLocation =1

Использование:
useEffect(() => {
(async () => {
const aa= await DatabaseService.createTable();
await fetchItems();
})();
}, []);


Подробнее здесь: https://stackoverflow.com/questions/786 ... to-be-immu
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»