JDBCTM 指南:入门6-PreparedStatement

2019-05-27 21:13:32丽君



6.1.6 发送大的 IN 参数
setBytes 和 setString 方法能够发送无限量的数据。但是,有时程序员更喜欢用较小的块传递大型的数据。这可通过将 IN 参数设置为 Java 输入流来完成。当语句执行时,JDBC 驱动程序将重复调用该输入流,读取其内容并将它们当作实际参数数据传输。

JDBC 提供了三种将 IN 参数设置为输入流的方法:setBinaryStream 用于含有未说明字节的流, setAsciiStream 用于含有 ASCII 字符的流,而 setUnicodeStream 用于含有 Unicode 字符的流。因为必须指定流的总长度,所以这些方法所采用的参数比其它的 setXXX 方法要多一个。这很有必要,因为一些数据库在发送数据之前需要知道其总的传送大小。

以下代码例示了使用流作为 IN 参数来发送文件内容:

java.io.File file = new java.io.File("/tmp/data");
int fileLength = file.length();
java.io.InputStream fin = new java.io.FileInputStream(file);
java.sql.PreparedStatement pstmt = con.prepareStatement(
"UPDATE Table5 SET stuff = ? WHERE index = 4");
pstmt.setBinaryStream (1, fin, fileLength);
pstmt.executeUpdate();

当语句执行时,将反复调用输入流 fin 以传递其数据。