这里我对用户管理不想使用分页,就模仿手机通讯录实现。
简单的算法在测试的时候没问题,但是就是从数据库查询的数据显示不对,郁闷就调试呗。发现从数据库返回的数据不是按照字典排序的,为何不是以前的情况呢。想想发现,我为了不出现乱码,整个工程统一使用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异步加载效果更好了。
简单显示如下:
积累一点多一点的哦。。。
相关推荐
① 实现通讯录的信息中包括姓名、电话号码、地址、邮箱等数据项。 ② 支持从文件读入通讯录 ③ 插入、删除、修改通讯录记录 ④ 可按姓名或电话号码对通讯录进行排序 ⑤ 查询通讯录记录,可按姓名和电话号码查询...
【J2EE实现通讯录 jsp 基于MYSQL数据库】是一个典型的Web应用程序开发实例,主要涉及了Java服务器页面(JSP)、JavaServer Pages(JSP)技术、JavaServlet、以及MySQL数据库的集成使用。这一项目是许多学习者在学期...
"ABC26字母排序通讯录"是一个基于26个英文字母顺序排列的通讯录演示项目,其设计灵感来源于手机通讯录的功能。这个DEMO可能用于教学目的,帮助开发者理解如何构建这样的功能。 通讯录系统的核心在于数据结构和算法...
【手机通讯录实现】 手机通讯录的核心功能包括联系人存储、搜索、分组和编辑。在QT中实现这些功能,首先需要建立一个QSL数据库来存储联系人信息,通常包括姓名、电话号码、电子邮件地址等字段。这可以通过创建...
【标题】"精典源码之仿腾讯通讯录管理.rar" 涉及的主要知识点是通讯录管理和软件开发,特别是模仿腾讯的通讯录管理功能。这个压缩包可能包含了一个实现类似腾讯通讯录管理功能的软件项目,让我们深入探讨一下相关的...
【PB实现的个人通讯录管理】是一个基于PowerBuilder(PB)开发的个人信息管理系统,用于高效、便捷地管理和存储联系人信息。这个项目是作者在学完PowerBuilder和数据库技术后进行的一次课程设计,获得了优秀的评价。...
《我的通讯录管理系统Java实现详解》 通讯录管理系统是一个实用的应用程序,用于存储、管理和查找个人联系信息。本文将深入探讨一个基于Java实现的通讯录管理系统,包括其核心功能、技术选型以及如何在Eclipse环境...
【Java实现个人通讯录管理系统】 在信息技术领域,个人通讯录管理系统是一种常见的应用,它用于存储、管理和检索联系人的信息,如姓名、电话号码、电子邮件地址等。本项目以Java编程语言实现了这样一个系统,旨在...
在本项目中,"C语言实现链表通讯录"是一个典型的C语言编程任务,它结合了数据结构(链表)和数据库(MySQL)的应用。这个课程设计的目标是创建一个能够与MySQL数据库交互的C语言程序,以管理联系人信息。下面我们将...
5. **排序与显示**:通讯录通常会按照某种规则(如字母顺序)排列联系人列表,并在界面上展示。这可能运用到了Java的排序算法,如快速排序、归并排序或内置的`Collections.sort()`方法。 6. **导入与导出数据**:...
【Ajax 实现通讯录】 Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。在本案例中,它被用于创建一个交互式的通讯录应用,用户可以在不刷新页面的情况下...
总的来说,通过Java和MySQL的结合,我们可以构建一个强大的通讯录管理系统,不仅可以满足基本的联系人管理需求,还可以扩展到更复杂的操作,如搜索、排序和过滤联系人。这个系统的实现涉及数据库设计、Java编程以及...
这个程序的核心功能包括好友分类和排序,这些都是通过与MySQL数据库进行交互来实现的。以下是这个项目涉及的一些关键知识点: 1. **Java基础**:Java是该项目的基础,它是一种广泛使用的面向对象的编程语言,具有跨...
或者排序功能,按照不同的字段(如姓名或联系时间)对联系人列表进行排序。此外,为了防止用户意外丢失数据,还可能有定期备份数据库的机制。 总的来说,"Java同学通讯录"项目是一个综合性的Java编程练习,涵盖了...
【企业通讯录php源码】是一个用于构建企业内部通讯录的Web应用系统,它基于PHP编程语言实现,提供了丰富的功能,以满足企业对于员工信息管理的需求。PHP是一种广泛使用的开源服务器端脚本语言,尤其适合Web开发,...
《数据结构课程设计:构建同学通讯录系统》 在数据结构课程设计中,构建一个同学通讯录系统是一项常见的实践任务,旨在将理论知识应用于实际问题解决。这个项目不仅要求我们理解并运用各种数据结构,还需要熟悉...
通过使用JSP(JavaServer Pages),该系统可以实现动态网页,提高用户体验并确保数据的安全性。 二、ASP技术基础 ASP是微软公司推出的一种服务器端脚本环境,用于生成和执行动态网页。在“班级通讯录系统 ASP课程...
在本项目中,"java通讯录名片源代码"是一个基于Java编程语言开发的桌面应用程序,旨在模拟手机上的通讯录功能。这个程序实现了联系人的管理,包括添加、删除、修改和查询联系人信息,并且能够对联系人进行排序。值得...
在线通讯录系统需要持久化存储联系人数据,这通常涉及与关系型数据库(如MySQL、Oracle等)的交互。通过Java的JDBC(Java Database Connectivity)API,开发者可以编写SQL语句来实现数据的增删改查操作。系统可能还...
1.通讯录联系人信息有:姓名(中文)、公司、职位、电话号码、备注 2. 可对通讯录联系人实现增、删、查、改操作 3. 支持中文联系人输入 4. 可实现手机与姓名查找联系人 5. 通过姓名拼音进行排序 6. 有快速浏览...