PreparedStatement中setString方法的异常处理

如有表:
create table test(
id int,
name   varchar2(3000)
)
当执行插入语句到
stmt.setString(2, myString);
的时候,出现如下异常:

java.sql.SQLException: 数据大小超出此类型的最大值
而myString变量的内容为超过700的中文字符(测试的英文字符为2000个)。
也就是说一个中文字符占据了3-4个字节,而且英文字符个数也不对,这好像有点不可思议。
分析原因:
1、驱动程序在把SQL语句发给数据库前,PreparedStatement会对字符串进行预处理并进行转义替换;
2、字符集原因。
通过阅读PreparedStatement文档,发现有一个setCharacterStream方法可以解决这个问题:
stmt.setCharacterStream(2,new InputStreamReader(myString, myString.length());
替换之后中文字符可达1400多。

解决PreparedStatement的setString中字符串长度问题可以有两种办法:
1、使用setCharacterStream()方法;
2、使用OCI驱动连接Oracle数据库。

你可能感兴趣的:(oracle,sql,数据库,测试,table,文档)