database - 如何在颤振sqlite中制作表格?
问题描述
我的颤振代码中有一个错误,我想创建一个简单的数据库并对其进行测试。我有一个代码,但是当我点击必须返回我在表中添加的项目数的按钮时,控制台给了我一个错误。
E/SQLiteLog(5696):(1)没有这样的表:“插入数据(id,标题,文本)值(?,?,?)”中的数据 E/flutter(5696):[错误:flutter/lib/ ui/ui_dart_state.cc(199)] 未处理的异常:DatabaseException(没有这样的表:数据(代码 1 SQLITE_ERROR):,编译时:插入数据(id,标题,文本)值(?,?,?)) sql ' INSERT INTO datas (id, title, text) VALUES (?, ?, ?)' args [1, l, 1]} 这是我的数据库助手文件
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';
import 'dataclass.dart';
class DatabaseHelper {
Future<Database> initializeDB() async {
String path = await getDatabasesPath();
return openDatabase(
join(path, 'example.db'),
onCreate: (Database database, version) async {
await database.execute(
'CREATE TABLE datas(id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL,text TEXT NOT NULL)',
);
},
version: 1,
);
}
Future<int> insertUser(List<Data> data) async {
int result = 0;
final Database db = await initializeDB();
for (var data in data) {
result = await db.insert('datas', data.toMap());
}
return result;
}
Future<List<Map<String, Object?>>> retrieveUsers() async {
final Database db = await initializeDB();
final List<Map<String, Object?>> queryResult = await db.query('datas');
return queryResult;
}
}
这是我的应用程序设计的主要文件
import 'package:flutter/material.dart';
import 'package:sharetest/test.dart';
import 'package:sqflite/sqflite.dart';
import 'dataclass.dart';
import 'dbhelper.dart';
TextEditingController t = TextEditingController();
void main()
{WidgetsFlutterBinding.ensureInitialized();
runApp(MyApp());}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(primarySwatch: Colors.blue),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
late DatabaseHelper helper;
@override
void initState() {
// TODO: implement initState
super.initState();
this.helper = DatabaseHelper();
this.helper.initializeDB();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Saving data'),
),
body: Center(
child: Container(
alignment: Alignment.center,
child: Column(
children: [
FlatButton(
onPressed: ()async {
Data d= Data(id:1,title: "l",text: "1");
List<Data> l=[d];
int i= await this.helper.insertUser(l);
print('Sucsecc'+i.toString());
},
child: Text("insert")),
FlatButton(
onPressed: () {
},
child: Text("query")),
FlatButton(
onPressed: () {
},
child: Text("update")),
FlatButton(
onPressed: () {
},
child: Text("delete")),
],
),
),
),
);
}
}
这是我的数据类文件
class Data {
late final int? id;
late final String title;
late final String text;
Data({
this.id,
required this.title,
required this.text,
});
// Convert a Dog into a Map. The keys must correspond to the names of the
// columns in the database.
Data.fromMap(Map<String,dynamic> res, this.id, this.title, this.text)
{
id=res["id"];
title=res['title'];
text= res['text'];
}
Map<String, Object?> toMap() {
return {'id':id,'title':title,'text':text};
}
}
解决方案
推荐阅读
- javascript - 使用方括号表示法访问具有“n”级深度对象的嵌套对象
- visual-studio - 发布时从 3rd 方 Blazor 库中选择 wwwroot/_content/ 文件
- python - 通过 python SDK 将用户分配给 Azure Active Directory 企业应用程序
- rxjs - Observable 多次发出请求并一起收集响应
- html - CSS 网格 - 如何居中
- mysql - 在 WHERE 子句中使用子查询,但每个子查询结果限制为一个匹配项
- python-3.x - 带有 pil 图像的 tkinter 的奇怪行为
- javascript - 无法在反应类中声明常量
- python - Python单线程比CPU绑定中的两个线程慢
- javascript - 带有文本输入的自定义对话框 React Native