sqlite3 开发包的使用

1、sqliteTest.h

#include <ctype.h>
#include <Windows.h>
#include <assert.h>
#include <string>
#include "sqlite3.h"开发包提供
#include "SqlUtils.h"//开发包提供
#include "Utils.h" //开发包提供

#pragma  comment(lib, "../Bin/sqlite3.lib")  //开发包提供

#define  TASK_STATE_SUCCEED	1
#define  TASK_STATE_FAIL	2

static sqlite3 * g_user_data = 0;

//declare
int AccessSqlite3Init();
int AccessSqlite3Clear();
int SetTaskState(const char* taskid, int nTaskState);
int GetTaskState(const char* taskid, int *pTaskState);


//definitions
int AccessSqlite3Init()
{
	int error = -1;
	
	//create table
	const char * szSqlExec[] = {
		"CREATE TABLE IF NOT EXISTS tbl_task_state "\
		"(taskid CHAR(36), state INT, PRIMARY KEY (taskid)); ",
		NULL
	};
	//set path
	char szConfigPath[MAX_PATH] = {0};
	DWORD dwPathLen = GetModuleFileNameA(NULL,  szConfigPath, sizeof szConfigPath);
	char *pReveseSlash = strrchr(szConfigPath,'\\');
	if (pReveseSlash)
	{
		*pReveseSlash = 0;
	}
	strncat(szConfigPath, "\\TaskDataBase.sqlite", sizeof szConfigPath);

	//open config
	int nCode = sqlite3_threadsafe();
	assert(nCode == 1);
	nCode = sqlite3_config(SQLITE_CONFIG_SERIALIZED);
	assert(SQLITE_OK == nCode);
	error = sqlite3_open_ansi(szConfigPath, &g_user_data);
	assert(error == 0);
	assert(g_user_data != NULL);

	char *pErrMsg = NULL;
	error = sqlite3_exec(g_user_data, szSqlExec[0], 0, 0, &pErrMsg);
	if (error != 0)
	{
		RaiseException(0, 0, 0, NULL);
		sqlite3_free(pErrMsg);
	}

	return error;
}


//clear
int AccessSqlite3Clear()
{
	int error = -1;
	assert(g_user_data != NULL);
	sqlite3_close(g_user_data);
	g_user_data = NULL;
	error =0;

	return error;

}

int SetTaskState(const char* taskid, int nTaskState)
{
	int error = -1;
	SqlParameter TaskUserDataParam;
	const char* szSqlExec[] = {
		"INSERT OR IGNORE INTO tbl_task_state(taskid, state) "\
		"values(@taskid, @state) ",
		NULL
	};

	TaskUserDataParam.Add("@taskid", taskid);
	TaskUserDataParam.Add("@state", nTaskState);
	std::string strSqlText;
	TaskUserDataParam.SqlFormat(szSqlExec[0], strSqlText);
	char *pErrMsg = NULL;
	error = sqlite3_exec(g_user_data, strSqlText.c_str(),0 ,0, &pErrMsg);
	if (error != 0)
	{
		RaiseException(0, 0 ,0, NULL);
		sqlite3_free(pErrMsg);
	}

	return error;
}


int GetTaskState(const char* taskid, int *pTaskState)
{
	int error = -1;
	int found = 0;
	const char *szSqlExec[] = {
		"SELECT state FROM tbl_task_state WHERE taskid=@taskid; ",
		NULL
	};

	SqlParameter taskUserDataSqlParam;
	taskUserDataSqlParam.Add("@taskid", taskid);
	std::string strSqlText;
	taskUserDataSqlParam.SqlFormat(szSqlExec[0], strSqlText);

	//execute
	sqlite3_stmt *pSqlStmt = NULL;
	error = sqlite3_prepare(g_user_data, strSqlText.c_str(), -1, &pSqlStmt, NULL);
	assert(error == SQLITE_OK);

	error = sqlite3_step(pSqlStmt);
	if (error == SQLITE_ROW)
	{
		*pTaskState = sqlite3_column_int(pSqlStmt, 0);
		error = sqlite3_step(pSqlStmt);
		found = 1;
	}

	assert(error == SQLITE_DONE);
	
	error = sqlite3_finalize(pSqlStmt);
	assert(error == SQLITE_OK);
	return found;
}

2、sqliteTest.cpp

#include "sqliteTest.h"
#include <iostream>

using namespace  std;

#define  taskid_1 "e32ac270-2ea8-4843-8c2b-96852ca9da5b"
#define  taskid_2 "fe32ac270-2ea8-4843-8c2b-96852ca9da5"

int _tmain(int argc, _TCHAR* argv[])
{
	AccessSqlite3Init();
	SetTaskState(taskid_1, TASK_STATE_SUCCEED);
	SetTaskState(taskid_2, TASK_STATE_FAIL);

	int nTaskStat = 0;
	GetTaskState(taskid_1, &nTaskStat);
	cout<<"taskid_1: "<<taskid_1<<"\tState: "<<nTaskStat<<endl;
	GetTaskState(taskid_2, &nTaskStat);
	cout<<"taskid_2: "<<taskid_2<<"\tState: "<<nTaskStat<<endl;


	AccessSqlite3Clear();
	
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值