整理了一下:
xiaoyuonline 写道
关于Hibernate的HQL语句的占位符的一个问题
首先我的环境是Hibernate + oracle9i。user表中name类型为char(10),有值为hello的记录。
代码如下:
String hql = "select user.name from User user where user.name='hello'";
Query query = session.createQuery(hql);
List list = query.list();
System.out.println(list.isEmpty());
打印出来是false,说明查到了数据。
但如果改写上面的代码如下:
String hql = "select user.name from User user where user.name=:name";
Query query = session.createQuery(hql);
query.setParameter("name","hello");
List list = query.list();
System.out.println(list.isEmpty());
打印出来就是true,说明没有查到数据
经过我的测试,上面的问题确实存在。
但当数据库采用sql server或者mysql5时,采用char类型,没有任何问题。
所以判断该错误与hibernate本身没有关系。而与oracle的jdbc驱动有关。
试了classes12.jar和ojdbc.jar,也试过了oci驱动,均错误依旧。
我建了一个表:create table test(name char(7));内有N条值为hello的记录
第一种:不用占位符,
java.sql.PreparedStatement ps = connection().prepareStatement("select * from test where name='hello'");
java.sql.ResultSet rs = ps.executeQuery();
记录集rs有数据;
第二种:使用占位符,
java.sql.PreparedStatement ps = connection().prepareStatement("select * from test where name=?");
ps.setString(1,"hello");
java.sql.ResultSet rs = ps.executeQuery();
记录集rs中无任何数据。
将字段类型改为varchar时以上两条jdbc sql均无任何问题。因此,不要再费劲了,至于产生此问题的详细原因及解决办法,我暂时还没想到。oracle的第三方驱动很少,datadirect还是收费的。
笨一点的解决办法,就不要再采用char类型了,想不通为什么非要用此类型不可。直接转换为varchar类型好了,绝对的正常。
分享到:
相关推荐
"解决mybatis使用char类型字段查询oracle数据库时结果返回null问题" 在使用mybatis框架对Oracle数据库进行查询操作时,如果使用char类型字段作为查询条件,可能会出现结果返回null的问题。这种情况下,需要对char...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,其丰富的内置函数使得数据处理变得更为便捷。JDBC(Java Database Connectivity)则是Java编程语言与各种数据库交互的桥梁,它提供了标准的API来执行SQL...
本篇文章将围绕 Oracle JDBC 驱动的内存管理进行深入探讨,旨在帮助读者理解 Oracle JDBC 在不同版本中的内存管理机制,并提供一些优化内存使用的实用技巧。 #### 二、Oracle JDBC 内存管理概述 ##### 2.1 早期版本...
Java JDBC(Java Database ...综上所述,本案例展示了如何使用Java JDBC连接Oracle数据库,创建数据库连接,封装数据实体以及初步构建用户界面。要使这个案例完整运行,还需要补充业务逻辑和用户界面的交互代码。
要使用JDBC,首先需要在程序中加载数据库驱动,然后建立数据库连接,创建Statement或PreparedStatement对象,编写SQL语句,最后执行查询并处理结果。 2. **数据库连接** 在这个系统中,可能使用了诸如MySQL、...
Java 存取 Oracle 中的 CLOB 类型数据 Java 存取 Oracle 中的 CLOB 类型数据是...Java 存取 Oracle 中的 CLOB 类型数据需要注意许多细节,例如创建含 CLOB 字段的表、插入 CLOB 类型的数据、读取 CLOB 类型的数据等。
首先,需要加载数据库驱动,这通常通过`Class.forName()`方法完成,例如加载Oracle数据库的驱动`oracle.jdbc.driver.OracleDriver`。接着,创建数据库连接对象,通过`DriverManager.getConnection()`方法,提供...
- **表结构和字段类型**:Oracle使用了诸如NUMBER、VARCHAR2、CHAR、DATE等字段类型,而MySQL的字段类型包括int、long、double、float、varchar、char等。 - **表引擎**:MySQL的表可以采用不同的存储引擎,如...
JDBC是Java平台标准的一部分,它提供了一套接口和类,使得Java应用程序能够连接到各种类型的数据库,包括Oracle、MySQL、SQL Server等。在Java程序中,我们可以使用JDBC进行数据的增删改查操作。 首先,创建数据库...
`CreateTable.java`可能包含了更复杂的功能,如错误处理、事务控制或动态SQL,但上述步骤概括了使用Oracle JDBC API创建表的基本流程。如果你需要深入理解或优化这部分代码,可以详细分析并运行`CreateTable.java`...
根据提供的文件信息,我们可以推断出这是一份关于使用Java编程语言开发登录系统的文档,其中涉及到Oracle数据库的应用。下面将对这份文档所涉及的关键知识点进行详细的解析与扩展。 ### Java登录系统开发概述 ####...
在Java应用程序中操作分区表,可以使用JDBC API。确保在插入、更新或查询时,正确处理分区键值,以充分利用分区的优势。例如: ```java Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@//...
在Java中操作Oracle数据库通常需要使用JDBC驱动。Oracle提供了专用的JDBC驱动程序,例如`ojdbc.jar`,通过它可以在Java应用中执行SQL语句与数据库进行交互。 #### 1.3 使用CLOB字段 在Java中,可以通过`oracle.sql....
在“DateBase_java_”项目中,开发者可能使用了JDBC来连接到一个数据库,比如MySQL、Oracle或SQLite等。 3. **数据库设计**:在创建数据库时,需要考虑数据模型,如关系型数据模型。这涉及到创建表(tables)、定义...
以上就是使用Java和JDBC创建Oracle数据库表的基本步骤。在“c16_1.java”文件中,你将找到类似的代码实现。通过运行这个程序,你应该能在Oracle数据库中看到新创建的“student”表。记得替换示例中的URL、用户名和...
根据提供的信息,我们可以详细探讨如何使用 Oracle 数据库与 JSP(JavaServer Pages)技术结合来实现数据分页功能。在 Web 开发中,分页是非常常见的需求之一,它能够有效地提高用户体验并减轻服务器负担。 ### ...
8. **SQL数据库操作**:实验要求使用SQL或Oracle数据库,通过JDBC(Java Database Connectivity)接口与数据库进行交互,执行CRUD(创建、读取、更新、删除)操作。 9. **数据库设计**:创建三张表(学生档案表、...
使用JDBC的基本步骤如下: 1. **加载驱动**:通过Class.forName()方法加载相应的数据库驱动。 2. **建立连接**:使用DriverManager.getConnection()方法建立与数据库的连接。 3. **执行SQL语句**:通过Connection...