看这样一个查询:
String name="杨";
String hql="from Computer c where c.name="+name;
Query q=s.createQuery(hql);
List l=q.list(); for(int i=0;i<l.size();i++)
{
Computer c=(Computer)l.get(i);
System.out.println(c.getName());
}
系统提示:
org.hibernate.exception.SQLGrammarException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:2223)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at com.Test.main(Test.java:27)
Caused by: java.sql.SQLException: ORA-00904: "杨": 无效的标识符
hibernate编译后的语句:
Hibernate: select computer0_.ID as ID0_, computer0_.name as name0_ from yang.t_computer computer0_ where computer0_.name=杨
这是由于我们拼字符串产生的错误,通过查看hibernate的语句(computer0_.name=杨),我们或许发现了错误的原因。
下面是解决方法:
方法一:
将sql语句改为:String hql="from Computer c where c.name='"+name+"'";
(不推荐使用这种方法,在某些情况下有可能会出现错误!)
方法二:
使用hibernate的绑定参数的方式进行查询:
String hql="from Computer c where c.name=:name";
Query q=s.createQuery(hql);
q.setString("name", name);
当然可能还有其他解决方案,暂列出常用的两种,仅供参考。
分享到:
相关推荐
- 在编写HQL或Criteria查询时,如果涉及到中文字符串,确保字符串已经正确地转换为相应字符集的字节数组,再传递给Hibernate执行。 5. **IDE与项目配置**: - 检查IDE(如Eclipse、IntelliJ IDEA)的工作空间和...
根据提供的文件信息,我们可以推断出这段代码...综上所述,通过合理配置过滤器及相关的初始化参数,可以有效地解决Hibernate框架在处理中文数据时可能出现的乱码问题。这对于提高系统的健壮性和用户体验具有重要意义。
以下是解决hibernate与MySQL存储中文时出现乱码问题的详细步骤和相关知识点: 1. **配置Hibernate连接URL**: 在`hibernate.cfg.xml`配置文件中,需要正确设置连接URL以指定字符集。添加`useUnicode=true`和`...
在开发Java Web应用时,特别是涉及到Hibernate与MySQL的整合时,中文字符的存储和显示问题是一个常见的挑战。中文字符乱码通常发生在数据的输入、处理和输出三个环节,需要在多个层面进行配置和调整以确保正确的字符...
DetachedCriteria用于创建可存储或传递的查询规格,可以在晚些时候绑定到Session执行,这对于分页查询或异步查询非常有用。 **9. 第三方扩展** Hibernate 3.2支持许多第三方插件,如CGLIB和JPA,以增加更多的功能和...
本参考文档是针对Hibernate的中文版,对于初学者和进阶者都是不可多得的学习资源。下面将详细阐述Hibernate的核心概念、功能及其使用方法。 一、Hibernate概述 Hibernate是一个开源的ORM框架,它通过在Java对象和...
Struts1主要使用ActionForm来传递请求参数,而Struts2引入了更灵活的值栈模型和拦截器机制。Struts2可以与Spring框架无缝集成,利用Spring的DI特性管理Action类,进一步降低耦合度。 这些电子书的打包下载,为学习...
3. **ActionForm**:用于在控制器和视图之间传递数据,实现请求参数到业务对象的映射。 4. **Tiles**:Struts的扩展,提供了一种组织和重用页面布局的方式,使得构建复杂和模块化的页面变得更加简单。 5. **...
然而,当涉及到中文参数的GET和POST传递时,开发者经常会遇到编码问题,导致乱码出现。这是因为不同的编码方式、浏览器设置以及服务器配置等因素可能导致中文字符在传输过程中无法正确解码。 "超强过滤器"的概念...
为了解决UTF-8中文乱码问题,需要在Hibernate的配置文件(hibernate.cfg.xml)中设置字符集为UTF-8,并确保数据库连接URL也包含相应的字符集参数。 在这个整合例子中,数据库连接、SessionFactory的创建、DAO(数据...
在进行MySQL、JSP以及SSH(Struts、Spring、Hibernate)框架集成的网站开发时,中文乱码问题是一个常见的困扰。这通常是由于编码格式不一致、设置不当或处理方式错误导致的。以下是一些关键的知识点,可以帮助你解决...
5. char 型变量可以存贮一个中文汉字,因为 Java 使用 Unicode 字符集,char 型变量可以存贮 Unicode 码点中的任何字符。 6. 按值传递和按引用传递是 Java 中的两种参数传递方式,按值传递传递的是变量的值,按引用...
jsp 传参 servlet 接收中文乱码问题是一个经常遇到的问题,特别是在使用 Hibernate+Servlet 框架时。当我们在 jsp 页面传参到 servlet 时,中文字符经常会出现乱码问题。这是因为在 HTTP 请求中,默认的编码方式是 ...
当需要对数据库进行增删改查操作时,只需操作Java对象即可,Hibernate会自动完成相关的数据库事务处理。这大大提高了开发效率,也减少了因手动编写SQL语句可能导致的错误。 在本项目中,编码格式使用了UTF-8,这是...