预编译语句

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

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值