setAsciiStream有什么作用?

时间:2013-11-23 22:19:38

标签: java jdbc ascii

这是Javadoc

void setAsciiStream(int parameterIndex,
                    InputStream x,
                    int length)
                    throws SQLException
     

将指定参数设置为给定的输入流,这将是   具有指定的字节数。当一个非常大的ASCII值   输入LONGVARCHAR参数,发送它可能更实际   通过java.io.InputStream。将根据需要从流中读取数据   直到达到文件结尾。 JDBC驱动程序将执行任何必要的操作   从ASCII转换为数据库char格式。

我知道InputStream对象是什么。但是我仍然不明白为什么我们set这个int paramaterindex呢?该方法什么都不返回。它会创建一个对象吗?它改变了什么?任何人都可以用简单的语言解释它吗?


以下是API I am talking about

它有以下几行

PreparedStatement pstmtFld 
    = conFld.prepareStatement(insertTable);
...
pstmtFld.setAsciiStream(1, dataStream, -1);  // What is purpose of this line ???
pstmtFld.executeUpdate();

2 个答案:

答案 0 :(得分:2)

正如它所说,当您将一些非常大的数据放入数据库字段时,您可以使用此方法。它通过网络将数据流式传输到数据库中,而不是一次性将整个值加载到内存中,这可能会浪费内存。

所以你会像这样使用它:

FileInputStream fis = new FileInputStream("huge-file.txt");
BufferedInputStream dataStream = new BufferedInputStream(fis);
pstmtFld.setAsciiStream(1, dataStream, -1);

答案 1 :(得分:2)

  

但是我仍然不明白为什么我们将这个int paramaterindex设置为它呢?

parameterIndex是您在UPDATE或INSERT语句中放置的?的索引。从1开始。

  

该方法什么都不返回。

setter很少这样做。

  

是否会创建一个对象?

我想它可能,但它没有。

  

它改变了什么?

没有AFAIK。它是一个二传手。

  

有人可以用简单的词语解释它吗?

假设您有ASCII文本,它会设置参数。例如如果您的第一个参数是您要将文本存储为8位字符的位置,则可以使用setAsciiText(1,input,-1)

BTW它与此API的其他方法非常相似。我建议你看一下这些比较。