一、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();