自己测试过,在VC6.0 VS05和VS08都可以
首先搭建环境:
一、需要的文件
sqlite3.dll
sqlITE3.lib
Cppsqlite3U.h
VC6.0(默认多字节)的话如果假如C++库的话,编译会提示一个错误,貌似是转换为整型的,改下就可以了,
OK
一般的创建、查询:
(创建可以纯用C去写,我这里为了方便调用的C++的库Cppsqlite3U.cppCppsqlite3U.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.cppCppsqlite3U.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, &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, SEEK_END);
- filesize = ftell(fp);
- fseek(fp, 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;", 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, SEEK_END);
- fwrite(buffer, 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