您的位置:首页 > 其它

提交字符数长度在[1000,2000]即字符数长度在1000到2000之间的时候报:关于“ora-01483:DATE或NUMBER赋值变量的长度无效”的问题

2009-12-16 17:43 447 查看
在看这篇文章之前可以先看看我以前所写的一篇《关于“ora-01483:DATE或NUMBER赋值变量的长度无效”的问题》

本以为那个方法已经解决了问题,没想到这只是解决了半边问题,使长度超过2000字符数的时候就不会报错,但是今天突然发现当字符数在1000-2000之间也包括1000和2000个字符数的时候依然会报错。

我该想openeditor说对不起,不是你不够好,而是我的错。本以为openeditor文本编辑器插入表格就报:ora-01483:DATE或NUMBER赋值变量的长度无效,是它本身的控件问题,现在才知原来是今天所讨论的问题。

后来到网上查了一下,发现也有前辈们遇到过此问题,参考前辈们留下的经验

解决思路是:当提交字段长度在1001至2000时,添加空格增加长度,这样就不会报错。 当取出来显示时就用trim就OK了。

转换方法:

/**
* 当字符串长度在1000-2000之间的时候补空格
* @param str
* @return
*/
public String translate(String str)
{
if(null==str){
return "";
}
if(str.length()>2000||str.length()<1000)return str;
char[] c = new char[2001];
Arrays.fill(c,' ');
char[] cs = str.toCharArray();

System.arraycopy(cs,0,c,0,cs.length);
return new String(c,0,c.length);
}
注意 char[] c = new char[2001]; 这里至少为2001,而不能初始化为2000,测试的时候发现当设为2000依然会报错。

好了,测试一下吧。





当然网上我还看到朋友是遇到这样的问题:

转:http://www.blogjava.net/liuspring/archive/2008/08/26/224760.html

报错代码:

用字符流插入就行了

PreparedStatement pst = conn.prepareStatement("insert into table(name,book) values(?,?)");
pst.setString(1, "spring");

pst.setCharacterStream(2, new InputStreamReader(new ByteArrayInputStream(s.getBytes())), s.length());
pst.execute();

这样可以正常插入。

高兴...

可是好景不长,修改也用如此方法改之,记过又报错: java.sql.SQLException: ORA-01483: DATE 或 NUMBER 赋值变量的长度无效

我晕,在我本地机子上tomcat环境下运行是没有这种错误的,而部署到服务器上,服务器上是weblogic,就报这样的错误,修改失败,而 insert就没有错误,而且如果修改字符数较小的就能修改成功,如果修改较大的就会报错,之后不管修改什么样的,都会报错,闹鬼了,纳闷了,这是什么错 误啊,接着在网上查,高手建议把一个字符拆成两个代入

改成下面这样子

int length=book.length();
String s1="";
String s2="";
if(length>1000){
s1=book.substring(0,1000);
s2=book.substring(1000,length);
}else{
s1=book;

}

pstmt = conn.prepareStatement("update table set book=?||? "+
"where name=?");
pstmt.setString(1, s1);
pstmt.setString(2, s2);
pstmt.setInt(3, “spring”);

结果就成功了,嘿嘿,原来还有这种方法,这是oracle特有的么?呵呵对oracle不熟悉

其实这主要原因是 pstmt.setString方法限制了字符串的长度
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: