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)。
沒有留言:
張貼留言