数据库插件
dependencies:
sqflite: ^2.4.2
class MyState extends State {
String dbPath = "";
Database? database;
///获取数据库路径
void getDBPath() {
Future<String> path = getDatabasesPath();
path.then((value) {
dbPath = value;
print(value);
});
}
void initDB() {
//如果没有word数据库,则会调用onCreate方法创建数据库。
Future<Database> db = openDatabase(
version: 2,
"$dbPath/word.db",
onCreate: (db, version) {
String createSql =
'CREATE TABLE "word" ("id" integer PRIMARY KEY AUTOINCREMENT,"def" text,"pron" text,"word" text)';
db.execute(createSql);
},
onUpgrade: (db, oldVersion, newVersion) {
//当前版本大于原版本,则执行
if (newVersion >= 2) {
db.execute("ALTER TABLE word ADD COLUMN collect integer");
}
print("$oldVersion,$newVersion");
},
);
db.then((value) {
database = value;
print(value);
});
}
Widget build(BuildContext context) {
return DefaultTabController(
length: 5,
child: Scaffold(
appBar: AppBar(title: Text("购物")),
body: Column(
children: [
OutlinedButton(
onPressed: () {
getDBPath();
},
child: Text("获取数据库路径"),
),
OutlinedButton(
onPressed: () {
initDB();
},
child: Text("初始化数据库"),
),
OutlinedButton(
onPressed: () {
if (database == null) {
initDB();
} else {
Future<int>? add = database?.rawInsert(
'INSERT INTO word(id, def, pron, word) VALUES (?,?,?,?)',
[2, "抛弃;放纵", " əˈbændənmənt", "abandonment"],
);
add?.then((value) {
print("添加数据的id:$value");
});
}
},
child: Text("插入数据"),
),
OutlinedButton(
onPressed: () {
if (database == null) {
initDB();
} else {
Future<int>? add = database?.rawUpdate(
'update word set collect = ? where id = ?',
[1, 2],
);
add?.then((value) {
print("修改了$value条");
});
}
},
child: Text("修改数据"),
),
OutlinedButton(
onPressed: () {
if (database == null) {
initDB();
} else {
Future<List<Map<String, Object?>>>? qu = database?.rawQuery(
'select * from word where id = ?',
[2],
);
qu?.then((value) {
print("查询数据:$value");
});
}
},
child: Text("查询数据"),
),
OutlinedButton(
onPressed: () {
if (database == null) {
initDB();
} else {
Future<int>? del = database?.rawDelete(
'delete from word where id = ?',
[2],
);
del?.then((value) {
print("删除了$value条");
});
}
},
child: Text("删除数据"),
),
],
),
),
);
}
}
直接使用db文件的情况
File file = File("$path/school.db");
rootBundle.load("assert/db/school.db").then((value) {
file.writeAsBytes(value.buffer.asUint8List());
},);
Future<Database> db = openDatabas("$path/school.db");