特别声明:
建议使用google游览器,火狐也可以
论坛处于测试阶段,一切资料都为测试资料,在论坛正式运行的时候,会尽量保存网友的劳动成果!
HelloWorld论坛秉持互惠互利,共同学习与进步,一个人的梦想大家实现的理想,一直坚持着,望广大网友多多支持,提供宝贵意见
来论坛做什么?
可以先转载你平时学习查找的资料(先论坛查找),自己可以写写体会
把平时碰到的问题,如何解决可以先记录在论坛,以备后来的人学习
可以和会员一起参加一些开源项目的学习,汉化,推广,甚至可以加入团队
|
|
来源:http://blog.sina.com.cn/s/blog_841eaed801012krp.html
1,去sqlite官网上下载最近的sqlite源码包,解压后得到四个文件:shell.c,sqlite3.c,sqlite3.h,sqlite3ext.h
此处还需要sqlite3.def文件,它在sqlite官方生成的dll包中,下载下来,解压即可。
其中,shell.c文件是做来生成exe可执行文件用的。
2,打开vs2008 新建sqlite3的非mfc的DLL项目,这里只需要建立空的项目即可。
3,将上面非shell.c的四个文件复制动sqlite3项目工程的目录下
4,将sqlite3.h,sqlite3ext.h两文件添加到项目的头文件下面,把sqlite3.c,sqlite3.def添加到项目的源文件下面。
5,编译即可以得来sqlite3.dll文件
6,再次编译:
出现如下错误:
1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_database_name 1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_database_name16 1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_origin_name 1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_origin_name16 1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_table_name 1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_table_name16 1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_rtree_geometry_callback 1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_table_column_metadata 1>F:\C++_Program\sqlite3\Debug\sqlite3.lib : fatal error LNK1120: 8 个无法解析的外部命令
解决办法是:
再次编译,此时仍然会报一个:
1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3_rtree_geometry_callback
的错误,解决办法是:
在预处理器定义中添加:SQLITE_ENABLE_RTREE
再次编译即会成功生成sqlite3.dll和sqlite3.lib文件
二,生成sqlite3可执行文件
若要生成sqltie3.exe可执行文件,只需新建win32控制台空项目,要将
生成解决方案,就能得到我们需要的sqlite3.exe文件
三,在C++项目中引用sqlite3的动态连接库
1,新建测试工程sqlite3_Test:
2,将上面生成的sqlite3.dll文件放到debug目录中,在项目目录中引入sqlite3.lib文件,
3,在stdafx.h文件中将sqlite3.h头文件引入
#ifndef SQLITE3
#define SQLITE3
#include "sqlite3.h"
#endif
4,在sqlite3_test.cpp源文件中,写入sqltie3数据库操作:
首先在stdafx.h头文件中加入显示数据库查询结果的回调函数:
int showTableInfo(void *para,int n_column,char
**column_value,char **column_name);
修改Sqlite3_Test.cpp的源码:
#include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { char *errMsg; int rc; sqlite3 *db; rc = sqlite3_open("manage.db", &db); if(rc == SQLITE_OK) { MessageBox(NULL,_T("打开数据库成功!"), _T("消息"), MB_OK|MB_ICONWARNING); rc = sqlite3_exec(db,"create table if not exist user(ID integer,name varchar(32))",NULL,NULL,&errMsg); if(rc != SQLITE_OK) { printf("创建表失败,错误码:%d,错误原因:%s\n",rc,errMsg); MessageBox(NULL,_T("创建表user失败!"),_T("错误"),MB_ICONWARNING); } rc=sqlite3_exec(db,"insert into user values('123','测试')",NULL,NULL,&errMsg); if(rc != SQLITE_OK) { MessageBox(NULL,_T("插入数据失败!"),_T("错误"),MB_ICONWARNING); } rc=sqlite3_exec(db,"select * from user",showTableInfo,NULL,&errMsg); if(rc != SQLITE_OK) { MessageBox(NULL,_T("查询失败!"),_T("错误"),MB_ICONWARNING); } } return 0; } int showTableInfo(void *para,int n_column,char **column_value,char **column_name) { int i; printf("记录包含%d个字段\n",n_column); for(i=0;i<n_column;i++) { printf("字段名:%s >> 字段值:%s\n",column_name[i],column_value[i]); } printf("--------------------------------------\n"); return 0; } |
[挂载人]初学MPEG |
|
|
Please Login (or Sign Up) to leave a comment |