//插入及更新操作
int nret = 0;
sqlite3 * db = null;
cstring strfilepath; //数据库存储路径
//路径赋值(省略)
//连接数据库
nret = sqlite3_open16(strfilepath, &db); //有几个打开函数可供调用,使用wchar类型路径用这个
if(nret != sqlite_ok)
{
logd(_q_d,l数据库打开失败);
return -4;
}
cstring strsqlsentence;
char *szsqlsentence = null;
组织sql语句
**********************
{
//更新操作
strsqlsentence.format(lupdate tbl_ad set ad_title='%s', ad_info='%s', begin_time='%s', end_time='%s' where ad_id='%s';, stradtitle, stradinfo, stradbegintime, stradendtime, stradid);
}
{
//插入操作
strsqlsentence.format(linsert into tbl_advertisement values('%s','%s','%s','%s','%s');, stradid, stradtitle, stradinfo, stradbegintime, stradendtime);
}
**********************
//将sql语句转换成sqlite函数能执行的utf8格式
nlen = 0;
nlen = widechartomultibyte(cp_utf8, 0, strsqlsentence, -1, null, 0, null, 0);
szsqlsentence = new char[nlen+1];
if (szsqlsentence == null)
{
return -6;
}
memset(szsqlsentence, 0, nlen+1);
widechartomultibyte(cp_utf8, 0, strsqlsentence, -1, szsqlsentence, nlen+1, null, 0);
//锁定数据库
if(sqlitelock(lterminalplat.db,30*1000) == 0) //sqlitelock为自写的一套锁机制中的函数
{
// 准备执行sql
nret = sqlite3_exec( db, begin;, 0, 0, 0);
if(nret == sqlite_ok)
{
bool bsuccess = true;
char * perrmsg = null;
// 执行sql
nret = sqlite3_exec( db, szsqlsentence, 0, 0, &perrmsg);
if(nret != sqlite_ok)
{
logbd(_q_d,sql执行失败 [%s],perrmsg);
bsuccess = false;
}
else
{
logbd(_q_d,sql执行成功);
}
if(bsuccess)
{
//提交
sqlite3_exec( db, commit;, 0, 0, 0);
}
else
{
//回滚
sqlite3_exec( db, rollback;, 0, 0, 0);
hreturnvale = -7;
}
}
//解锁
sqliteunlock(lterminalplat.db);
}
else
{
hreturnvale = -8;
}
// 关闭数据库
sqlite3_close(db);
return hreturnvale ;
************************************分割线************************************
//查询操作
//说明sqlite3_exec可以让数据库直接执行sql语句,查询也不例外,但是如果是查询语句,需要定义一个回调函数来解析查询结果。
//在此,用的是sqlite3_get_table这一套函数,我访问的是本地数据库,还算稳定
//组织查询语句
cstring strsqlsentence;
strsqlsentence.format(lselect * from tbl_advertisement where 1=1 and ad_id='%s';, stradid);
char szsqlsentence[1024];
int nlen = 0;
memset(szsqlsentence, 0, sizeof(szsqlsentence));
nlen = widechartomultibyte(cp_utf8, 0, strsqlsentence, -1, null, 0, null, 0);
widechartomultibyte(cp_utf8, 0, strsqlsentence, -1, szsqlsentence, nlen+1, null, 0);
int result;
hresult hreturn = 0;
char * errmsg = null;
char **dbresult = null;
int nrow, ncolumn;
int index=0;
//数据库查询
cstring strtemp;
result = sqlite3_get_table( db, szsqlsentence, &dbresult, &nrow, &ncolumn, &errmsg );
if( (sqlite_ok == result))
{
if (nrow >= 1)
{
//查询成功,有记录
hreturn = 1;
}
else
{
//无符合条件的结果
hreturn = 0;
}
}
else
{
//查询失败
logd(_q_d, l判断本地数据库中是否存在该广告--[查询失败],errmsg=%s result=%d, nrow=%s, ncolumn=%s, cstring(errmsg), result, nrow, ncolumn);
hreturn = -1;
}
//释放查询结果
sqlite3_free_table( dbresult ); //注意一定要调用该函数对释放结果集
