【问题标题】:Update() method doesn't work with ORACLE databaseUpdate() 方法不适用于 ORACLE 数据库
【发布时间】:2013-01-15 03:48:27
【问题描述】:

我不知道为什么 update() 方法不适用于 ORACLE 数据库

deleteQuery = "delete from USBRPF where upper(userid) = upper(?)" ;

String s= "ABC " ;
getJdbcTemplate().update(deleteQuery, s.trim());

有一行 USERID 列的数据为“ABC”(“C”字符后有一些空格字符)

似乎没有找到那行。

但是,如果我将代码更改为下面,它可以工作

deleteQuery = "delete from USBRPF where upper(userid) like upper(?)" ;
String s= "ABC " ;
getJdbcTemplate().update(deleteQuery, s.trim() +  "%");

deleteQuery = "delete from USBRPF where upper(trim(userid)) = upper(?)" ;
String s= "ABC " ;
getJdbcTemplate().update(deleteQuery, s.trim());

注意:所有都适用于 MSSQL 数据库,数据从 ORACLE 迁移。 估计是数据库设置有问题。有没有人能弄清楚?谢谢

修改:

栏目信息:

甲骨文

  BRANCH    CHAR(2 CHAR)          
  COMPANY   CHAR(1 CHAR)         
  DATIME    TIMESTAMP(6)          
  JOBNM CHAR(10 CHAR)          
  UNIQUE_NUMBER NUMBER(18,0)    
  USERID    CHAR(10 CHAR)         
  USRPRF    CHAR(10 CHAR)    

MSSQL

[UNIQUE_NUMBER] [bigint] IDENTITY(1,1) NOT NULL,    
[USERID] [nchar](10) NULL,  
[COMPANY] [nchar](1) NULL,  
[BRANCH] [nchar](2) NULL,   
[USRPRF] [nchar](10) NULL,  
[JOBNM] [nchar](10) NULL,   
[DATIME] [datetime2](6)> NULL,

【问题讨论】:

  • 我从未使用过 Oracle,但您可能需要在列中包含 Oracle 和 SQL/Server 使用的确切数据类型才能获得答案。就我个人而言,当您修剪搜索字符串但它在数据中时,我也不希望它在 SQL/Server 中工作,但是再次不要使用 JDBC。
  • @PeterJ:我添加了 Oracle 和 SQL/Server 使用的数据类型
  • 不起作用究竟是什么意思?你有错误吗?什么都没有删除?是否删除了太多行?顺便说一句:由于应用了自动填充,使用 CHAR 是一个糟糕的选择。我很确定您实际上想要VARCHAR(对于两个DBMS)。

标签: java spring sql-server-2008 oracle10g jdbctemplate


【解决方案1】:

CHAR 是固定长度类型。因此,即使您的数据在数据库中看起来像“ABC”,它也会存储为“ABC”。 CHAR 列将是 padded with spaces up their size

因此,在第一个示例中,您将“ABC”(存储在数据库中)与“ABC”(在 trim() 调用后从 Java 传递)进行比较。在您的第二个和第三个示例中,您正在解决这个问题。

我建议您使用 VARCHAR2,因为它更自然且更常用。如果不可能,您可以尝试将您从 Java 传递的值填充到 Oracle 中定义的 CHAR 大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-02
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 2014-11-12
    相关资源
    最近更新 更多