預編譯語句

 一、PreparedStatement對象的創建

Connection conn;
.........
PreparedStatement pstmt
=conn.prepareStatement("update new set sno=? where sname=?");
//創建可滾動、可更新數據集
PreparedStatement pstmt=conn.prepareStatement("select * from new", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs
=pstmt.ExecuteQuery();

 二、傳遞IN參數

在執行一個PreparedStatement語句前,一定要向這個對象中的每個IN參數賦值,賦值的過程是通過形如setXXX的方法來完成,其中XXX代表了一個合適的類型名。這個方法的第一個參數是要設置的IN參數的在所有參數中的序數,這個序數從1開始。第二個參數就是要爲這個IN參數設置的值。

//例:
pstmt.setLong(120000);
一旦一個參數被賦值,那麼這個參數在所有執行中將保留這個值,直到使用clearParameters方法清除或是這個參數被賦予了一個新的值爲止。
PreparedStatement pstmt=conn.prepareStatement("update new set sage=? where sname=?");
pstmt.setString(
2,"c");
for (int i=0; i<10; i++){
   pstmt.setInt(
1, i);
   
int rowCount=pstmt.ExecuteUpdate();
}

三、傳遞對象參數

開發者可以使用setObject方法來顯示地將一個Java類型轉換成一個JDBC類型,這個方法還可以有第三個指明目標JDBC類型的參數,驅動程序就可以在把數據送往數據庫前將Java語言中的對象轉化成特定的JDBC類型。

public void setObject (Int parameterIndex, Object, Int targetSqlType) throws SQLException
//
emp.salary=200;
PreparedStatement pstmt
=conn.prepareStatement("update employeeList set employee=? where sname='jack' ");
pstmt.setObject(
1, emp);
pstmt.ExecuteUpdate();

四、傳遞大型數據參數

有時需要將大的數據用小的數據塊來傳送,這樣可能方便地將IN參數設置成Java的輸入流。當SQL語句執行的時候,驅動程序就可以多次訪問這個輸入流,直到取出全部數據作爲參數IN參數

1、 setBinaryStream:用來把IN參數設成只含有二進制數的流

public void setBinaryStream ( Int parameterIndex, InputStream x, Int length)
//parameterIndex: 參數索引
//InputStream: 輸入流,包含字符
//Length: 流中的字節數

2、setAsciiStream: 把IN參數設成含有ASCII碼的流

public void setAsciiStream ( Int parameterIndex, InputStream x, Int length)
// parameterIndex: 參數索引
// x: 含有二進制的輸入流
// length: 流中的字符數

3、setCharacterStream: 把IN參數設成字符流

public void setCharacterStream (Int parameterIndex, Reader reader, Int length)
// parameterIndex: 參數索引
// reader: 包含UNICODE編碼數據的java.io.Reader對象
// length: 流中的字符數

這些方法中都含有一個長度大小的參數length, 因爲數據庫驅動程序需要知道到底有多少數據要接收,然後再把數據送往數據庫,所以這個參數是必須的

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
=conn.prepareStatement("update new set sdept=? where sname='f' ");
pstmt.setBinaryStream(
1, fin, fileLength);
pstmt.ExecuteUpdate();

 

 

 

發佈了38 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章