`
zl378837964
  • 浏览: 186561 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

mysql中文排序并实现仿手机通讯录

    博客分类:
  • j2ee
 
阅读更多


         这里我对用户管理不想使用分页,就模仿手机通讯录实现。

 

 

 

          简单的算法在测试的时候没问题,但是就是从数据库查询的数据显示不对,郁闷就调试呗。发现从数据库返回的数据不是按照字典排序的,为何不是以前的情况呢。想想发现,我为了不出现乱码,整个工程统一使用UTF-8编码的。

          UTF8 默认校对集是 utf8_general_ci , 它不是按照中文来的。你需要强制让MySQL按中文来排序。出现这个问题的原因是因为MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认的字符集,因此在比较过程中中文编码字符大小写转换造成了这种现象。

解决方法:
对于包含中文的字段加上"binary"属性,使之作为二进制比较,例如将"name char(10)"改成"name char(10)binary"。
如果你使用源码编译MySQL,可以编译MySQL时使用with charset=gbk 参数,这样MySQL就会直接支持中文查找和排序了(默认的是latin1)。也可以用 extra-charsets=gb2312,gbk 来加入多个字符集。
如果不想对表结构进行修改或者重新编译MySQL(我的当然不会了,我就统一使用UTF8),也可以在查询语句的 order by 部分使用 CONVERT 函数。比如 select * from tablename order by CONVERT(chineseColumnName USING gbk);

 

因为CONVERT函数只适用于SQL不适用于HQL,

HQL语句没法使用,因为最终是要org.hibernate.hql.PARSER 解析成SQL语句的,解析的时候会报异常:

 

所以使用SQL,我又使用的是模板最终代码如下:

/**
*  SQL设置 支持中文排序 CONVERT(chineseColumnName USING gbk)
*  hibernateTemp.find("from OaUser order by convert("+prop+" using gbk)");
*  异常:org/hibernate/hql/ast/QuerySyntaxException.java
*  org.hibernate.hql.PARSER - line 1:58: unexpected token: using
*/

使用回调函数灵活处理

 

 

@SuppressWarnings("unchecked")
	public List<OaUser> findAllByOrder(final String prop) {
		hibernateTemp.setCacheQueries(true);  //设置二级缓存
		return hibernateTemp.executeFind(new HibernateCallback<List<OaUser>>() {
			
			public List<OaUser> doInHibernate(Session session)
					throws HibernateException, SQLException {
				return session.createSQLQuery("select * from oa_user order by convert("+prop+" using gbk)")
						.addEntity(OaUser.class)
						.list();
			}
		});
	}

 

 

 

 

 区分sql和hql语法我就不用说了吧。

 1、.setCacheQueries(true);设置缓存减小数据库鸭梨啦。

 2、addEntity(OaUser.class); 不设置语句不会报错,但是,在页面提取不到值;因为createQuery 和 createSQLQuery的不同,createSQLQuery得到的list里面不是entity对象。

对返回的list处理封装传到页面,然后再在页面处理迭代啦,

也可以使用Ajax异步加载效果更好了。

简单显示如下:

 

积累一点多一点的哦。。。

 

 

  • 大小: 12.5 KB
3
9
分享到:
评论
4 楼 zl378837964 2013-01-06  
我是后台管理用户使用的,兄弟。不是一般不建议,不是想象的,而是确实用到了才这样写的
3 楼 zl378837964 2013-01-06  
使用Ascii码,写个算法就可以将中文转化为拼音,然后使用Map容器写个算法装载后,传到页面迭代出来就OK了,
2 楼 inta 2013-01-04  
如何区分C、D...的
1 楼 234390216 2013-01-03  
一般还是不建议对中文进行排序的,速度慢

相关推荐

    C语言连接mysql,实现通讯录功能

    ① 实现通讯录的信息中包括姓名、电话号码、地址、邮箱等数据项。 ② 支持从文件读入通讯录 ③ 插入、删除、修改通讯录记录 ④ 可按姓名或电话号码对通讯录进行排序 ⑤ 查询通讯录记录,可按姓名和电话号码查询...

    通讯录管理系统.zip(Linux-C语言+数据结构+MySQL)

    1.通讯录联系人信息有:姓名(中文)、公司、职位、电话号码、备注 2. 可对通讯录联系人实现增、删、查、改操作 3. 支持中文联系人输入 4. 可实现手机与姓名查找联系人 5. 通过姓名拼音进行排序 6. 有快速浏览...

    java通讯录名片源代码

    这几天用java写的一个通讯录名片,实现了增删改查排序等功能,和手机上得通讯录功能差不多。图形界面实现的,不是javaweb。数据库用的是mysql5

    Java通讯录源代码

    这是本人用Java在NetBeans环境下写的一个通讯录程序。后台采用MySql作为数据库。通讯录提供好友分类、排序等功能。希望能对想学习数据库编程的朋友有所帮助。

    基于SSH的通讯录管理系统【项目源码+数据库脚本】(毕设)

    二、技术实现 ​后台框架:Spring、Struts2、Hibernate ​数据库:MySQL 开发环境:JDK、Eclipse、Tomcat 三、系统功能 本通讯录管理系统分为四大模块:用户登录、联系人信息维护、查找联系人、用户信息维护。 1....

    数据结构通讯录系统需求分析报告.doc

    课程设计(二) 需求分析报告 题 目 计算机通讯录系统的 设计与实现 学生姓名: 学 号: 系 别: 专 业: 指导教师: 起止日期: 2011.05.21——2011.05.25 2011年 5月 10 日 1 范围 1.1 标识 "文件状态: ...

    Java通讯录(基于Java图形库和简单的jdbc)

    程序设计课程课设,用Java写的通讯录,使用图形化界面,使用mysql数据库存储信息(不涉及mybatis),联系人属性包括姓名,性别,电话号码,家庭住址。具体功能包括增、删、改、查(可选择按照姓名和电话号码进行查找...

    按Excel表格导入导出到数据库的通讯录管理系统

    方便的录入和查询联系人,联系人归类,按Excel表格导入导出联系人,列表列排序,联系人排名。良好的页面操作方式

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例005 下载并安装JRE执行环境 8 实例006 编程输出星号组成的等腰三角形 9 1.2 开发工具 11 实例007 下载最新的Eclipse 11 实例008 为最新的Eclipse安装中文语言包 12 实例009 活用Eclipse的工作空间 14 实例010 在...

    社交聊天平台完整版源码【vue前端+后台+完整数据库+完整文档教程】

    按照a-z排序通讯录的好友(参考微信) 朋友圈: 点赞、评论、转发(参考微信) 会员系统: 会员登陆、会员的个人资料编辑(参考微信) 支付系统: 充值、红包、转账 会话功能: 发送文字、表情。 添加好友功能: ...

    JAVA上百实例源码以及开源项目

    百度云盘分享 ... Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。  部分源代码摘录:  ftpClient = new FtpClient(); //实例化FtpClient对象  String serverAddr=jtfServer.getText();...

    JAVA上百实例源码以及开源项目源代码

    Java实现的FTP连接与数据浏览程序 1个目标文件 摘要:Java源码,网络相关,FTP Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 ...

    ThinkSNS开源社交论坛系统 v4.6.1 bulid0630

    分类管理,热门热评类别等多种排序机制,呈现社区精选动态资讯,支持用户投稿,后台审核,使用最适应用户习惯的页面规划,助力运营者与使用者保持高度粘性,把握信息传播渠道。详细介绍...

    ThinkSNS-PHP

    分类管理,热门热评类别等多种排序机制,呈现社区精选动态资讯,支持用户投稿,后台审核,使用最适应用户习惯的页面规划,助力运营者与使用者保持高度粘性,把握信息传播渠道。 活动 发起活动,设置时间限制,调动...

Global site tag (gtag.js) - Google Analytics