在VS2010下c++与Sqlite3的连接
2015-04-19 15:02
281 查看
SQLite并没有一次性做到位,只有下载这些东西是不能放在vs2010中并马上使用的,下载下来的文件中有sqlite3.c/h/dll/def,还是不够用的。我们需要的sqlite3.lib文件并不在其中,需要我们自己动手了。
这儿要用到visual studio提供的Visual Studio Command Prompt工具了。打开之后,进入含有sqlite3.dll和sqlite3.def的目录下,输入以下命令:
LIB /DEF:sqlite3.def /MACHINE:IX86
就能生成sqlite3.exp和sqlite3.lib文件了,这样在工程中就可以加入lib文件进行编译了。
第一步:
在vs2010下建立一个空的win32工程SQLite3Test,在工程的属性-链接-输入中添加sqlite3.lib的引用。添加新的文件main.cpp,写一个main函数,并编译一下。
好,接下来把sqlite3.h/def/exp/lib通通放进SQLite3Test\SQLite3Test\目录下,跟main.cpp在一起,如图:
把sqlite3.dll跟生成的exe放在一起。
第二步:
写下源代码:
第三:
函数参数说明:
sqlite3_exec的原型如下:
SQLITE_API int sqlite3_exec(
sqlite3*, /* An open database */
const char *sql, /* SQL to be evaluated */
int (*callback)(void*,int,char**,char**), /* Callback function */
void *, /* 1st argument to callback */
char **errmsg /* Error msg written here */
);
第一个参数为sqlite3实例。
第二个参数为要执行的sql语句。
第三个参数为回调函数的指针。因为这里只是创建表和插入数据,并没有数据返回,所以不需要填写回调函数。以NULL代替。
第四个参数为回调函数所要使用的参数。同第三条。
第五个参数为错误信息。
第四:查询到的结果图如下
这儿要用到visual studio提供的Visual Studio Command Prompt工具了。打开之后,进入含有sqlite3.dll和sqlite3.def的目录下,输入以下命令:
LIB /DEF:sqlite3.def /MACHINE:IX86
就能生成sqlite3.exp和sqlite3.lib文件了,这样在工程中就可以加入lib文件进行编译了。
第一步:
在vs2010下建立一个空的win32工程SQLite3Test,在工程的属性-链接-输入中添加sqlite3.lib的引用。添加新的文件main.cpp,写一个main函数,并编译一下。
好,接下来把sqlite3.h/def/exp/lib通通放进SQLite3Test\SQLite3Test\目录下,跟main.cpp在一起,如图:
把sqlite3.dll跟生成的exe放在一起。
第二步:
写下源代码:
#include <iostream> #include "sqlite3.h" static std::string strName[] = {"土行孙","哪咤","杨戬","金吒","木吒","雷震子"}; int sqlite3_exec_callback(void *data, int nColumn, char **colValues, char **colNames); int sqlite3_exec_callback(void *data, int nColumn, char **colValues, char **colNames) { for (int i = 0; i < nColumn; i++) { printf("%s\t", colValues[i]); } printf("\n"); return 0; } int main() { sqlite3 *conn = NULL; char *err_msg = NULL; char sql[200] = ""; //打开数据库,创建连接; if(sqlite3_open("test.db",&conn) != SQLITE_OK) { printf("无法打开\n"); } //执行SQL,创建一张表; sprintf(sql,"CREATE TABLE test_for_cpp(id int,name varchar(20),age int)"); if(sqlite3_exec(conn,sql,NULL,NULL,&err_msg) != SQLITE_OK) { std::string strErrMsg(err_msg); std::string::size_type pos = 0; pos = strErrMsg.find("already exists"); if(std::string::npos != pos) { //数据表已存在,删除表中数据; sprintf(sql,"delete from test_for_cpp"); if(sqlite3_exec(conn,sql,NULL,NULL,&err_msg) != SQLITE_OK) { printf("操作失败,错误代码:%s",err_msg); return -1; } } else { printf("操作失败,错误代码:%s",err_msg); return -1; } } //插入数据; int nColumn = sizeof(strName) / sizeof(strName[0]); for(int index = 0;index < nColumn;index++) { sprintf(sql, "INSERT INTO test_for_cpp (id, name, age) VALUES (%d, '%s', %d)", index, strName[index].c_str(), 20 + index); if (sqlite3_exec(conn, sql, NULL, NULL, &err_msg) != SQLITE_OK) { printf("操作失败,错误代码: %s", err_msg); return -1; } } // 查询; sprintf(sql, "SELECT * FROM test_for_cpp"); sqlite3_exec(conn, sql, &sqlite3_exec_callback, 0, &err_msg); //关闭连接; if(sqlite3_close(conn) != SQLITE_OK) { printf("无法关闭,错误代码:%s\n",sqlite3_errmsg(conn)); return -1; } return 0; }
第三:
函数参数说明:
sqlite3_exec的原型如下:
SQLITE_API int sqlite3_exec(
sqlite3*, /* An open database */
const char *sql, /* SQL to be evaluated */
int (*callback)(void*,int,char**,char**), /* Callback function */
void *, /* 1st argument to callback */
char **errmsg /* Error msg written here */
);
第一个参数为sqlite3实例。
第二个参数为要执行的sql语句。
第三个参数为回调函数的指针。因为这里只是创建表和插入数据,并没有数据返回,所以不需要填写回调函数。以NULL代替。
第四个参数为回调函数所要使用的参数。同第三条。
第五个参数为错误信息。
第四:查询到的结果图如下
相关文章推荐
- sqlite与C++进行连接
- VS2010下使用swig将c++和lua连接起来
- VS2010下C/C++连接MySql数据库的方法
- VS2010下C/C++连接MySql数据库的方法
- mfc vs2010 C++ 连接mysql等数据库
- 神器VS2010:c/c++ &&&&&& masm->obj link编译与连接
- VS2010下 C++与SQLite数据库的连接
- mfc vs2010 C++ 连接mysql等数据库
- C++ 内连接与外连接
- Ubuntu14.04系统c++调用sqlite3失败
- VS2010 C++下编译调试MongoDB源码
- 初次使用VS2010基于C++开发项目碰到的问题及解决方法
- VS2010中MFC连接Sql Server 2012方法
- VS2010 C#调用C++ DLL文件
- VS2010下Team Foundation Server连接不上
- [原]编译MongoDB,C++连接MongoDB测试
- SQLite使用EF6的连接配置
- C++连接mysql数据库的两种方法(ADO连接和mysql api连接)
- 利用SQLite的C++ api操作SQLite部署
- C++ 检测是否连接到Internet