直接上代码:
/************************************************************************************
* Copyright (c) houwenbin All Rights Reserved.
* 公司名称:杭州智诺科技股份有限公司
* 文件名: ZenoSQL.h
* 创建人: 侯文斌
* 电子邮箱:houwenbin1986@gmail.com
* 描述 : 封装sqlite3数据库api,提供更简单、明了、友好的接口
*/
#ifndef ZENOSQL_H_
#define ZENOSQL_H_
#include "sqlite3.h"
//封装SQLite3操作
class CZenoSQL
{
public:
CZenoSQL(void);
~CZenoSQL(void);
public:
long SQLiteConnect(char *pFileName);//连接数据库
long SQLiteDisconnect(void);//断开数据库连接
long SQLiteExec(char *pSQL);//执行SQL命令
long SQLiteSearch(char *pSearch);//查询命令
int GetTableRow()//查询后,取得表“行”数
{
return m_nRow;
}
int GetTableColumn()//查询后,取得表“列”数
{
return m_nCol;
}
char *GetErrorMsg()//取得当前错误提示
{
return m_szErrMsg;
}
char *GetTableData( int col, int row )//查询后,取得表内某个单元值
{
if( m_pResult==NULL )
{
return NULL;
}
//m_pResult结果是带表头的整张二维表格,所以数据row从1开始
return *( m_pResult + col + row*m_nCol );
}
void FreeTableData()//释放查询结果
{
if( m_pResult!=NULL )
{
sqlite3_free_table( m_pResult );
m_pResult = NULL;
m_nCol = 0;
m_nRow = 0;
m_szErrMsg[0] = '\0';
}
}
long getLastInsertId()//获取最近插入ID
{
if( NULL==m_db )
{
return -1;
}
return long(sqlite3_last_insert_rowid(m_db));
}
private:
char **m_pResult;//二维数组存放结果
char m_szErrMsg[512];//保存错误信息
char *m_pError;
int m_nRow;//数据行数
int m_nCol;//数据列数
private:
sqlite3 *m_db;//数据库句柄
};
#endif
#include "StdAfx.h"
#include "ZenoSQL.h"
CZenoSQL::CZenoSQL(void)
{
m_db = NULL;
m_pError = NULL;
m_pResult = NULL;
m_nRow = 0;
m_nCol = 0;
}
CZenoSQL::~CZenoSQL(void)
{
if( m_db!=NULL )
{
sqlite3_close( m_db );
m_db = NULL;
}
}
//打开数据库,没有就创建
long CZenoSQL::SQLiteConnect( char *pFileName )
{
if( NULL==pFileName )
{
return -1;
}
if( m_db!=NULL )
{
sqlite3_close( m_db );
m_db = NULL;
}
int rc = sqlite3_open( pFileName, &m_db );//打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
if( rc )
{
strcpy_s( m_szErrMsg, 512, sqlite3_errmsg( m_db ) );//保存错误信息
sqlite3_close( m_db );
return -1;
}
return rc;
}
//执行SQL语句
long CZenoSQL::SQLiteExec( char *pSQL )
{
if( NULL==pSQL || NULL==m_db )
{
return -1;
}
int rc = -1;
rc = sqlite3_exec( m_db, pSQL, 0, 0, &m_pError );
if( rc==SQLITE_OK )
{
return 0;
}
if( m_pError!=NULL )
{
strcpy_s( m_szErrMsg, 512, m_pError );
}
return -1;
}
//执行SQL查询
long CZenoSQL::SQLiteSearch( char *pSearch )
{
if( NULL==pSearch || NULL==m_db )
{
return -1;
}
if( m_pResult!=NULL )
{
sqlite3_free_table( m_pResult );
m_pResult = NULL;
m_nCol = 0;
m_nRow = 0;
}
sqlite3_get_table( m_db, pSearch, &m_pResult, &m_nRow, &m_nCol, &m_pError );
if( m_pError != NULL )
{
strcpy_s( m_szErrMsg, 512, m_pError );
}
return 0;
}
//关闭数据库
long CZenoSQL::SQLiteDisconnect()
{
if( NULL==m_db )
{
return -1;
}
//释放掉 Result 的内存空间
if( m_pResult!=NULL )
{
sqlite3_free_table( m_pResult );
}
//关闭数据库
if( SQLITE_OK == sqlite3_close( m_db ) )
{
m_db = NULL;
return 0;
}
return -1;
}
测试使用:
CZenoSQL* m_db = new CZenoSQL();
if( !m_db )
{
return -1;
}
m_db->SQLiteConnect("MYDB.db");
m_db->SQLiteExec("create table test(id INTEGER PRIMARY KEY);");
m_db->SQLiteExec("insert into test (id) values (123);");
m_db->SQLiteSearch("select * from test;");
for (int i=1; i<m_db.GetTableRow(); ++i)//行
{
for (int j=0; j<m_db.GetTableColumn(); ++j)//列
{
m_db->GetTableData(j, i);//id
}
}
m_db->FreeTableData();//清理搜索结果缓存
m_db->SQLiteDisconnect();
delete m_db;