您的位置:首页 > 编程语言 > C语言/C++

在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放在一起。

 

第二步:

       写下源代码:

#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代替。

第四个参数为回调函数所要使用的参数。同第三条。

第五个参数为错误信息。

 

第四:查询到的结果图如下



 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: