Я работаю над базой данных sqlite для локального хранения данных на устройствах iOS и Android. Я создал общий служебный файл для подключения и работы, при открытии базы данных возникает следующая ошибка >
You attempted to set the key "dblocation" with the value "nosync" on an object that is meant to be immutable and has been frozen.
Платформа
react-native : "0.74.1",
node : v22.3.0,
react-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 ... -an-object
Вы попытались установить ключ dblocation со значением nosync для объекта, который должен быть неизменяемым и был заморож ⇐ IOS
Программируем под IOS
1719913733
Anonymous
Я работаю над базой данных sqlite для локального хранения данных на устройствах iOS и Android. Я создал общий служебный файл для подключения и работы, при открытии базы данных возникает следующая ошибка >
You attempted to set the key "dblocation" with the value "nosync" on an object that is meant to be immutable and has been frozen.
Платформа
react-native : "0.74.1",
node : v22.3.0,
react-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();
})();
}, []);
Подробнее здесь: [url]https://stackoverflow.com/questions/78696234/you-attempted-to-set-the-key-dblocation-with-the-value-nosync-on-an-object[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия