Java jdbc中的ps.setascistream()方法和ps.setCLob()方法有什么区别?

Java jdbc中的ps.setascistream()方法和ps.setCLob()方法有什么区别?,java,oracle,jdbc,Java,Oracle,Jdbc,我有一个超过32kb的文件(包含34000个字符,包括制表符和空格)。当我尝试将其插入到Oracle11g数据库中时,会出现以下情况 当我使用preparedStation.setAsciStream(1,inputStream,inputStream.available())时,我从JDBC执行的insert语句失败,并出现Arrayindexoutofboundexception(4096) 当我使用preparedstatement.setCLOB(1,newInputStreamRead

我有一个超过32kb的文件(包含34000个字符,包括制表符和空格)。当我尝试将其插入到Oracle11g数据库中时,会出现以下情况

  • 当我使用
    preparedStation.setAsciStream(1,inputStream,inputStream.available())
    时,我从JDBC执行的insert语句失败,并出现Arrayindexoutofboundexception(4096)

  • 当我使用
    preparedstatement.setCLOB(1,newInputStreamReader(inputstream))
    时,它可以工作

  • 这两种方法的区别是什么


    CLOB数据类型的实际限制是什么?

    不要使用
    inputStream.available()
    。它不会给您文件中的字节数,只提供缓冲区中可用的字节数。请考虑尝试<代码> SETASCIISRAMAM(INT,INSIDSPORE)< /C> >,或者将文件的实际长度传递给<代码> SETASCIISRAMAM(int,INPIDSRORT,INT)方法>。code>InputStream.available()通常不返回总长度,但也可以返回0或当前缓冲的数据长度。