一、PreparedStatement对象的创建
Connection conn;
.........
PreparedStatement pstmt = conn.prepareStatement( " update new set sno=? where sname=? " );
.........
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();
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.setLong( 1 , 20000 );
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();
}
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();
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: 流中的字节数
// parameterIndex: 参数索引
// InputStream: 输入流,包含字符
// Length: 流中的字节数
2、setAsciiStream: 把IN参数设成含有ASCII码的流
public
void
setAsciiStream ( Int parameterIndex, InputStream x, Int length)
// parameterIndex: 参数索引
// x: 含有二进制的输入流
// length: 流中的字符数
// parameterIndex: 参数索引
// x: 含有二进制的输入流
// length: 流中的字符数
3、setCharacterStream: 把IN参数设成字符流
public
void
setCharacterStream (Int parameterIndex, Reader reader, Int length)
// parameterIndex: 参数索引
// reader: 包含UNICODE编码数据的java.io.Reader对象
// 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();
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();