Java6和Java7之间的字符串长度差异

Java6和Java7之间的字符串长度差异,java,string,oracle,encoding,Java,String,Oracle,Encoding,我有一个程序,可以逐行读取文件(使用bufferedreader),并将其内容写入Oracle db中4000字节大小的表列中。顺便说一句,Oracle中的列长度限制为VARCHAR2(4000字节)。我的应用程序在java6中运行良好。然而,当我升级到java7时,我遇到了一个奇怪的情况。我在java7中插入时遇到的错误是 ORA-01461: can bind a LONG value only for insert into a LONG column 在列中插入超过4000字节时会发生

我有一个程序,可以逐行读取文件(使用bufferedreader),并将其内容写入Oracle db中4000字节大小的表列中。顺便说一句,Oracle中的列长度限制为VARCHAR2(4000字节)。我的应用程序在java6中运行良好。然而,当我升级到java7时,我遇到了一个奇怪的情况。我在java7中插入时遇到的错误是

ORA-01461: can bind a LONG value only for insert into a LONG column
在列中插入超过4000字节时会发生此错误。 我正在尝试的文件很大,每个列的大小都是1850个字符(包括nonascii字符),而且当我使用java7运行这个程序时,每次异常都发生在不同的行中。 我的问题是java6和java7之间的什么差异会导致这个字符串长度的差异,而这个差异会导致这个ORA错误

编辑澄清:我不是在问ORA错误,它对我来说已经很清楚了。我的问题是java6和java7之间的什么区别会导致这种情况?因为我可以用java6成功地插入

代码基本上是这样的

            while ((line = bf.readLine()) != null) {
            linenum++;
            prpst.setString(1, line);
            prpst.addBatch();

            if (++batchedLines == 200) {
                prpst.executeBatch();
                batchedLines = 0;
                prpst.clearBatch();
            }
        }

实际上,您可以指定
VARCHAR2(32767 CHAR)
@TimBiegeleisen的列长度。我不是问为什么会发生此错误,而是问java6-7之间的差异会导致不同的长度计算。请再次阅读问题。如果您发布导致该行为的Java代码,也可能会有所帮助。您的Java 6和7是否在相同的环境中测试-相同的区域设置、字符集等。?和相同的数据库(或至少相同的版本,相同的表定义)?@AlexPoole完全相同。我只是改变了开始脚本,这就是结果。顺便说一下,如果IBM JDK很重要的话,我正在使用它。