一、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(
1
,
20000
);
一旦一个参数被赋值,那么这个参数在所有执行中将保留这个值,直到使用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();