SQLite数据库使用like模糊查询中文问题
1.首先查看sqlite编码
PRAGMA encoding;
2.编写UTF-8与BG2312转换函数
//UTF-8到GB2312的转换
char* U2G(const char* utf8)
{
int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len+1];
memset(wstr, 0, len+1);
MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);
len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len+1];
memset(str, 0, len+1);
WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
if(wstr) delete[] wstr;
return str;
}
//GB2312到UTF-8的转换
char* G2U(const char* gb2312)
{
int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len+1];
memset(wstr, 0, len+1);
MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);
len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len+1];
memset(str, 0, len+1);
WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
if(wstr) delete[] wstr;
return str;
}
3.编写数据导入函数
bool AddData2LocalDb(CString strAdd)//strAdd为导入的数据
{
CString strTemp;
strTemp.Format(_T("INSERT INTO store VALUES(%s)"),strAdd);
int nLength = strTemp.GetLength();
int nBytes = WideCharToMultiByte(CP_ACP,0,strTemp,nLength,NULL,0,NULL,NULL);
char *p = new char[ nBytes + 1];
memset(p,0,nLength + 1);
WideCharToMultiByte(CP_OEMCP, 0, strTemp, nLength, p, nBytes, NULL, NULL);
p[nBytes] = 0;
p=G2U(p);
if (sqlite3_exec (conn, p, NULL, NULL, &err_msg) != SQLITE_OK)
{
TRACE (_T("操作失败,错误代码:%s\n"), err_msg);
strErr.Format(_T("操作失败,错误代码:%s"),err_msg);
sqlite3_free(err_msg);
return false;
}
return true;
}
4.编写like查询函数
strIn=输入的查询条件
strInfo=输出的查询到的数据
bool CtestmysqlDlg::LocalReadInfo_like(CString strIn,CString &strInfo)
{
CString strTemp;
strTemp.Format(_T("select *from Store where index1 like '%%%s%%'"),strIn);
nLength = strTemp.GetLength();
nBytes = WideCharToMultiByte(CP_ACP,0,strTemp,nLength,NULL,0,NULL,NULL);
p = new char[ nBytes + 1];
memset(p,0,nLength + 1);
WideCharToMultiByte(CP_OEMCP, 0, strTemp, nLength, p, nBytes, NULL, NULL);
p[nBytes] = 0;
stmt=NULL;
p=G2U(p);
if (SQLITE_OK!=sqlite3_prepare_v2(conn,p,strlen(p),&stmt,NULL))
{
if(stmt)
{
sqlite3_finalize(stmt);
}
sqlite3_close(conn);
TRACE(_T("操作失败,错误代码:%s\n"), err_msg);
sqlite3_free(err_msg);
return false;
}
filedCount=sqlite3_column_count(stmt);
do
{
CString strText=_T("");
int r=sqlite3_step(stmt);
if(r==SQLITE_ROW)
{
for (int i=0;i<filedCount;i++)
{
const char* v = (const char*)sqlite3_column_text(stmt,i);
v=U2G(v);
CString strTemp0(v);
if (filedCount==filedCount-1)
{
strTemp0+=_T("&");
}
else
{
strTemp0+=_T("$");
}
strText=strText+strTemp0;
}
strInfo=strInfo+strText;
}
else if (r == SQLITE_DONE)
{
TRACE(_T("Select Finished.n"));
break;
}
else
{
sqlite3_finalize(stmt);
sqlite3_close(conn);
return false;
}
}while (1);
return true;
}
SQLite数据库使用like模糊查询中文问题相关推荐
- pythonsqlite3模糊_Python编写通讯录通过数据库存储实现模糊查询功能
1.要求 数据库存储通讯录,要求按姓名/电话号码查询,查询条件只有一个输入入口,自动识别输入的是姓名还是号码,允许模糊查询. 2.实现功能 可通过输入指令进行操作. (1)首先输入"add& ...
- mybatis、mysql使用函数实现英文模糊查询中文的功能
最近需要做个mysql英文模糊查询中文的功能,常规写法是在表中添加一个要搜索中文的英文字段用于存储要查询中文的英文拼音或者拼音首字母. 这样确实简单方便,但是我不想这么做,我希望mysql本身就能支持 ...
- mysql数据库的xml模糊查询
mysql数据库的xml模糊查询 mybatis框架的xml中<= , >=解析会出现问题,编译报错,所以需要转译 正常的是使用%xxxx% ,现在需要使用 concat('%',#{xx ...
- Android Sqlite数据库多表联合查询
Android Sqlite数据库多表联合查询示例 工作上用数据库存储文件还是很便利的,所以有时候发现一张表存储数据感觉数据结构不是很清晰的时候,就需要新加第二张表或者多张表来进行联合查询对象信,一般 ...
- PHP 数据库中的模糊查询
以下精确查询语句是当获取当前输入值,去数据库筛选,然后返回数据, 但只能是当你输入的值完全等于数据库里的值后才会返回数据, $sql = "SELECT * FROM `userr` WHE ...
- java模糊查询中文没用_java中模糊查询无效
如题,我用这个模糊查询什么结果都查不到,在数据库执行这条语句是可以的,帮忙找下原因,会不会跟connection类型有关Stringsql="selectid,user_umber,mete ...
- MySQL数据库中的模糊查询
MySQL模糊查询 查询语句: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 实例: SQL模糊查询,使用like比较关键字,加上SQL里的通配符,请参考以下: LIKE'Mc ...
- php 数据库 like,php模糊查询_php 简单内容查询代码 利用sql like模糊查询
摘要 腾兴网为您分享:php 简单内容查询代码 利用sql like模糊查询,招联金融,先锋影音,西餐菜谱,融汇财经等软件知识,以及迷你忍者,电e宝app,摄像头检查,旗鱼os,京东掌柜宝app,激光 ...
- Android sqlite数据库update之后数据查询数据获取不实时。。。
最近写项目的时候用android自带的数据库SqliteDatabase,使用过程中发生了这样一件事情,我在Activity B中读取数据库表User中的数据,显示在UI上,然后跳转到Activity ...
最新文章
- Python开发环境配置
- *58.作业与进程的关系
- vue-router 中导航守卫问题
- linux---socket编程
- java隐藏与覆盖_java中方法的隐藏和覆盖问题?
- 利用boost做string到wstring转换,以及字符集转换
- 局域网共享问题全方位解决
- 在matlab中ungetfile后,11条Matlab实用小技巧
- 腾讯“云+未来”峰会亮相山城,助力重庆成为数字中国新标杆
- 2021-08-08 事务的提交,回滚
- 路由器玩机---老毛子设置AP与主路由设置
- 时间序列(数据分析)
- 链接了GitHub的文件,在Pycharm不同颜色的不同含义
- HTML在线转换成PDF
- 详解联通无线上网资费:
- 六十六条经典禅语名句
- CART算法(机器学习)
- 现代计算机领域出现了,时空道路网最近邻查询技术
- 有哪些网站上传视频是不会插入广告的?
- AVL练习题——宠物收养所
热门文章
- 420集的python教程视频_阿里达摩院推的420集的python教程高清版,据说懂中文就能入门...
- ‘个体在外系统’简、繁架构(原创规律)
- 游戏测试题目和答案是什么软件,寻求答案 这是一个测试题 我做好了 可不知道答案!...
- 把冰糖葫芦做成大产业,她不过比别人多了一点“心”
- ngix详解及安装和配置
- jmeter的安装及下载配置
- 2022Java春招面试经历,mybatis面试题常问
- blockly自定义中文出问题_Blockly教程 创建自定义块-Blockly 开发者工具
- mac python+selenium+阿布云 爬取拉钩网
- Volley的使用(一)