Sqlite3 中文乱码问题 vc9.0测试成功
http://missfeel.blog.163.com/blog/static/6768840220110201308929/
#include "stdafx.h" #include <iostream> #include <Windows.h>
extern "C" { #include "./sqlite3.h" }; using namespace std;
#pragma comment(lib,"./sqlite3.lib")
//UTF-8到GB2312的转换 char* U2G(const char* utf8) { int len = MultiByteToWideChar(CP_UTF8,utf8,-1,NULL,0); wchar_t* wstr = new wchar_t[len+1]; memset(wstr,len+1); MultiByteToWideChar(CP_UTF8,wstr,len); len = WideCharToMultiByte(CP_ACP,NULL); char* str = new char[len+1]; memset(str,len+1); WideCharToMultiByte(CP_ACP,str,len,NULL); if(wstr) delete[] wstr; return str; }
//GB2312到UTF-8的转换 char* G2U(const char* gb2312) { int len = MultiByteToWideChar(CP_ACP,gb2312,len+1); MultiByteToWideChar(CP_ACP,len); len = WideCharToMultiByte(CP_UTF8,len+1); WideCharToMultiByte(CP_UTF8,NULL); if(wstr) delete[] wstr; return str; }
//sqlite3的回调函数 //sqlite 每查到一条记录,就调用一次这个回调 int LoadMyInfo(void *para,int n_column,char**column_value,char** column_name) { //para是你在 sqlite3_exec 里传入的 void* 参数 //通过para参数,你可以传入一些特殊的指针(比如类指针、结构指针),然后在这里面强制转 换成对应的类型(这里面是void*类型,必须强制转换成你的类型才可用)。然后操作这些数据 //n_column是这一条记录有多少个字段 (即这条记录有多少列) //char**column_value 是个关键值,查出来的数据都保存在这里,它实际 上是个1维数组(不要以为是2维数组),每一个元素都是一个 char* 值,是一个字段内容(用 字符串来表示,以 结尾) //char**column_name 跟 column_value是对应的,表示这个字段的字段名称 //这里,我不使用 para 参数。忽略它的存在. int i; printf( "记录包含 %d 个字段n",n_column); for(i=0; i<n_column; i++) {
//UTF-8转换为GB2312 printf( "字段名:%s 字段值:%sn",U2G(column_name[i]),U2G(column_value[i])); } printf("------------------n"); return 0; }
int _tmain(int argc,_TCHAR* argv[]) { char *errmsg = NULL; sqlite3 *db =NULL;
//用的绝对路径测试数据库,呵呵 int result = sqlite3_open("d:DBserver.db3",&db); if (result != SQLITE_OK) { cout<<"失败!"<<endl; return -1; } cout<<"success!"<<endl; //开始查询数据库" char sql[100]; sprintf(sql,"select * from user where name = '张三'");
//GB2312转换为UTF-8 char * pSql = G2U(sql); result = sqlite3_exec(db,pSql,LoadMyInfo,&errmsg); if (result != SQLITE_OK) { cout<<" 查询失败!"<<endl; } if (pSql) { delete pSql;
pSql = NULL; } sqlite3_close(db); return 0; } (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|