在oracle中执行以下sql
create table A (
id char(5)
);
insert into A values('11');
使用以下java代码查询该记录
String sql="select * from A where id=?";
pstm=conn.prepareStatement(sql);
pstm.setString(1,"11");
rs=pstm.executeQuery();
System.out.println(rs.next());
呵呵...是不是查不到任何东西啊,将sql改掉看看:
String sql="select * from A where trim(id)=?";
是不是查出来了,哈!,可是能不能不用trim()就能查出来呢?
那是可以的!
请看代码:
String sql="select * from A where id=?";
pstm=conn.prepareStatement(sql);
((OraclePreparedStatement)pstm).setFixedCHAR(1, "11");
rs=ps.executeQuery();
System.out.println(rs.next());
执行看看,查询成功!
这是为什么呢,由于我英文水平不好,所以请打开以下链接看看!
对于hibernate查询oracle char类型可谓是遇到大麻烦了,因为hibernate内部使用的是PrepareStatement,在查询oracle char类型时会出现上述的问题,我的解决方案是定义一个UserType,该UserType对字段值自动补齐空格,以下是我的配制文件示例:
<id name="id">
<column name="id"/>
<type name="test.OracleCharType">
<param name="length">5</param>
</type>
<generator class="assigned" />
</id>
test.OracleCharType就是我自定义的UserType类,它实现了当我们传进来的id值少于5位时,自动加空格,使id值满足5位.
这样,当我们使用以下语句获取对象,便能获取到了.
session.get(A.class,"11")
它底层的查询语句会转换成
select * from A where id='11 ';
怎么样,明白了不.你可能会说为什么使用加空格而不使用trim()函数截取的方式,那是因为hibernate的UserType只能对字段值做手脚(如:'11'变成了'11 ').
这种方案只需要定义一个UserType,然后在hbm文件里配制一下就可使用了.
当然这只是其中一种解决方案,如果你不嫌麻烦的话,可以将查询都改成hql+trim()的方式查询,那么工作量会加很多.
也可以为每个po对象加一个<sql-query></sql-query>,不过这种方式到没有试过,不知是否可行!
自己做个继承类就好,不要随便修改framework,否则以后它升级了你再去改源代码再编译?
Java代码- public class TrimStringType extends StringType {
- public Object get(ResultSet rs, String name); throws SQLException {
- return ((String);super.get(rs, name););.trim();;
- }
- }
- <property name="title" type="mypackage.TrimStringType">
- <column name="TITLE" sql-type="char(80);"/>
- </property>
相关推荐
10. Web开发:Java的Servlet和JSP技术是构建Web应用程序的基础,Spring框架提供了全面的企业级应用解决方案。 11. Android开发:Android系统大量使用Java语言,开发者可以利用Java进行移动应用的开发。 12. 大数据...
1. **Char型变量与中文汉字**:Java的`char`类型可以存储中文汉字,因为Java使用Unicode编码,每个`char`占16位,足以表示大部分汉字。 2. **多线程实现**:Java中有两种创建线程的方式:一是实现`Runnable`接口,...
Java的基本数据类型:Java中的基本数据类型有byte、short、int、long、float、double、char和boolean。 冒泡排序:一种简单的排序算法,通过重复遍历要排序的数列,比较每对相邻元素,若前者比后者大,则交换它们。...
1. 选择题:在Java编程中,如果尝试使用一个`char`类型的变量作为参数调用方法,而该方法没有对应`char`类型的重载版本,编译器会报错。这涉及到Java的类型匹配规则和方法重载。 2. 数据库连接与安全:为避免SQL...
### JAVA+ORACLE面试题汇总知识点解析 #### 1. Overload、Override与Overloaded的区别是什么? - **Overload(重载)**:在同一个类中可以定义多个方法,只要它们的方法名相同而参数列表不同即可。参数列表的不同...
### 自整理Java关于基础和框架的面试题 #### 基础知识点 ##### JDK常用的包 - **java.lang**: 包含所有基本类,如`String`、`Math`等。...- Spring是一个开源框架,提供了一整套的企业级服务解决方案...
- **Hibernate**:全ORM解决方案,自动管理对象的生命周期。 - **MyBatis (原Ibatis)**:半ORM框架,提供动态SQL支持。 - **JDBC**:直接与数据库交互,灵活性高但编码繁琐。 ##### Hibernate的运行原理 - **...
16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...
16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...
16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...
16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...
16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 135 17.介绍一下Hibernate的二级缓存 135 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...
16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message...
16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...
Java中`char`类型占用2个字节,足以存储一个Unicode字符,包括中文汉字。 #### 8. 对抽象类以及接口的理解 - **抽象类**:包含抽象方法的类,不可实例化,用于提供通用行为的模板。 - **接口**:定义了一组方法...
- 基本数据类型:整型(int, short, byte, long)、浮点型(float, double)、字符型(char)、布尔型(boolean)。 - 引用数据类型:类(class)、接口(interface)、数组(array)。 2. **控制结构**: - 流程控制语句:if-...
Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。它的设计目标是具有简单性、面向对象、健壮性、安全性、可移植性、高性能和多线程等特性。Java在各种领域都有...
- **变量与数据类型:** Java中的变量分为基本数据类型(如int、double、char等)和引用数据类型(如String、自定义类等)。掌握各种数据类型的使用方式以及变量声明规则。 - **运算符与控制流:** 学习算术运算符...
初学者应掌握基本数据类型(如int、double、char)、运算符、控制流(如if语句、for循环、while循环)以及方法的定义和调用。 在深入学习Java时,会接触到类库,例如Java集合框架,包括ArrayList、LinkedList、...