好久没写博客了,下面把今天的总结下:
自己测试过,在VC6.0 VS05和VS08都可以
首先搭建环境:
一、需要的文件
sqlite3.dll
阅读(2877) | 评论(0) | 转发(0) |
<script>window._bd_share_config={"common":{"bdsnskey":{},"bdtext":"","bdmini":"2","bdminilist":false,"bdpic":"","bdstyle":"0","bdsize":"16"},"share":{}};with(document)0[(getelementsbytagname('head')[0]||body).appendchild(createelement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new date()/36e5)];</script>
自己测试过,在VC6.0 VS05和VS08都可以
首先搭建环境:
一、需要的文件
sqlite3.dll
SQLITE3.lib
sqlite3.h
C++封装库,如果纯C去做就不需要这个了
CppSQLite3U.cpp
C++封装库,如果纯C去做就不需要这个了
CppSQLite3U.cpp
CppSQLite3U.h
然后在VS2005 下项目->属性->连接器->输入->附加依赖项里添加 SQLITE3.lib
然后在程序中添加#include "CppSQLite3U.h"
VC6.0的话
VC6.0的话

VC6.0(默认多字节)的话如果假如C++库的话,编译会提示一个错误,貌似是转换为整型的,改下就可以了,
OK
一般的创建、查询:
(创建可以纯用C去写,我这里为了方便调用的C++的库 CppSQLite3U.cpp CppSQLite3U.h)
插入blob类型的数据时:
(稍微修改一点,应该可以跨平台使用)
以上自己测试成功。。。
附图:
参考文章:
http://www.cnblogs.com/wengzilin/archive/2012/03/28/2420796.html
http://www.cnblogs.com/hnrainll/archive/2011/09/08/2170506.html
OK
一般的创建、查询:
(创建可以纯用C去写,我这里为了方便调用的C++的库 CppSQLite3U.cpp CppSQLite3U.h)
点击(此处)折叠或打开
- CppSQLite3DB db;
- CppSQLite3Query q;
-
- m_list.ResetContent();
- db.open("d:\\test.db");
- q = db.execQuery("select * from student"); //查询
- CString strTemp;
- while (!q.eof())
- {
- strTemp.Format(("%s-%s-%s"),q.fieldValue(0),q.fieldValue(1),q.fieldValue(2));
- m_list.AddString(strTemp);
-
- q.nextRow();
- }
- q.finalize();
- db.close();
(稍微修改一点,应该可以跨平台使用)
点击(此处)折叠或打开
- sqlite3 *db;
- char *zErrMsg = 0;
- int ret;
- // char **Result;
- char *sql;
- sqlite3_stmt *stat = 0;
- ret = sqlite3_open("db2.db", &db); //打开数据库,跟打开文本文件一样
- sqlite3_exec(db, "CREATE TABLE list (age int UNIQUE, fliename varchar(128), fzip blob);", 0, 0, &zErrMsg); //
-
- for (int i = 1; i <= 2; i++)
- {
- CString str;
- str.Format("insert into list values (%d,'mmmm.rar',?);", i);
- //由于mmmm.rar是一个二进制文件,所以要在使用insert语句时先用?号代替
- sqlite3_prepare(db, str, -1, &stat, 0);
- FILE *fp = NULL;
- long filesize = 0;
- char * ffile;
- fp = fopen("mmmm.rar", "rb");
- if(fp != NULL)
- {
- //计算文件的大小
- fseek(fp, 0, SEEK_END);
- filesize = ftell(fp);
- fseek(fp, 0, SEEK_SET);
- //读取文件
- ffile = new char[filesize + 1];
- size_t sz = fread(ffile, sizeof(char), filesize + 1, fp);
- fclose(fp);
- }
- //将文件数据绑定到insert语句中,替换“?”部分
- sqlite3_bind_blob(stat, 1, ffile, filesize, NULL);
- //执行绑定之后的SQL语句
- sqlite3_step(stat);
- /////////////////////////////////////////////////////////////////////////
- //这时数据库当中已经有了一条包含BLOB字段的数据。接下来我们要读取这条数据:
- //选取该条数据
- sqlite3_prepare(db, "select * from list;", -1, &stat, 0);
- sqlite3_step(stat);
- //得到记录中的BLOB字段
-
- // 得到第几列的2进制数据
- const void * test = sqlite3_column_blob(stat, 2);
- //得到字段中数据的长度
- int size = sqlite3_column_bytes(stat, 2);
- char *buffer;
- buffer = new char[size + 1];
-
- //用内存拷贝 拷贝该字段
- memcpy(buffer, test, size);
- //拷贝该字段
- // sprintf(buffer, "%s", test);
- // buffer[size] = '\0';
-
- //此时可以将buffer2写入到文件当中,至此BLOB数据处理完毕。
-
- fp = fopen("111.rar", "wb"); //此处以后应当先接受文件名。之后打开文件,接受客户端的数据写文件。
- if (fp == NULL)
- {
- return;
- }
- fseek(fp, 0, SEEK_END);
- fwrite(buffer, 1, size + 1, fp);
- fflush(fp);
- fclose(fp);
- fp = NULL;
-
- if (buffer != NULL)
- {
- delete []buffer;
- buffer = NULL;
- }
- }
-
- sqlite3_close(db);
附图:


参考文章:
http://www.cnblogs.com/wengzilin/archive/2012/03/28/2420796.html
http://www.cnblogs.com/hnrainll/archive/2011/09/08/2170506.html
相关热门文章
- redis与mysql数据同步
- 在OracleLinux5.11上构建基于L...
- 浅析MySQL数据库OLTP基准测试...
- MySQL执行计划分析工具EXPLAIN...
- 主流MySQL集群实现架构优劣势...
给主人留下些什么吧!~~
评论热议