对sqlite3的一点简单实用的封装
发布时间:2020-12-12 19:29:14 所属栏目:百科 来源:网络整理
导读:直接上代码: /************************************************************************************ * Copyright (c) houwenbin All Rights Reserved. * 公司名称:杭州智诺科技股份有限公司 * 文件名: ZenoSQL.h * 创建人: 侯文斌 * 电子邮箱:houwe
直接上代码: /************************************************************************************ * 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] = ' '; } } 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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |