public
interface
DalAdapter
<
T
>
T
QueryInfo
(
SQLiteConnection db,
string
selectSql,
params
Object[] values
)
;
List<T>
QueryList
(
SQLiteConnection db,
string
selectSql,
params
Object[] values
)
;
List<T>
QueryList
(
SQLiteConnection db,
string
selectSql
)
;
using
Model;
using
SQLite;
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Threading;
namespace
DAL
public
class
Dal
<
T
>
protected
string
_tablename =
"tablename"
, _dbname =
""
;
private
DalAdapter<T> __da;
public
static
Semaphore lockTask =
new
Semaphore(
1
,
1
);
public
Dal
(
string
dbName=
null
)
if
(
string
.IsNullOrEmpty(dbName)) dbName = DbFactory.default_db_path;
_tablename =
typeof
(T).Name;
_dbname = dbName;
public
void
Init
(
DalAdapter<T> da
)
__da = da;
public
bool
CreateTable
(
bool
isClear =
true
)
using
(
var
db = GetDb())
int
c = db.CreateTable<T>();
if
(isClear && c ==
0
)
db.DeleteAll<T>();
return
true
;
return
true
;
public
void
UpgradeTable
(
Dictionary<
string
,
string
> fields
)
string
selectSql =
$"pragma table_info (
{_tablename}
)"
;
using
(
var
db = GetDb())
var
list = db.Query<table_info>(selectSql);
if
(list.Count >
0
)
foreach
(
var
field
in
fields)
if
(!list.Exists(p => p.name == field.Key))
db.Execute(
$"ALTER TABLE
{_tablename}
ADD COLUMN
{field.Key}
{field.Value}
"
);
public
bool
InsertInfo
(
T info
)
using
(
var
db = GetDb())
return
db.Insert(info) >
0
;
public
bool
DeleteInfo
(
int
id
)
using
(
var
db = GetDb())
return
db.Delete<T>(id) >
0
;
public
bool
UpdateInfo
(
T info
)
using
(
var
db = GetDb())
return
db.Update(info) >
0
;
public
T
QueryInfo
(
int
id
)
using
(
var
db = GetDb())
return
__da.QueryInfo(db,
$"select * from
{_tablename}
where id=?"
, id);
public
T
QueryInfoFromWhere
(
string
whereSql,
params
Object[] values
)
using
(
var
db = GetDb())
return
__da.QueryInfo(db,
$"select * from
{_tablename}
where "
+whereSql+
" limit 1"
, values);
public
List<T>
QueryListFromWhere
(
string
whereSql,
params
Object[] values
)
using
(
var
db = GetDb())
return
__da.QueryList(db,
$"select * from
{_tablename}
where "
+ whereSql, values);
public
List<T>
QueryListAll
()
using
(
var
db = GetDb())
return
__da.QueryList(db,
$"select * from
{_tablename}
"
);
public
bool
DeleteInfoes
(
List<
int
> ids
)
string
idsStr =
string
.Join(
","
, (
from
f
in
ids
select
f));
using
(
var
db = GetDb())
return
db.Execute(
$"delete from
{_tablename}
where id in (?)"
, idsStr) >
0
;
public
bool
DeleteListAll
()
using
(
var
db = GetDb())
return
db.DeleteAll<T>()>
0
;
public
bool
UpdateInfoes
(
List<T> infoes
)
using
(
var
db = GetDb())
return
db.UpdateAll(infoes)>
0
;
public
SQLiteConnection
GetDb
()
string
dbPath = DbFactory.getAppDataPath(_dbname);
lockTask.WaitOne();
return
new
SQLiteConnection(dbPath,
new
Action(() => { lockTask.Release(); }));
综上所述,基本实现例子如下:
数据库是SQLite, 依赖于sqlite3.dll文件,分x86或x64,
下载地址
一, 写好一个数据模型类, 类名随意
publilc class ModelName{
[PrimaryKey, Autoincrement]
public int id = 0;
public string name { set; get; }
public int age { set; get; }}
二,在写一个数据模型操作的类,类名与数据模型类名一似,以便区分
public class ModeNameDal : Dal<ModeName>, DalAdapter<ModeName>
public ModeName()
init(this);
三, 接下来就可以创建和操作数据库模型
var dal = new ModeNameDal();
var info = dal.QueryInfo(0);
if (info != null)
var list = dal.QueryListAll();
复制代码