要导入的第三方库:
sqflite: ^1.1.7+1
path_provider: ^1.4.0
main.dart:
import 'package:flutter/material.dart';
import 'package:prac_sqlite/db_helpers.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'sqlite练习',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State {
List eventList = List();
final TextEditingController textTitleEditingController =
new TextEditingController();
final TextEditingController queryName =
new TextEditingController();
final TextEditingController updateName =
new TextEditingController();
create_database(){
print("onclick create database");
// DBProvider.db.initDB();
final db = DBProvider.db.database;
}
query_database(name){
Future user = DBProvider.db.getUser_name(name);
user.then((user) => print("单用户查询成功"));
}
add_database(user){
DBProvider.db.insert(user);
}
query_all_database(){
Future> users = DBProvider.db.getAllUser();
users.then((users) => print(users.last.name));
users.then((users) => print(users.length));
}
update_database(user){
user.name = "new gsky";
user.id = 22;
DBProvider.db.update_by_id(user);
Future user_res = DBProvider.db.getUser_by_name("new gsky");
user_res.then((user_res) => print(user_res.name));
}
delete_database(){
DBProvider.db.delete_by_name("gsky123");
}
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: ListView(
children: [
RaisedButton(
child: Text("点击创建数据库"),
onPressed:(){
create_database();
},
),
TextField(
controller: queryName,
autofocus: true,
decoration: new InputDecoration(
hintText: '请输入用户名',
),
),
RaisedButton(
child: Text("查询数据库此用户数据"),
onPressed:(){
String name = textTitleEditingController.text;
query_database(name);
},
),
TextField(
controller: textTitleEditingController,
autofocus: true,
decoration: new InputDecoration(
hintText: '请输入用户名',
),
),
RaisedButton(
child: Text("增加一个数据"),
onPressed:(){
User user = User();
user.name = textTitleEditingController.text;
add_database(user);
},
),
RaisedButton(
child: Text("查询数据库所有数据"),
onPressed:(){
query_all_database();
},
),
TextField(
controller: updateName,
autofocus: true,
decoration: new InputDecoration(
hintText: '请输入用户名',
),
),
RaisedButton(
child: Text("更新数据 By Name"),
onPressed:(){
User user = User();
user.name = updateName.text;
update_database(user);
},
),
RaisedButton(
child: Text("删除一条数据"),
onPressed:(){
delete_database();
},
),
],
)
)
);
}
}
辅助类 db_helpers.dart:
import 'dart:io';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:sqflite/sqflite.dart';
final String tableUser = 'user';
final String columnId = '_id';
final String columnName = 'name';
class User {
int id;
String name;
Map toMap() {
var map = {
columnName: name,
};
if (id != null) {
map[columnId] = id;
}
return map;
}
User();
User.fromMap(Map map) {
id = map[columnId];
name = map[columnName];
}
}
class DBProvider {
DBProvider._();
static final DBProvider db = DBProvider._();
Database _database;
Future get database async {
if (_database != null) {
return _database;
}
_database = await initDB();
print("创建新数据库");
return _database;
}
initDB() async {
Directory documentsDirectory = await getApplicationDocumentsDirectory();
String path = join(documentsDirectory.path, "UserDB.db");
return await openDatabase(path, version: 1, onOpen: (db) {},
onCreate: (Database db, int version) async {
await db.execute('''
create table $tableUser (
$columnId integer primary key autoincrement,
$columnName text not null)
''');
});
}
Future insert(User user) async {
final db = await database;
user.id = await db.insert(tableUser, user.toMap());
return user;
}
Future getUser(int id) async {
final db = await database;
List