Flutter自建sqlite数据库

要导入的第三方库:

  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 maps = await db.query(tableUser,
        columns: [columnId, columnName],
        where: '$columnId = ?',
        whereArgs: [id]);
    if (maps.length > 0) {
      return User.fromMap(maps.first);
    }
    return null;
  }

    Future getUser_by_name(String name) async {
    final db = await database;
    List maps = await db.query(tableUser,
        columns: [columnId, columnName],
        where: '$columnName = ?',
        whereArgs: [name]);
    if (maps.length > 0) {
      return User.fromMap(maps.first);
    }
    return null;
  }

  Future> getAllUser() async {
    final db = await database;
    var res = await db.query("User");
    List list =
        res.isNotEmpty ? res.map((c) => User.fromMap(c)).toList() : [];
        print(list);
    return list;
  }

  Future delete_by_id(int id) async {
    final db = await database;
    return await db.delete(tableUser, where: '$columnId = ?', whereArgs: [id]);
  }

  Future delete_by_name(String name) async {
    final db = await database;
    return await db.delete(tableUser, where: '$columnName = ?', whereArgs: [name]);
  }

  Future update_by_id(User user) async {
    final db = await database;
    return await db.update(tableUser, user.toMap(),
        where: '$columnId = ?', whereArgs: [user.id]);
  }

  //
   Future update_by_name(User user) async {
    final db = await database;
    return await db.update(tableUser, user.toMap(),
        where: '$columnName = ?', whereArgs: [user.name]);
  }

  removeAll() async {
    final db = await database;
    db.delete(tableUser);
  }

  Future close() async {
    final db = await database;
    db.close();
  }
}

你可能感兴趣的:(Flutter自建sqlite数据库)