打开APP
未登录
开通VIP,畅享免费电子书等14项超值服
开通VIP
首页
好书
留言交流
下载APP
联系客服
sqlite3操作
mrjbydd
>《专业》
2015.03.19
关注
/
*
*
*
交易记录数据库模块
*
模块功能
:
对交易记录数据库系统进行各种操作
*
Author
:
Lzy
*
Greate Dat
:
2012
.
11
.
01
*
/
#include
<
stdio
.
h
>
#include
<
sys
/
ioctl
.
h
>
#include
<
string
.
h
>
#include
<
fcntl
.
h
>
#include
<
sys
/
types
.
h
>
#include
<
sys
/
stat
.
h
>
#include
<
sys
/
time
.
h
>
#include
<
signal
.
h
>
#include
<
stdlib
.
h
>
#include
"
sqlite
3.h"
#define
SQLITE
_MENU
"/home/"
#define MAX_DB 32
#define TABLE_NAME
"SensorData"
typedef struct
{
unsigned
int
id
;
sqlite
3
*
db
;
}
sqlite
_db
;
sqlite
_db user_db
[
MAX_DB
]
;
int
volid_db
(
void
)
{
int
i
;
for
(
i
=
0
;
i
<
MAX_DB
;
i
+
+
)
{
if
(
user_db
[
i
]
.
id
=
=
0
)
break
;
}
if
(
i
>
=
MAX_DB
)
return
-
1
;
return i
;
}
int
volid_db_item
(
int
item
)
{
int
i
;
for
(
i
=
0
;
i
<
MAX_DB
;
i
+
+
)
{
if
(
user_db
[
i
]
.
id
=
=
item
)
break
;
}
if
(
i
>
=
MAX_DB
)
return
-
1
;
return i
;
}
/
*
*
*
函数功能:创建交易记录数据库(数据库不能重名)并且名字不能超过16字节
*
*
pucDBName
:
数据库名指针
*
uiRecLen
:
16
~
4090字节
,
该数据库的记录长度
*
返回值 0x0A 内存变量校验出错 0x00 成功 0x0B 数据库系统崩溃 0x04 输入错误 0x0
C
数据库已经存在 0x0E 数据库已经打开,不能删除
*
/
int
ST_DBCreate
(
char
*
pucDBName
,
unsigned
int
uiRecLen
)
{
sqlite
3
*
db
=
NULL
;
char sql
[
512
]
;
char
*
zErrMsg
=
NULL
;
int
rc
;
printf
(
"ST_DBCreate\n"
)
;
char fullname
[
100
]
;
strcpy
(
fullname
,
SQLITE
_MENU
)
;
strcat
(
fullname
,
pucDBName
)
;
rc
=
sqlite
3_open
(
fullname
,
&
db
)
;
/
*
打开数据库
*
/
if
(
rc
)
{
printf
(
"get db %s error\n"
,
pucDBName
)
;
sqlite
3_close
(
db
)
;
return 0x0b
;
}
else
printf
(
"get db sucess\n"
)
;
sprintf
(
sql
,
"CREATE TABLE %s(ID INTEGER PRIMARY KEY,RECORD VARCHAR(%d));"
,
TABLE_NAME
,
uiRecLen
)
;
rc
=
sqlite
3_exec
(
db
,
sql
,
NULL
,
NULL
,
&
zErrMsg
)
;
if
(
rc
!
=
SQLITE
_OK
)
{
printf
(
"zErrMsg = %s \n"
,
zErrMsg
)
;
return 0x0
c
;
}
else
return 0
;
}
/
*
*
*
函数功能:删除交易记录数据库
*
pszDBName
:
记录数据库名
*
返回值
:
0x0A
-
-
>
内存变量校验出错
:
0x00
-
-
>
成功
:
0x0B
-
-
>
数据库系统崩溃
:
0x02
-
-
>
数据库不存在
:
0x04
-
-
>
输入错误
:
0x08
-
-
>
打开失败,已经打开了32个数据库
:
0x0E
-
-
>
数据库已经打开
*
/
int
ST_DBDel
(
char
*
pszDBName
)
{
char fullname
[
40
]
;
char cmd
[
256
]
;
printf
(
"ST_DBDel\n"
)
;
strcpy
(
fullname
,
SQLITE
_MENU
)
;
strcat
(
fullname
,
pszDBName
)
;
sprintf
(
cmd
,
"rm %s"
,
fullname
)
;
if
(
system
(
cmd
)
=
=
-
1
)
{
printf
(
"rm error\n"
)
;
return 0x04
;
}
return 0x00
;
}
/
*
*
*
函数功能:打开交易记录数据库
*
pcDBName
:
数据库名指针
,
最多9字节
*
pucDBId
:
1
~
32
,
返回的数据库指针
*
返回值
:
0x0A
-
-
>
内存变量校验出错
:
0x00
-
-
>
成功
:
0x0B
-
-
>
数据库系统崩溃
:
0x02
-
-
>
数据库不存在
:
0x04
-
-
>
输入错误
:
0x08
-
-
>
打开失败,已经打开了32个数据库
:
0x0E
-
-
>
数据库已经打开
*
/
int
ST_DBOpen
(
char
*
pcDBName
,
unsigned char
*
pucDBId
)
{
int
item
;
sqlite
3
*
db
=
NULL
;
int
rc
;
char fullname
[
40
]
;
/
/
printf
(
"ST_DBOpen %s\n"
,
*
pcDBName
)
;
item
=
volid_db
(
)
;
if
(
item
=
=
-
1
)
return 0x08
;
strcpy
(
fullname
,
SQLITE
_MENU
)
;
strcat
(
fullname
,
pcDBName
)
;
rc
=
sqlite
3_open
(
fullname
,
&
db
)
;
printf
(
"open db %s \n"
,
fullname
)
;
if
(
!
db
)
{
printf
(
"open db %s error\n"
,
fullname
)
;
return 0x0b
;
}
memcpy
(
&
user_db
[
item
]
.
db
,
&
db
,
sizeof
(
db
)
)
;
user_db
[
item
]
.
id
=
item
+
1
;
*
pucDBId
=
user_db
[
item
]
.
id
;
printf
(
"id=%d\n"
,
*
pucDBId
)
;
return 0
;
}
/
*
*
*
函数功能: 执行读交易记录操作
*
ucDBId
:
1
~
32
,
数据库文件号
*
nRecNo
:
表示读的起始记录号
,
记录号
*
nRecCount
:
表示要读的记录数
,
记录条数
*
szString
:
表示读入指针
,
记录指针
*
pnLen
:
读出记录的长度指针
,
记录长度
*
返回值
:
0x0A
-
-
>
内存变量校验出错
:
0x00
-
-
>
成功
:
0x0B
-
-
>
数据库系统崩溃
:
0x03
-
-
>
数据库没有打开
:
0x04
-
-
>
输入错误
*
/
int
ST_DBReadRecord
(
unsigned char ucDBId
,
int
nRecNo
,
int
nRecCount
,
char
*
szString
,
int
*
pnLen
)
{
char sql
[
2056
]
;
int
len
=
0
;
int
nrow
=
0
;
int
ncolumn
=
0
;
int
rc
;
char
*
zErrMsg
=
NULL
;
char
*
*
azResult
;
printf
(
"get record\n"
)
;
printf
(
"ucDBId=%d\n"
,
ucDBId
)
;
if
(
ucDBId
>
MAX_DB
|
|
ucDBId
<
0
)
return 0x04
;
if
(
(
user_db
[
ucDBId
-
1
]
.
id
<
0
)
|
|
(
user_db
[
ucDBId
-
1
]
.
id
>
MAX_DB
+
1
)
)
return 0x04
;
if
(
user_db
[
ucDBId
-
1
]
.
id
=
=
0
)
return 0x03
;
printf
(
"ucDBId=%d\n"
,
ucDBId
)
;
sqlite
3
*
db
=
(
sqlite
3
*
)
user_db
[
ucDBId
-
1
]
.
db
;
sprintf
(
sql
,
"SELECT * FROM %s WHERE ID BETWEEN %d AND %d;"
,
TABLE_NAME
,
nRecNo
,
nRecNo
+
nRecCount
-
1
)
;
printf
(
"%s\n"
,
sql
)
;
rc
=
sqlite
3_get_table
(
db
,
sql
,
&
azResult
,
&
nrow
,
&
ncolumn
,
&
zErrMsg
)
;
printf
(
"get table ok\n"
)
;
if
(
rc
!
=
SQLITE
_OK
)
{
printf
(
"zErrMsg = %s \n"
,
zErrMsg
)
;
return 0x04
;
}
int
i
=
0
;
printf
(
"row:%d column=%d \n"
,
nrow
,
ncolumn
)
;
if
(
(
nrow
=
=
0
)
&
&
(
ncolumn
=
=
0
)
)
return 0x04
;
printf
(
"\nThe result of querying is : \n"
)
;
for
(
i
=
3
;
i
<
(
nrow
+
1
)
*
ncolumn
;
i
+
=
2
)
{
printf
(
"azResult[%d] = %s\n"
,
i
,
azResult
[
i
]
)
;
memcpy
(
szString
+
len
,
azResult
[
i
]
,
strlen
(
azResult
[
i
]
)
)
;
len
+
=
strlen
(
azResult
[
i
]
)
;
}
*
pnLen
=
len
;
printf
(
"len=%d\n"
,
len
)
;
for
(
i
=
0
;
i
<
len
;
i
+
+
)
{
if
(
*
(
szString
+
i
)
=
=
0x01
)
*
(
szString
+
i
)
=
0x00
;
}
return 0
;
}
/
*
*
*
函数功能:执行写交易记录操作
*
ucDBId
:
1
~
32
,
数据库文件号
,
最多8字节
*
nRecNo
:
0表示添加在文件尾,1
-
N表示改写该记录
;
记录号
*
szString
:
如果是写记录,表示要写的记录指针
;
记录指针
*
pnLen
:
如果是写记录,表示记录长度指针
;
记录长度
*
返回值
:
0x0A
-
-
>
内存变量校验出错
:
0x00
-
-
>
成功
:
0x0B
-
-
>
数据库系统崩溃
:
0x03
-
-
>
数据库没有打开
:
0x04
-
-
>
输入错误
:
0x06
-
-
>
无剩余空间
*
/
int
ST_DBWriteRecord
(
unsigned char ucDBId
,
int
nRecNo
,
int
nRecCount
,
char
*
szString
,
int
*
pnLen
)
{
char sql
[
2056
]
;
char db_string
[
2056
]
;
int
ret
;
char
*
string
=
(
char
*
)
db_string
;
memcpy
(
db_string
,
szString
,
*
pnLen
)
;
int
i
;
printf
(
"ucDBId=%d\n"
,
ucDBId
)
;
printf
(
"ST_DBWriteRecord\n"
)
;
if
(
ucDBId
>
MAX_DB
|
|
ucDBId
<
0
)
return 0x04
;
for
(
i
=
0
;
i
<
*
pnLen
;
i
+
+
)
{
if
(
*
(
string
+
i
)
=
=
'
\
0
'
)
*
(
string
+
i
)
=
0x01
;
}
char
*
g_caErrorMsg
=
NULL
;
if
(
(
user_db
[
ucDBId
-
1
]
.
id
<
0
)
|
|
(
user_db
[
ucDBId
-
1
]
.
id
>
MAX_DB
+
1
)
)
return 0x04
;
if
(
user_db
[
ucDBId
-
1
]
.
id
=
=
0
)
return 0x03
;
if
(
nRecNo
!
=
0
)
{
sprintf
(
sql
,
"
UPDATE
SensorData SET RECORD ='%s' WHERE ID=%d"
,
szString
,
nRecNo
)
;
ret
=
sqlite
3_exec
(
user_db
[
ucDBId
-
1
]
.
db
,
sql
,
NULL
,
NULL
,
&
g_caErrorMsg
)
;
if
(
ret
!
=
SQLITE
_OK
)
{
printf
(
"changed record error%d\n"
,
ret
)
;
return
-
1
;
}
else
{
sqlite
3_changes
(
user_db
[
ucDBId
-
1
]
.
db
)
;
return 0x00
;
}
}
else
{
printf
(
"len=%d\n"
,
*
pnLen
)
;
printf
(
"string:%s\n"
,
string
)
;
sprintf
(
sql
,
"INSERT INTO %s VALUES(NULL,'%s');"
,
TABLE_NAME
,
string
)
;
printf
(
"%s\n"
,
sql
)
;
if
(
sqlite
3_exec
(
user_db
[
ucDBId
-
1
]
.
db
,
sql
,
NULL
,
NULL
,
&
g_caErrorMsg
)
!
=
SQLITE
_OK
)
{
printf
(
"zErrMsg = %s \n"
,
g_caErrorMsg
)
;
return 0x0b
;
}
else
return 0x00
;
}
}
/
*
*
*
函数功能:执行删除交易记录操作
*
ucDBId
:
1
~
32
,
数据库文件号
,
最多8字节
*
nRecNo
:
表示删除的记录号
;
记录号
*
返回值
:
0x0A
-
-
>
内存变量校验出错
:
0x00
-
-
>
成功
:
0x0B
-
-
>
数据库系统崩溃
:
0x03
-
-
>
数据库没有打开
:
0x04
-
-
>
输入错误
*
/
int
ST_DBDelRecord
(
unsigned char ucDBId
,
int
nRecNo
)
{
char sql
[
2056
]
;
int
ret
=
-
1
;
char
*
zErrMsg
=
NULL
;
printf
(
"ST_DBDelRecord\n"
)
;
printf
(
"ucDBId=%d\n"
,
ucDBId
)
;
if
(
ucDBId
>
MAX_DB
|
|
ucDBId
<
0
)
return 0x04
;
if
(
(
user_db
[
ucDBId
-
1
]
.
id
<
0
)
|
|
(
user_db
[
ucDBId
-
1
]
.
id
>
MAX_DB
+
1
)
)
return 0x04
;
if
(
user_db
[
ucDBId
-
1
]
.
id
=
=
0
)
return 0x03
;
sqlite
3
*
db
=
(
sqlite
3
*
)
user_db
[
ucDBId
-
1
]
.
db
;
sprintf
(
sql
,
"DELETE FROM SensorData WHERE ID=%d;"
,
nRecNo
)
;
ret
=
sqlite
3_exec
(
db
,
sql
,
0
,
0
,
&
zErrMsg
)
;
if
(
ret
!
=
SQLITE
_OK
)
{
printf
(
"zErrMsg = %s \n"
,
zErrMsg
)
;
return 0x0b
;
}
return 0
;
}
/
*
*
*
函数功能:关闭交易记录数据库
*
ucDBID
:
0
~
32
,
要关闭的文件号,0表示关闭所有打开数据库文件,建议不要使用
*
返回值
:
0x0A
-
-
>
内存变量校验出错
:
0x00
-
-
>
成功
:
0x0B
-
-
>
数据库系统崩溃
:
0x03
-
-
>
数据库没有打开
:
0x04
-
-
>
输入错误
*
/
int
ST_DBClose
(
unsigned char ucDBID
)
{
printf
(
"ST_DBClose\n"
)
;
printf
(
"ucDBId=%d\n"
,
ucDBID
)
;
if
(
ucDBID
>
MAX_DB
|
|
ucDBID
<
0
)
return 0x04
;
if
(
(
user_db
[
ucDBID
-
1
]
.
id
<
0
)
|
|
(
user_db
[
ucDBID
-
1
]
.
id
>
MAX_DB
+
1
)
)
return 0x04
;
if
(
user_db
[
ucDBID
-
1
]
.
id
=
=
0
)
return 0x03
;
printf
(
"close db \n"
)
;
sqlite
3
*
db
=
user_db
[
ucDBID
-
1
]
.
db
;
sqlite
3_close
(
db
)
;
user_db
[
ucDBID
-
1
]
.
id
=
0
;
app_sleep
(
2000
)
;
return 0
;
}
/
*
*
*
函数功能: 根据文件号查询文件信息,当ucItem为0
~
3时,需要先打开文件,当ucItem为4时,不需要打开文件
*
ucDBID
:
1
~
32
,
数据库文件号
*
ucItem
:
0
-
-
>
查询当前有效记录数
:
1
-
-
>
查询所有记录数(包括被删除记录)
:
2
-
-
>
查询剩余可写记录数
*
:
3
-
-
>
查询记录长度
:
4
-
-
>
查询有效数据库个数
*
puiRecNum
(
出口
)
:
查询到的结果
*
返回值
:
0x0A
-
-
>
内存变量校验出错
:
0x00
-
-
>
成功
:
0x0B
-
-
>
数据库系统崩溃
:
0x03
-
-
>
数据库没有打开
:
0x04
-
-
>
输入错误
*
/
int
ST_DBInfo
(
unsigned char ucDBID
,
unsigned char ucItem
,
unsigned
int
*
puiRecNum
)
{
int
ret
;
printf
(
"ST_DBInfo\n"
)
;
printf
(
"ucDBId=%d\n"
,
ucDBID
)
;
if
(
ucDBID
>
MAX_DB
|
|
ucDBID
<
0
)
{
*
puiRecNum
=
0
;
return 0x04
;
}
if
(
(
user_db
[
ucDBID
-
1
]
.
id
<
0
)
|
|
(
user_db
[
ucDBID
-
1
]
.
id
>
MAX_DB
+
1
)
)
return 0x04
;
if
(
user_db
[
ucDBID
-
1
]
.
id
=
=
0
)
return 0x03
;
if
(
ucItem
=
=
2
)
{
*
puiRecNum
=
1000
;
return 0x00
;
}
if
(
ucItem
=
=
4
)
{
int
len
=
0
;
int
i
;
for
(
i
=
0
;
i
<
MAX_DB
;
i
+
+
)
{
if
(
user_db
[
ucDBID
-
1
]
.
id
!
=
0
)
len
+
+
;
}
*
puiRecNum
=
len
;
return 0
;
}
if
(
(
ucItem
=
=
3
)
|
|
(
ucItem
=
=
1
)
|
|
(
ucItem
=
=
0
)
)
{
const
char
*
pTail
;
sqlite
3_stmt
*
stmt
;
char sql
[
512
]
;
sprintf
(
sql
,
"SELECT COUNT(*) FROM %s"
,
TABLE_NAME
)
;
ret
=
sqlite
3_prepare
(
user_db
[
ucDBID
-
1
]
.
db
,
sql
,
strlen
(
sql
)
,
&
stmt
,
&
pTail
)
;
if
(
ret
!
=
SQLITE
_OK
)
{
printf
(
"get record number error\n"
)
;
return
-
1
;
}
else
{
int
recordCount
=
0
;
ret
=
sqlite
3_step
(
stmt
)
;
if
(
ret
!
=
SQLITE
_ROW
)
{
printf
(
"search record number error\n"
)
;
return
-
1
;
}
recordCount
=
sqlite
3_column_int
(
stmt
,
0
)
;
printf
(
"da have %d records\n"
,
recordCount
)
;
*
puiRecNum
=
recordCount
;
}
sqlite
3_finalize
(
stmt
)
;
return 0x00
;
}
return 0x00
;
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报
。
打开APP,阅读全文并永久保存
查看更多类似文章
猜你喜欢
类似文章
【热】
打开小程序,算一算2024你的财运
sqlite3_get_table使用举例函数例子
linux c语言操作数据库(连接sqlite数据库)
如何用C语言操作sqlite3,一文搞懂
Sqlite3小结(小型数据库中增删改查的操作)
怎么样用VB创建一个SQLITE的数据库啊!急救!
在VS2008下编译sqlite3
更多类似文章 >>
生活服务
热点新闻
留言交流
回顶部
联系我们
分享
收藏
点击这里,查看已保存的文章
导长图
关注
一键复制
下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!
联系客服
微信登录中...
请勿关闭此页面
先别划走!
送你5元优惠券,购买VIP限时立减!
5
元
优惠券
优惠券还有
10:00
过期
马上使用
×