2008-10-04

java.sql.PreparedStatement的方法測試-對應PostgreSQL JDBC4

測試類別: java.sql.PreparedStatement
測試目標: setBinaryStream()
測試jdk: jdk1.6.0_10
測試選擇資料庫:PostgreSQL 8.3.3
測試資料庫對應之JDBC: postgresql-8.3-603.jdbc4


測試原始碼:

package zasax.test;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import zasax.conn.PostgreConnection;

/**
*
* @author YiCheng,Hsiao
*/
public class PreparedStament_SetBinaryStreamTest {

private Connection conn;
private PreparedStatement pstmt;
private String setSQL = "Insert into checktest (\"binary\") values (?)";

public static void main(String[] args)
throws IOException, ClassNotFoundException, SQLException {
PreparedStament_SetBinaryStreamTest psst =
new PreparedStament_SetBinaryStreamTest();
psst.setBinaryStreamValue();
}

public void setBinaryStreamValue()
throws IOException, ClassNotFoundException, SQLException {
PostgreConnection pc = new PostgreConnection();
this.conn = pc.getConnection();
this.pstmt = conn.prepareStatement(setSQL);
//pstmt.setBinaryStream(1, new ByteArrayInputStream(new byte[10]));
//pstmt.setBinaryStream(1, new ByteArrayInputStream(new byte[10]), 10);
//pstmt.setBinaryStream(1, new ByteArrayInputStream(new byte[10]), 10l);
pstmt.execute();
pstmt.close();
conn.close();

}
}

setBinaryStream() 在Java SE API 的內容:

setBinaryStream

void setBinaryStream(int parameterIndex,
InputStream x)
throws SQLException
將指定參數設置為給定輸入串流。在將一個非常大的二進制值輸入到 LONGVARBINARY 參數時,通過 java.io.InputStream 物件發送它可能更為實際。將根據需要從串流中讀取資料,一直讀取到檔案末尾。

註:此串流物件既可以是一個標準 Java 串流物件,也可以是實作標準介面的使用者自己的子類別。

註:查詢 JDBC 驅動程序文檔,以確定使用帶 length 參數的 setBinaryStream 是否更有效。

參數:
parameterIndex - 第一個參數是 1,第二個參數是 2,……
x - 套件含二進制參數值的 java 輸入串流
拋出:
SQLException - 如果 parameterIndex 不對應於 SQL 語句中的參數標記;
如果發生資料庫存取錯誤,或者在關閉的 PreparedStatement 上調用此方法
SQLFeatureNotSupportedException - 如果 JDBC 驅動程序不支持此方法
從以下版本開始:
1.6

setBinaryStream

void setBinaryStream(int parameterIndex,
InputStream x,
int length)
throws SQLException
將指定參數設置為給定輸入串流,該輸入串流將具有給定位元組數。
在將一個非常大的二進制值輸入到 LONGVARBINARY 參數時,
通過 java.io.InputStream 物件發送它可能更為實際。
將根據需要從串流中讀取資料,一直讀取到檔案末尾。

註:此串流物件既可以是一個標準 Java 串流物件,

也可以是實作標準介面的使用者自己的子類別。

參數:
parameterIndex - 第一個參數是 1,第二個參數是 2,……
x - 套件含二進制參數值的 Java 輸入串流
length - 串流中的位元組數
拋出:
SQLException - 如果 parameterIndex 不對應於 SQL 語句中的參數標記;
如果發生資料庫存取錯誤,或者在關閉的 PreparedStatement 上調用此方法

setBinaryStream

void setBinaryStream(int parameterIndex,
InputStream x,
long length)
throws SQLException
將指定參數設置為給定輸入串流,該輸入串流將具有指定位元組數。
在將一個非常大的二進制值輸入到 LONGVARBINARY 參數時,
通過 java.io.InputStream 物件發送它可能更為實際。
將根據需要從串流中讀取資料,一直讀取到檔案末尾。

註:此串流物件既可以是一個標準 Java 串流物件,

也可以是實作標準介面的使用者自己的子類別。

參數:
parameterIndex - 第一個參數是 1,第二個參數是 2,……
x - 套件含二進制參數值的 java 輸入串流
length - 串流中的位元組數
拋出:
SQLException - 如果 parameterIndex 不對應於 SQL 語句中的參數標記;
如果發生資料庫存取錯誤,或者在關閉的 PreparedStatement 上調用此方法
從以下版本開始:
1.6




setBinaryStream()方法所印出結果:
setBinaryStream(int parameterIndex, InputStream x ) throws SQLException


setBinaryStream(int parameterIndex, InputStream x, int length ) throws SQLException


setBinaryStream(int parameterIndex, InputStream x, long length ) throws SQLException

結論:
確認環境為postgresql-8.3-603.jdbc4及jdk1.6.0_10,而setBinaryStream(int, InputStream) 及 setBinaryStream(int, InputStream, long)所拋出的未實作的完成的異常,而拋出異常的位置為org.postgresql.util.PSQLException,表示setBinaryStream(int, InputStream) 及 setBinaryStream(int, InputStream, long)在PostgreSQL JDBC中還未實作出來,所以要使用setBinaryStream()方法時,還是得透過setBinaryStream(int, InputStream, int)。

沒有留言:

網誌存檔

PostgreSQL & Google-Analytics Running...

::Planet PostgreSQL::

PostgreSQL Information Page

PostgreSQL日記(日本 石井達夫先生Blog)

PostgreSQL News

黑喵的家 - 資料庫相關

Google 網上論壇
PostgreSQL 8 DBA 專業指南中文版
書籍內容討論與更多下載區(造訪此群組)
目錄下載: PostgreSQL_8 _DBA_Index_zh_TW.pdf (更新:2007-05-18)

全球訪客分佈圖(Google)

全球訪客分佈圖(Google)