После добавления данных в локальную базу данных sqflite. Я постоянно получаю это предупреждение:
база данных заблокирована на 0:00:10.000000. Убедитесь, что вы всегда используете
объект транзакции для операций с базой данных во время транзакции.
И приложение не работает гладко. class DBHelper {
static Database? _db;
Future get db async {
if (_db != null) return _db;
_db = await initDatabase();
return _db;
}
Future initDatabase() async {
io.Directory documentDirectory = await getApplicationDocumentsDirectory();
String path = join(documentDirectory.path,"cart.db");
var db = await openDatabase(path, version: 1, onCreate: _onCreate);
return db;
}
Future _onCreate(Database db, int version) async {
await db.execute(
'CREATE TABLE cart (id INTEGER PRIMARY KEY,user_id INTEGER ,item_id
INTEGER,main_item_id INTEGER,name TEXT,price REAL, qty INTEGER, type TEXT, image
TEXT, created_at TEXT, updated_at TEXT )');
}
// Insert a cart item
Future insert(getMyCart cart) async {
var dbClient = await db;
await dbClient!.insert('cart', cart.toJson());
return cart;
}
// Retrieve the list of cart items
Future getCartList() async {
var dbClient = await db;
final List queryResult =
await dbClient!.query('cart');
return queryResult.map((e) => getMyCart.fromJson(e)).toList();
}
// Delete a cart item by id
Future delete(int? id) async {
var dbClient = await db;
return await dbClient!.delete('cart', where: "id = ?", whereArgs: [id]);
}
// Delete all cart items
Future deleteAll() async {
var dbClient = await db;
await dbClient!.delete('cart');
}
// Update the quantity of a cart item
Future updateQuantity(getMyCart cart) async {
var dbClient = await db;
return await dbClient!
.update('cart', cart.toJson(), where: "id = ?", whereArgs: [cart.id]);
}
// Check if an item exists in the cart
Future itemExists(id) async {
var result = await _db!.rawQuery(
'SELECT EXISTS(SELECT * FROM cart WHERE item_id="$id")',
);
int? exists = Sqflite.firstIntValue(result);
return exists == 1;
}
Future itemExist(id) async {
dynamic result;
int? exists;
if (_db != null) {
result = await _db!.rawQuery(
'SELECT EXISTS(SELECT * FROM cart WHERE item_id="$id")',
);
exists = Sqflite.firstIntValue(result);
} else {
exists = 0;
}
return exists == 1;
}
Onclick кнопки «Купить» Я добавляю данные в локальную базу данных. Код onClick кнопки Buyonce приведен ниже: -
GestureDetector(
onTap: () async {
if (getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.addonAdded ==
1) {
if (!itemCountMap.containsKey(
getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id)) {
itemCountMap[getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id] = 1;
}
await showBottomSheet(
context,
getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index],
itemCountMap[getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id] ==
0
? 1
: itemCountMap[
getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id],
false)
.then((onVal) async {
if (onVal != null) {
await cart.getData().then((cartItemList) {
if (cartItemList.isNotEmpty) {
setState(() {
myCartList = cartItemList;
itemCountMap[getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id] = onVal;
updateCount();
isbuynowclicked = selecteditemindex;
selecteditemindex = index;
});
}
});
}
});
if (itemCountMap[getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id] ==
0) {
itemCountMap[getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id] = 1;
}
buynowClicked[getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id] = true;
selecteditemindex = index;
isbuynowclicked = selecteditemindex;
} else {
bool isItemExist = await dbHelper.itemExists(
getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id);
if (isiteminCart == false && isItemExist == false) {
await dbHelper
.insert(my_cart_model.getMyCart(
id: getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id,
userId: globalCurrentUserData.id,
itemId: getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id,
name: getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.name,
price: getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.offerPrice,
qty: 1,
type: getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.type,
image: getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.image,
createdAt: DateTime.now().toString(),
updatedAt: DateTime.now().toString()))
.then((result) async {
await cart.getData().then((cartItemList) {
if (cartItemList.isNotEmpty) {
for (int i = 0; i < cartItemList.length; i++) {
if (cartItemList.itemId ==
getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id) {
setState(() {
buynowClicked[
getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id] = true;
selecteditemindex = index;
itemCountMap[
getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id] = cartItemList.qty!;
isbuynowclicked = selecteditemindex;
myCartList = cartItemList;
updateCount();
});
}
}
}
});
});
}
}
},
child: (cartobj.itemId ==
getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id)
? Padding(
padding: const EdgeInsets.only(right: 5),
child: counterContainer(
index,
getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index],
cartobj,
cart),
)
: Container(
width: 100.w, //100,//155,
height: 40.h, //37,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10 //6 //3
),
border: Border.all(
width: 1,
color: const Color.fromRGBO(49, 164, 113, 1),
),
),
child: Center(
child: Text(
buynowBtnText,
style: GoogleFonts.metrophobic(
fontSize: 13,
fontWeight: FontWeight.w600,
color: const Color.fromRGBO(49, 164, 113, 1),
),
),
),
),
),
Подробнее здесь: https://stackoverflow.com/questions/790 ... 010-000000
В приложении Flutter я получаю предупреждение: база данных заблокирована на 0:00:10.000000. ⇐ Android
Форум для тех, кто программирует под Android
1726805040
Anonymous
После добавления данных в локальную базу данных sqflite. Я постоянно получаю это предупреждение:
база данных заблокирована на 0:00:10.000000. Убедитесь, что вы всегда используете
объект транзакции для операций с базой данных во время транзакции.
И приложение не работает гладко. class DBHelper {
static Database? _db;
Future get db async {
if (_db != null) return _db;
_db = await initDatabase();
return _db;
}
Future initDatabase() async {
io.Directory documentDirectory = await getApplicationDocumentsDirectory();
String path = join(documentDirectory.path,"cart.db");
var db = await openDatabase(path, version: 1, onCreate: _onCreate);
return db;
}
Future _onCreate(Database db, int version) async {
await db.execute(
'CREATE TABLE cart (id INTEGER PRIMARY KEY,user_id INTEGER ,item_id
INTEGER,main_item_id INTEGER,name TEXT,price REAL, qty INTEGER, type TEXT, image
TEXT, created_at TEXT, updated_at TEXT )');
}
// Insert a cart item
Future insert(getMyCart cart) async {
var dbClient = await db;
await dbClient!.insert('cart', cart.toJson());
return cart;
}
// Retrieve the list of cart items
Future getCartList() async {
var dbClient = await db;
final List queryResult =
await dbClient!.query('cart');
return queryResult.map((e) => getMyCart.fromJson(e)).toList();
}
// Delete a cart item by id
Future delete(int? id) async {
var dbClient = await db;
return await dbClient!.delete('cart', where: "id = ?", whereArgs: [id]);
}
// Delete all cart items
Future deleteAll() async {
var dbClient = await db;
await dbClient!.delete('cart');
}
// Update the quantity of a cart item
Future updateQuantity(getMyCart cart) async {
var dbClient = await db;
return await dbClient!
.update('cart', cart.toJson(), where: "id = ?", whereArgs: [cart.id]);
}
// Check if an item exists in the cart
Future itemExists(id) async {
var result = await _db!.rawQuery(
'SELECT EXISTS(SELECT * FROM cart WHERE item_id="$id")',
);
int? exists = Sqflite.firstIntValue(result);
return exists == 1;
}
Future itemExist(id) async {
dynamic result;
int? exists;
if (_db != null) {
result = await _db!.rawQuery(
'SELECT EXISTS(SELECT * FROM cart WHERE item_id="$id")',
);
exists = Sqflite.firstIntValue(result);
} else {
exists = 0;
}
return exists == 1;
}
Onclick кнопки «Купить» Я добавляю данные в локальную базу данных. Код onClick кнопки Buyonce приведен ниже: -
GestureDetector(
onTap: () async {
if (getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.addonAdded ==
1) {
if (!itemCountMap.containsKey(
getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id)) {
itemCountMap[getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id] = 1;
}
await showBottomSheet(
context,
getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index],
itemCountMap[getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id] ==
0
? 1
: itemCountMap[
getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id],
false)
.then((onVal) async {
if (onVal != null) {
await cart.getData().then((cartItemList) {
if (cartItemList.isNotEmpty) {
setState(() {
myCartList = cartItemList;
itemCountMap[getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id] = onVal;
updateCount();
isbuynowclicked = selecteditemindex;
selecteditemindex = index;
});
}
});
}
});
if (itemCountMap[getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id] ==
0) {
itemCountMap[getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id] = 1;
}
buynowClicked[getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id] = true;
selecteditemindex = index;
isbuynowclicked = selecteditemindex;
} else {
bool isItemExist = await dbHelper.itemExists(
getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id);
if (isiteminCart == false && isItemExist == false) {
await dbHelper
.insert(my_cart_model.getMyCart(
id: getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id,
userId: globalCurrentUserData.id,
itemId: getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id,
name: getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.name,
price: getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.offerPrice,
qty: 1,
type: getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.type,
image: getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.image,
createdAt: DateTime.now().toString(),
updatedAt: DateTime.now().toString()))
.then((result) async {
await cart.getData().then((cartItemList) {
if (cartItemList.isNotEmpty) {
for (int i = 0; i < cartItemList.length; i++) {
if (cartItemList[i].itemId ==
getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id) {
setState(() {
buynowClicked[
getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id] = true;
selecteditemindex = index;
itemCountMap[
getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id] = cartItemList[i].qty!;
isbuynowclicked = selecteditemindex;
myCartList = cartItemList;
updateCount();
});
}
}
}
});
});
}
}
},
child: (cartobj.itemId ==
getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index]
.id)
? Padding(
padding: const EdgeInsets.only(right: 5),
child: counterContainer(
index,
getcategoryList[selectedCategoryIndex]
.subCategory![selectedSubcategoryIndex]
.item![index],
cartobj,
cart),
)
: Container(
width: 100.w, //100,//155,
height: 40.h, //37,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10 //6 //3
),
border: Border.all(
width: 1,
color: const Color.fromRGBO(49, 164, 113, 1),
),
),
child: Center(
child: Text(
buynowBtnText,
style: GoogleFonts.metrophobic(
fontSize: 13,
fontWeight: FontWeight.w600,
color: const Color.fromRGBO(49, 164, 113, 1),
),
),
),
),
),
Подробнее здесь: [url]https://stackoverflow.com/questions/79002122/in-flutter-app-i-am-getting-warning-database-has-been-locked-for-00010-000000[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия