直接上代码:
/************************************************************************************ * 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,&m_pError ); if( rc==sqlITE_OK ) { return 0; } if( m_pError!=NULL ) { strcpy_s( m_szErrMsg,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,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;