预编译语句

 一、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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章