vs2010下vc调用sqlite3数据库以及配置

来源:互联网 发布:淘宝围巾店 编辑:程序博客网 时间:2024/06/02 02:56

对于在vs2010下,使用mfc来操作sqlite3数据库,首先要做的就是编译生成sqlite3.lib,sqlite3.dll这2个文件,sqlite3.dll这个文件在官方网站上可以下的到,官方网站:http://www.sqlite.org/download.html 。我自己写这文章的时候用的是sqlite-amalgamation-201412160020,sqlite-shell-win32-x86-3080704。具体用到的时候可以去官方下载最新的就行。

下载完成之后,接下来就是要编译生成lib文件,具体请参考http://www.cnblogs.com/djcsch2001/articles/3028086.html,这篇文章里面提供了2种方法,经测试是可以的,所以这步骤参阅这里。生成了lib文件,有了dll文件,头文件,就是调用的问题了,这跟调用其他dll是一样的,在此就不多说。下面附上我的测试代码,经供学习参考,算是入门。

 #include "stdafx.h"  

#include <stdlib.h>  
#include "sqlite3.h"  
#include <conio.h>
#include <stdio.h>
#include <iostream>
using namespace std;




#pragma comment(lib,"sqlite3.lib")
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 _tmain(int argc, _TCHAR* argv[])  
{  
//--------------------------------------------------------------test1
//int rc;  
//int i, nrows, ncols, tr;  
//char *errmsg = NULL;  
//char **results;  


//sqlite3 *db = NULL;  
//rc = sqlite3_open("demodb", &db);  
//if (rc)  
//{  
// fprintf(stderr, "can't open db!/n", sqlite3_errmsg(db));  
// sqlite3_close(db);  
// exit(1);  
//}  
//else  
//{  
// printf("db open successfully!/n");  
//}  
//sqlite3_get_table(db,"select * from clients;",&results,&nrows,&ncols,&errmsg);  
//printf("DB has %d rows and %d cols/n/n",nrows,ncols);  
//tr=(nrows+1)*ncols;  
//for(i=0;i<tr;++i) //输出查询结果  
//{  
// printf("results[%d]= %s/n",i,results[i]); //此处可以自己定义输出格式,  
//}  
//sqlite3_free_table(results); //free   
//sqlite3_close(db);  
//int a;  
//scanf("%d",&a);//没有此行代码,运行窗口出现后会马山消失。  
//return 0;  
//----------------------------------------------------------------------test2
sqlite3 * conn = NULL;
char * err_msg = NULL;
char sql[200] = "";


// 打开数据库, 创建连接
if(sqlite3_open("test.db", &conn) != SQLITE_OK)
{
printf("无法打开!");
}
////插入数据
//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) 
//{ 
// printf("操作失败,错误代码: %s", err_msg); 
// exit(-1); 
//} 


//添加10条记录
for (int i = 0; i < 10; i++)
{
// 执行SQL
sprintf(sql, "INSERT INTO test_for_cpp \
(id, name, age) VALUES \
(%d, '%s', %d)", i, "testPeople", i);
if (sqlite3_exec(conn, sql, NULL, NULL, &err_msg) != SQLITE_OK) 
{     
printf("操作失败,错误代码: %s", err_msg);     
exit(-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));
exit(-1);
}


printf("操作成功!\n");

char a;
cout<<"请输入一个字符,若要退出程序,请输入!:"<<endl;
cin>>a;
while(a != '!')
{
cout<<a<<endl;
cin>>a;
}
cout<<"退出程序!"<<endl;
return 0;
}  

        

0 0