提交字符数长度在[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方法限制了字符串的长度
本以为那个方法已经解决了问题,没想到这只是解决了半边问题,使长度超过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方法限制了字符串的长度
相关文章推荐
- 关于“ora-01483:DATE或NUMBER赋值变量的长度无效”的问题
- 关于Mac 中Eclipse 的SVN 提交的时候提示 out of date的问题
- 关于页面无效字符的问题
- 关于Firefox浏览器submit提交无效的问题
- 关于svn提交时候遇到的问题
- 关于c语言中变量赋值问题
- 关于sql语句"无效字符"的问题
- SqlServer中使用Select语句给变量赋值的时候需要注意的一个问题
- 关于ASP.NET中按钮提交后textbox不能赋值的问题
- 关于在mysql触发器中变量(prefixed with @)赋值错误的问题
- Ext.Net/ExtJs:关于TextField控件内size、maxLength控制文本框输入字符长度属性失效问题分析以及解决方案
- 关于字符数组的长度问题
- 关于cmd输入字符长度限制问题
- 关于全局变量赋值的问题
- 解决“Base-64字符数组的无效长度” 的问题
- ORA-00911: 无效字符 ORA-01006: 赋值变量不存在
- 关于二维数组地址和指针之间赋值的问题
- SVN提交出现“< < < < < < < .mine’无效,路径中具有非法字符”的问题
- 关于静态变量“赋值无效问题”的探讨结果