`

oracle char类型 preparedStatement 处理

阅读更多

      昨天出了一个奇怪的问题,hibernate通过实体Id(char(10)型)取得数据,session.find("from TableName where id=?","value");取不到数据,但数据库里是有这个条数据。真奇怪,后来用pl/sql看数据库,鼠标点到Id那时,可以看到内容后面还有一些空格,带着期望与质疑把字段里的值自制过来, session.find("from TableName where id=?","value    ");后发现可以。我特别试了下connection.createStatement("select * from table_name where id='value'");则正常取数据,session.find("from TableName where id=?","value");而却找不到数据,然后又试了下 
ptmt = connection.prepareStatement(select * from table_name where id=?");
ptmt.setString(1,"year");

这样也不行,以是结论是:jdbc驱动PrepareStatement对char字段类型的查找问题,因为hibernate是用PrepareStatement的,自然,hibernate对char对应的属性条件查找出现找不到的情况,

解决办法是:
1.属性用TRIM函数处理:session.find("from TableName where TRIM(id)=?","value");
2.char改为varchar2类型

今天试了下mysql,它不会这样的情况,所以结论是:Oracle JDBC PreparedStatement的bug(有可能它故意这样)

分享到:
评论

相关推荐

    解决mybatis使用char类型字段查询oracle数据库时结果返回null问题

    通过对char类型字段的特殊处理,可以确保mybatis框架对Oracle数据库的查询操作的正确性。 知识点: * Oracle数据库中char类型字段的特性 * 使用trim()函数去掉char类型字段的空格 * 将char类型字段改为varchar2...

    oracle的数据类型_java中Clob型详细用法_struts中实现图片上传功能

    【Oracle 数据类型详解】 在 Oracle 数据库中,数据类型是用来定义和存储不同类型数据的格式。以下是一些常见的 Oracle 数据类型: 1. CHAR(n): 定长字符串类型,最多可存储 2000 个字节。如果未指定长度,默认为 ...

    Oracle数据库课堂笔记

    通过Connection、Statement、PreparedStatement和ResultSet等接口,Java程序员可以执行SQL语句、处理查询结果。JDBC的连接池技术提高了性能和资源利用率。 第七讲:Oracle函数 Oracle提供了丰富的内置函数,如数学...

    SQLSERVER到ORACLE的数据库迁移

    在进行数据迁移之前,首先需要了解SQL Server与Oracle之间不同类型的数据类型的映射关系。下面是两种数据库管理系统之间的主要数据类型对应关系: | SQL Server Data Type | Oracle Data Type | |-----------------...

    java存取oracle中的COLB类型数据.pdf

    Java 存取 Oracle 中的 CLOB 类型数据 Java 存取 Oracle 中的 CLOB 类型数据是 Java 开发中的一项重要任务。CLOB(Character Large OBject)是一种大型字符对象,用于存储大型文本数据,最大可存储 4GB 数据。在 ...

    VC连接Oracle

    这需要对Oracle的数据类型、游标、事务管理有深入理解。创建并初始化环境和会话,然后编译和执行SQL语句。 5. **代码示例**:在VC++中,可以使用以下代码片段建立一个简单的ODBC连接: ```cpp #include #...

    Oracle函数_JDBC常用写法

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,其丰富的内置函数使得数据处理变得更为便捷。JDBC(Java Database Connectivity)则是Java编程语言与各种数据库交互的桥梁,它提供了标准的API来执行SQL...

    Oracle_PLSQL.rar_Java plsql_oracle_oracle doc_pl sql_plsql

    - **数据类型**:包括数值型(NUMBER、BINARY_INTEGER、INTEGER等)、字符型(VARCHAR2、CHAR、LONG等)、日期型(DATE)和PL/SQL对象类型。 2. **PL/SQL与SQL的结合** - **嵌入式SQL**:PL/SQL可以直接嵌入SQL...

    ORACLE基础

    在Oracle中,数据类型主要包括数值类型(如NUMBER)、字符串类型(VARCHAR2、CHAR)、日期时间类型(DATE)、二进制数据类型(BLOB、CLOB)以及复合类型如对象类型和集合类型。理解这些数据类型对于正确存储和操作...

    jsp+oracle实现简单的分页

    分页是Web应用程序中常见的需求,特别是在处理大量数据时,它能够提高用户体验,避免一次性加载过多数据导致页面响应变慢。 首先,我们需要有一个Oracle数据库表来存储数据。在提供的示例中,我们看到一个名为`t_...

    ORACLE表自动按月分区步骤

    RETURN TO_CHAR(dt, 'YYYYMM'); END; ``` 2. **创建分区策略**: 接下来,定义一个基于上述函数的分区策略,这可以是范围分区或列表分区。范围分区通常更适合按时间进行连续的分区。 ```sql CREATE ...

    oracle函数大全

    本资源“Oracle函数大全”显然是一个集成了Oracle数据库常用函数的参考文档,旨在帮助开发者和DBA更有效地进行数据处理和查询。 在Oracle SQL中,函数分为多种类型,包括算术函数、字符串函数、日期/时间函数、转换...

    java登陆系统——用oracle数据库实现.docx

    char[] passtext = (); // 这里应该是获取用户输入密码 String str = new String(passtext); // 将密码转换为字符串 ``` - 数据库查询: ```java ResultSet rs = null; try { st = (); // 应该是获取...

    JDBC 书籍 学习

    char[] 缓存主要用于存储字符类型数据(如 CHAR、VARCHAR2、NCHAR 等),而 byte[] 缓存则用于存储其他类型的数据。 - **缓存分配时机**:缓存空间是在 SQL 语句首次执行时分配的,而不是在查询结果返回后才分配。这...

    oracle+jsp实现分页

    在 JSP 页面中,我们可以利用 JavaBean 或者 Servlet 来处理分页逻辑。以下是一个简单的示例,展示了如何通过 SQL 查询语句实现基本的分页功能: 1. **确定每页显示的数据量**:比如每页显示 10 条记录。 2. **计算...

    Java jdbc 范例

    - userSex:Char类型,长度为4 - userAge:整型 为了与Oracle数据库进行交互,我们需要编写DBManager类。在这个类中,我们定义了数据库连接的相关信息,包括URL、用户名和密码。URL的格式通常是`jdbc:oracle:thin:@...

    postgresql 资源信息

    这些类型转换函数使得在处理不同类型的数据时具有极大的灵活性。 例如,`::` 运算符是PostgreSQL中进行类型转换最常用的方式,它允许我们将一个表达式强制转换为目标数据类型。例如,`text::integer` 将文本字符串...

Global site tag (gtag.js) - Google Analytics