直接上代码:sql
/************************************************************************************ * 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;