请教一个简单却又很烦的和Java相关的数据库问题

03-11-19 licy
在数据库中如果采用char类型的数据,使用jdbc或者ejb数据持久化方式时,如果在前台输入信息,信息长度不够数据库中定义的长度,他们不会自动补空格,结果造成查询不到数据.有没有什么比较好的办法解决这个问题,难道要让我找出数据库结构自己去补空格:).

请各位说一下自己的经验.

banq
2003-11-20 09:12
你使用数据库的like查询?

一般尽量回避这种方式。

oldma
2003-11-20 11:08
select * from tbl_a where trim(col_a)= '?'

但这样会屏蔽掉col_a上的索引,如果要使用索引,建立一个函数索引

BTW:是oracle吧

sirily
2003-11-20 12:50
改变一下数据库的字段类型就可以了啊,因为如果要存入的是可变长度的数组,为什么不把数据库的字段类型设成nvchar?

licy
2003-11-20 18:58
不管是不是like语句啊

我用的是Oracle,有的字段要跟以前的系统保持一致,所以没有用varchar,可是Oracle的jdbc驱动程序居然不会根据数据类型补空格(存在Oracle中的数据不满长度有空格,输入的数据没空格)

inhub
2004-09-02 13:41
我也遇到这个问题,是在没办法。

cmp他不会加trim()也没有用like.

如用类型为char(20)的列作主键,findByPrimaryKey里面会用到

这种查询

select ... from mytable t1 where t1.id = ?
<p>

如果用来查询的参数pk长度是18个字母

结果是javax.ejb.ObjectNotFound

这是CMP Container生成的代码里面的。

直接用preparedStatement也是一样

select t1.name from mytable t1 where t1.id = ?
<p>

ps.setString(1, param);

ResultSet里面没有记录

而使用

"select t1.name from mytable t1 where t1.id = '" + param + "'"
<p>

则可以。

但是CMP怎么办哪?

------------

我的数据库是从db2移植过去的(到oracle)。用wsad开发。

生成oracle的deploy code

结果所有的原来是char类型的字段的表都查寻没有结果

这算是jdbc的问题还是wsad的问题呢?

猜你喜欢