一、PreparedStatement對象的創建
.........
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(1, 20000);
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類型。
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參數設成只含有二進制數的流
//parameterIndex: 參數索引
//InputStream: 輸入流,包含字符
//Length: 流中的字節數
2、setAsciiStream: 把IN參數設成含有ASCII碼的流
// parameterIndex: 參數索引
// x: 含有二進制的輸入流
// length: 流中的字符數
3、setCharacterStream: 把IN參數設成字符流
// parameterIndex: 參數索引
// reader: 包含UNICODE編碼數據的java.io.Reader對象
// length: 流中的字符數
這些方法中都含有一個長度大小的參數length, 因爲數據庫驅動程序需要知道到底有多少數據要接收,然後再把數據送往數據庫,所以這個參數是必須的
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();