热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

FlutterSqflite数据库增删改查源代码

亲测可用: main.dartimportpackage:fluttermaterial.dart;importpackage:flutter_ssh2_testsqflite_p

亲测可用:

 

main.dart

=================================

import 'package:flutter/material.dart';

import 'package:flutter_ssh2_test/sqflite_page.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: 'Flutter Demo',

      theme: ThemeData(

        primarySwatch: Colors.orange,

      ),

      home: MyHomePage(title: 'Flutter学习'),

      routes: {

        sqfliteRoute: (BuildContext context) => SqflitePage(),

      },

    );

  }

}


const String sqfliteRoute = "SqfliteRoute";


class MyHomePage extends StatefulWidget {

  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;


  @override

  _MyHomePageState createState() => _MyHomePageState();

}


class _MyHomePageState extends State {

  @override

  Widget build(BuildContext context) {

    return Scaffold(

        appBar: AppBar(

          // Here we take the value from the MyHomePage object that was created by

          // the App.build method, and use it to set our appbar title.

          title: Text(widget.title),

        ),

        body: Center(

          child: Column(

            mainAxisAlignment: MainAxisAlignment.center,

            children: [

              RaisedButton(

                onPressed: () {

                  Navigator.of(context).pushNamed(sqfliteRoute);

                },

                child: Text(

                  "sqflite",

                  style: TextStyle(fontSize: 18),

                ),

              )

            ],

          ),

        ) // This trailing comma makes auto-formatting nicer for build methods.

        );

  }

}

 

======================================================

sqflite_page.dart:

 

========================================================

 

import 'package:flutter/material.dart';

import 'package:sqflite/sqflite.dart';

import 'package:path/path.dart';

import 'package:fluttertoast/fluttertoast.dart';



class SqflitePage extends StatefulWidget {

  @override

  State createState() {

    // TODO: implement createState

    return _SqflitePageState();

  }

}


class _SqflitePageState extends State {

  TextEditingController _nameCOntroller= new TextEditingController();

  TextEditingController _ageCOntroller= new TextEditingController();

  String _data = "暂无数据";

  String _dbName = 'user.db'; //数据库名称


  String _createTableSQL =

      'CREATE TABLE student_table (id INTEGER PRIMARY KEY, name TEXT,age INTEGER)'; //创建学生表;

  int _dbVersion = 1; //数据库版本


  @override

  void initState() {

    super.initState();

    //创建数据库、学生表

    _createDb(_dbName, _dbVersion, _createTableSQL);

  }


  @override

  Widget build(BuildContext context) {

    // TODO: implement build

    return Scaffold(

      appBar: AppBar(

        iconTheme: IconThemeData(color: Colors.white),

        title: Text(

          "sqflite数据存储",

          style: TextStyle(color: Colors.white),

        ),

      ),

      body: Container(

        padding: EdgeInsets.all(20),

        child: Column(

          children: [

            Center(

              child: Text(

                "设置进入程序默认创建数据库和一张学生表,如下可对表的姓名、年龄进行增删改查操作:",

                style: TextStyle(fontSize: 14, color: Color(0xff666666)),

              ),

            ),

            Padding(padding: EdgeInsets.only(top: 10)),

            _getNameInputView(),

            Padding(padding: EdgeInsets.only(top: 10)),

            _getAgeInputView(),

            Padding(padding: EdgeInsets.only(top: 30)),

            _getAddBtnView(),

            Padding(padding: EdgeInsets.only(top: 10)),

            _getdeleteBtnView(),

            Padding(padding: EdgeInsets.only(top: 10)),

            _getUpdateBtnView(),

            Padding(padding: EdgeInsets.only(top: 10)),

            _getQueryBtnView(),

            Padding(padding: EdgeInsets.only(top: 30)),

            Text(

              _data,

              style: TextStyle(color: Colors.red, fontSize: 18),

            )

          ],

        ),

      ),

      resizeToAvoidBottomInset: false,

    );

  }


  _getNameInputView() {

    return TextField(

      keyboardType: TextInputType.text,

      style: TextStyle(color: Color(0xFF888888)),

      controller: _nameController,

      decoration: InputDecoration(

        hintText: "姓名",

        hintStyle: TextStyle(color: Color(0xFF888888)),

        contentPadding:

            EdgeInsets.only(left: 10, right: 10, bottom: 10, top: 10),

        border: OutlineInputBorder(

          borderRadius: BorderRadius.circular(8.0),

        ),

      ),

    );

  }


  _getAgeInputView() {

    return TextField(

      keyboardType: TextInputType.text,

      style: TextStyle(color: Color(0xFF888888)),

      controller: _ageController,

      decoration: InputDecoration(

        hintText: "年龄",

        hintStyle: TextStyle(color: Color(0xFF888888)),

        contentPadding:

            EdgeInsets.only(left: 10, right: 10, bottom: 10, top: 10),

        border: OutlineInputBorder(

          borderRadius: BorderRadius.circular(8.0),

        ),

      ),

    );

  }


  _getAddBtnView() {

    return RaisedButton(

        onPressed: () {

          if (_nameController.text == null || _nameController.text == "") {

            Fluttertoast.showToast(

                msg: "插入数据不能为空!", backgroundColor: Colors.orange);

            return;

          }

          if (_ageController.text == null || _ageController.text == "") {

            Fluttertoast.showToast(

                msg: "插入数据不能为空!", backgroundColor: Colors.orange);

            return;

          }

          String sql =

              "INSERT INTO student_table(name,age) VALUES('${_nameController.text}','${_ageController.text}')";

          _add(_dbName, sql);

        },

        child: Text(

          "插入数据",

          style: TextStyle(color: Colors.white, fontSize: 18),

        ),

        color: Colors.orange,

        shape: RoundedRectangleBorder(

          borderRadius: BorderRadius.circular(5),

        ));

  }


  _getdeleteBtnView() {

    return RaisedButton(

        onPressed: () {

          String sql = "DELETE FROM student_table"; //无条件删除学生表数据

          _delete(_dbName, sql);

        },

        child: Text(

          "删除数据",

          style: TextStyle(color: Colors.white, fontSize: 18),

        ),

        color: Colors.orange,

        shape: RoundedRectangleBorder(

          borderRadius: BorderRadius.circular(5),

        ));

  }


  _getUpdateBtnView() {

    return RaisedButton(

        onPressed: () {

          if (_nameController.text == null || _nameController.text == "") {

            Fluttertoast.showToast(

                msg: "姓名不能为空!", backgroundColor: Colors.orange);

            return;

          }


          String sql = "UPDATE student_table SET name =? WHERE id = ?";

          _update(_dbName, sql, [_nameController.text, 1]);

        },

        child: Text(

          "修改姓名数据",

          style: TextStyle(color: Colors.white, fontSize: 18),

        ),

        color: Colors.orange,

        shape: RoundedRectangleBorder(

          borderRadius: BorderRadius.circular(5),

        ));

  }


  _getQueryBtnView() {

    return RaisedButton(

        onPressed: () {

          String sql = 'SELECT * FROM student_table';

          _query(_dbName, sql);

        },

        child: Text(

          "查询数据",

          style: TextStyle(color: Colors.white, fontSize: 18),

        ),

        color: Colors.orange,

        shape: RoundedRectangleBorder(

          borderRadius: BorderRadius.circular(5),

        ));

  }


  ///创建数据库db

  _createDb(String dbName, int vers, String dbTables) async {

    //获取数据库路径

    var databasesPath = await getDatabasesPath();

    String path = join(databasesPath, dbName);

    print("数据库路径:$path数据库版本$vers");

    //打开数据库

    await openDatabase(path, version: vers,

        onUpgrade: (Database db, int oldVersion, int newVersion) async {

      //数据库升级,只回调一次

      print("数据库需要升级!旧版:$oldVersion,新版:$newVersion");

    }, onCreate: (Database db, int vers) async {

      //创建表,只回调一次

      await db.execute(dbTables);

      await db.close();

    });


    setState(() {

      _data = "成功创建数据库db!\n数据库路径: $path \n数据库版本$vers";

    });

  }


  ///增

  _add(String dbName, String sql) async {

    //获取数据库路径

    var databasesPath = await getDatabasesPath();

    String path = join(databasesPath, dbName);

    print("数据库路径:$path");


    Database db = await openDatabase(path);

    await db.transaction((txn) async {

      int count = await txn.rawInsert(sql);

    });

    await db.close();


    setState(() {

      _data = "插入数据成功!";

    });

  }


  ///删

  _delete(String dbName, String sql) async {

    var databasesPath = await getDatabasesPath();

    String path = join(databasesPath, dbName);


    Database db = await openDatabase(path);

    int count = await db.rawDelete(sql);

    await db.close();


    if (count > 0) {

      setState(() {

        _data = "执行删除操作完成,该sql删除条件下的数目为:$count";

      });

    } else {

      setState(() {

        _data = "无法执行删除操作,该sql删除条件下的数目为:$count";

      });

    }

  }


  ///改

  _update(String dbName, String sql, List arg) async {

    var databasesPath = await getDatabasesPath();

    String path = join(databasesPath, dbName);


    Database db = await openDatabase(path);

    int count = await db.rawUpdate(sql, arg); //修改条件,对应参数值

    await db.close();

    if (count > 0) {

      setState(() {

        _data = "更新数据库操作完成,该sql删除条件下的数目为:$count";

      });

    } else {

      setState(() {

        _data = "无法更新数据库,该sql删除条件下的数目为:$count";

      });

    }

  }


  ///查条数

  _getQueryNum(String dbName, String sql) async {

    var databasesPath = await getDatabasesPath();

    String path = join(databasesPath, dbName);


    Database db = await openDatabase(path);

    int? count = Sqflite.firstIntValue(await db.rawQuery(sql));

    await db.close();

    return count;

  }


  ///查全部

  _query(String dbName, String sql) async {

    var databasesPath = await getDatabasesPath();

    String path = join(databasesPath, dbName);


    Database db = await openDatabase(path);

    List list = await db.rawQuery(sql);

    await db.close();

    setState(() {

      _data = "数据详情:$list";

    });

  }

}

 

==================================================================

 

 



推荐阅读
author-avatar
安茂友恢复_172
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有