Olá tudo bem? Estou utilizando um projeto pessoal para estudar o React Native e o TypeScript, estou armazenando os dados localmente com o SQLite. Estava dando uma olhada na documentação e nos comentários dos demais desenvolveres, além do ChatGPT, todos avisam para encerrar a conexão após alguma operação com o banco de dados. Porém, quando tento fechar a conexão não consigo receber os dados. Gostaria de saber como devo prosseguir, estarei deixando o arquivo do BD logo abaixo.
Info
"react": "18.2.0",
"react-native": "0.71.3",
"react-native-sqlite-storage": "^6.0.1",
categoryType.ts
export type categoryType = {
id: number,
name: string,
photo: string | null,
status: 0 | 1
}
sellerData.ts
import SQLite from 'react-native-sqlite-storage';
import { categoryType } from '../types/category';
import { Toast } from 'react-native-toast-message/lib/src/Toast';
const nameDB = 'sellerDatabase.db';
const locationDB = 'default';
const db = SQLite.openDatabase({ name: nameDB, location: locationDB }, () => { });
//Criação das tabelas
const createTable = () => {
db.transaction((tx) => {
tx.executeSql("CREATE TABLE IF NOT EXISTS categories ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL UNIQUE, photo TEXT, status BOOLEAN NOT NULL DEFAULT 1, creation_date DATETIME DEFAULT CURRENT_TIMESTAMP, last_update DATETIME DEFAULT CURRENT_TIMESTAMP);", [], () => {
console.log('Tabela de Categorias criada com sucesso!');
}, () => {
console.log('Não foi possível criar a tabela de Categorias!');
});
})
};
//Recuperação das categorias
const getCategories = (setData: React.Dispatch<React.SetStateAction<categoryType[]>>) => {
db.transaction((tx) => {
tx.executeSql("SELECT * FROM categories", [], (tx, result) => {
const rows = result.rows;
const categories:categoryType[] = [];
for (let i = 0; i < rows.length; i++) {
categories.push(rows.item(i));
}
setData(categories.sort((a,b)=>a.name.localeCompare(b.name)));
})
})
}
//Recuperação de uma categoria em específico com base no ID
const getCategories_id = (id: number, setData: React.Dispatch<React.SetStateAction<categoryType>>) => {
db.transaction((tx) => {
tx.executeSql("SELECT * FROM categories WHERE id = ?", [id], (tx, result) => {
const category = result.rows.item(0);
setData(category);
})
})
}
const getActiveCategories = (setData: React.Dispatch<React.SetStateAction<categoryType[]>>) =>{
db.transaction((tx) => {
tx.executeSql("SELECT * FROM categories WHERE status = 1", [], (tx, result) => {
const rows = result.rows;
const categories:categoryType[] = [];
for (let i = 0; i < rows.length; i++) {
categories.push(rows.item(i));
}
setData(categories.sort((a,b)=>a.name.localeCompare(b.name)));
})
})
}
//Atualiza um item da tabela categoria com base no ID
const updateCategory = (id: number, name: string, photo: string | null, status: boolean) => {
db.transaction((tx) => {
tx.executeSql("UPDATE categories SET name = ?, photo = ?, status = ? WHERE id = ?;", [name, photo, status === true ? 1 : 0, id], (tx, result) => {
Toast.show({
type: 'success',
text1: 'Sucesso!',
text2: `Categoria atualizada com sucesso.`,
})
}, () => {
Toast.show({
type: 'error',
text1: `Ops!`,
text2: `Não foi possível atualizar a categoria`,
})
})
})
}
export {
createTable,
nameDB, locationDB,
getCategories,
getCategories_id,
getActiveCategories,
updateCategory
}
Desde já agradeço pela ajuda.