居天下之广居,立天下之正位,行天下之大道;得志,与民由之;不得志,独行其道。富贵不能淫,贫贱不能移,威武不能屈,此之谓大丈夫。
本文目录
前言
在实际的项目中,如果碰到一个数据库操作,就使用一条SQL语句对数据库操作,那么不仅仅代码非常杂乱,而且弄不好可能造成内存溢出,所以我们常常需要封装SQL操作,封装成SQLHelpers来进行操作。
有过后端开发经验的程序员来说,都或多或少使用过SQLHelpers的帮助类,下面,博主通过一个例子详解SQLHelpers如何封装。
封装SQLHelpers
假如现在博主这里有一个需求,需要做一个新闻类的App,新闻有标题和详细信息,那么如何创建一个SQLHelpers来操作新闻数据呢?不妨直接上代码把:
import 'package:sqflite/sqflite.dart';
final String tableNew='news';
final String columnId='_Id';
final String columnTitle='title';
final String columnDet='detailed';
class News{
int id;
String title;
String detailed;
/***
* 将数据转换为键值对
*/
Map<String,dynamic> toMap() {
var map = <String, dynamic>{
columnTitle: title,
columnDet: detailed,
};
if (id != null) {
map[columnId] = id;
}
return map;
}
News();
/***
* 将数据转换为类
*/
News.fromMap(Map<String,dynamic> map){
id=map[columnId];
title=map[columnTitle];
detailed=map[detailed];
}
}
class NewsProvider{
Database db;
/***
* 打开数据库并创建表格
*/
Future open(String path) async{
db=await openDatabase(path,version: 1,onCreate: (Database db,int version) async{
await db.execute('''
create table $tableNew(
$columnId integer primary key autoincrement,
$columnTitle text not null,
$columnDet text not null)
''');
});
}
/***
* 插入数据
*/
Future<News> insert(News news) async{
news.id=await db.insert(tableNew, news.toMap());
return news;
}
/***
* 根据ID获取数据
*/
Future<News> getNews(int id)async{
List<Map> maps=await db.query(
tableNew,
columns: [columnId