包装了java的preparedstatement(改进设置参数)

java的preparedstatement,说到它,我是既爱又恨,爱的是通过用setXXX可以不考虑数据类型的转换,免去了自己组SQL语句的很 多麻烦事,恨得是它的第一个参数是sql语句中参数的位置,万一搞混了就出错,也可能出现不易发觉的错误,想想Delphi的Query就挺不错,可以使 用参数名称来定位参数,忍无可忍只好自己把preparedstatement包装一下了,

原先我们这样写代码:


    conn  =  getConnection();   //  此句是获取数据库联接,根据自己的情况而定

    PreparedStatement ps 
=  conn.prepareStatement( " update table set field2=? where field2=? " );

    ps.setInt(
1 1000 );

    ps.setInt(
2 10 );

     

通过包装后,这样写代码:


    conn  =  getConnection();   //  此句是获取数据库联接,根据自己的情况而定

    PreparedStatement ps 
=   null ;

    PreStateWraper psw 
=   new  PreStateWraper(conn,  " update table set field2=:field1 where field2=:field2 " );   //  注意sql中的参数名称前必须加":"而且他们之间不能有空格

    psw.setInt(
" field1 " 1000 );   //  如果sql语句中出现连词以上的field1参数,也只需set一次

    psw.setInt(
" field2 " 10 );

     

    ps 
=  psw.getPreparedStatement();

    // 下面就可以对ps进行任何操作了

 


这里说的封装,就是简单的封装,没有什么高深的东西,下面是PreStateWraper类的源代码:


package  com.check.db;

import  java.io.InputStream;
import  java.io.Reader;
import  java.math.BigDecimal;
import  java.net.URL;
import  java.sql.Array;
import  java.sql.Blob;
import  java.sql.Clob;
import  java.sql.Connection;
import  java.sql.Date;
import  java.sql.NClob;
import  java.sql.PreparedStatement;
import  java.sql.Ref;
import  java.sql.ResultSet;
import  java.sql.RowId;
import  java.sql.SQLException;
import  java.sql.SQLXML;
import  java.sql.Time;
import  java.sql.Timestamp;
import  java.util.ArrayList;
import  java.util.Calendar;
import  java.util.HashMap;
import  java.util.List;
import  java.util.regex.Matcher;
import  java.util.regex.Pattern;

public   class  PreStateWraper
{
 
private  PreparedStatement preState  =   null ;
 
 
private  HashMap >  parameters  =   new  HashMap();
 
 
private  String checkSql(String sql)
 {
  Pattern pt 
=  Pattern.compile( " :( "" w*) " );
  
  Matcher matcher 
=  pt.matcher(sql);
  
  
int  pp  =   0 ;
  
while (matcher.find())
  {
   pp 
++ ;
   String pname 
=  matcher.group( 1 );
   List list 
=  parameters.get(pname);
   
if  (list  ==   null )
    list 
=   new  ArrayList();
   list.add(pp);
   
   parameters.put(pname, list);

   sql 
=  matcher.replaceFirst( " ? " );
   matcher 
=  pt.matcher(sql);
  }
  
  
return  sql;
 }
 
 
 
 
public   boolean  execute()  throws  SQLException {
  
return  preState.execute();
 }

 

 
public  ResultSet executeQuery()  throws  SQLException {
  
return  preState.executeQuery();
 }

 

 
public   int  executeUpdate()  throws  SQLException {
  
return  preState.executeUpdate();
 }

 

 
public  PreStateWraper(Connection conn, String sql)  throws  SQLException
 {
  String psql 
=  checkSql(sql);
  preState 
=  conn.prepareStatement(psql);
 }
 
 
public  PreparedStatement getPreparedStatement()
 {
  
return  preState;
 }
 
 
 
public   void  setArray(String paramName, Array value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setArray(pp.get(n), value);
 }
 
 
public   void  setAsciiStream(String paramName, InputStream value,  long  arg2)
 
throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setAsciiStream(pp.get(n), value, arg2);
 }
 
 
public   void  setAsciiStream(String paramName, InputStream value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setAsciiStream(pp.get(n), value);
 }
 


 
public   void  setAsciiStream(String paramName, InputStream value,  int  arg2)
   
throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   setAsciiStream(paramName, value, arg2);
 }

 

 

 
public   void  setBigDecimal(String paramName, BigDecimal value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setBigDecimal(pp.get(n), value);
 }

 

 
public   void  setBinaryStream(String paramName, InputStream value,  int  arg2)
   
throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setBinaryStream(pp.get(n), value, arg2);
 }

 

 
public   void  setBinaryStream(String paramName, InputStream value,  long  arg2)
   
throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setBinaryStream(pp.get(n), value, arg2);
 }

 

 
public   void  setBinaryStream(String paramName, InputStream value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setBinaryStream(pp.get(n), value);
 }

 

 
public   void  setBlob(String paramName, Blob value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setBlob(pp.get(n), value);
 }

 

 
public   void  setBlob(String paramName, InputStream value,  long  arg2)
   
throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setBlob(pp.get(n), value, arg2);
 }

 

 
public   void  setBlob(String paramName, InputStream value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setBlob(pp.get(n), value);
 }

 

 
public   void  setBoolean(String paramName,  boolean  value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setBoolean(pp.get(n), value);
 }

 

 
public   void  setByte(String paramName,  byte  value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setByte(pp.get(n), value);
 }

 

 
public   void  setBytes(String paramName,  byte [] value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setBytes(pp.get(n), value);
 }

 

 
public   void  setCharacterStream(String paramName, Reader value,  int  arg2)
   
throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setCharacterStream(pp.get(n), value, arg2);
 }

 

 
public   void  setCharacterStream(String paramName, Reader value,  long  arg2)
   
throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setCharacterStream(pp.get(n), value, arg2);
 }

 

 
public   void  setCharacterStream(String paramName, Reader value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setCharacterStream(pp.get(n), value);
 }

 

 
public   void  setClob(String paramName, Clob value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setClob(pp.get(n), value);
 }

 

 
public   void  setClob(String paramName, Reader value,  long  arg2)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setClob(pp.get(n), value, arg2);
 }

 

 
public   void  setClob(String paramName, Reader value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setClob(pp.get(n), value);
 }

 

 
public   void  setCursorName(String paramName)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setCursorName(paramName);
 }

 

 
public   void  setDate(String paramName, Date value, Calendar arg2)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setDate(pp.get(n), value, arg2);
 }

 

 
public   void  setDate(String paramName, Date value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setDate(pp.get(n), value);
 }

 

 
public   void  setDouble(String paramName,  double  value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setDouble(pp.get(n), value);
 }

 

 
public   void  setEscapeProcessing( boolean  paramName)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setEscapeProcessing(paramName);
 }

 

 


 
public   void  setFloat(String paramName,  float  value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setFloat(pp.get(n), value);
 }

 

 
public   void  setInt(String paramName,  int  value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setInt(pp.get(n), value);
 }

 

 
public   void  setLong(String paramName,  long  value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setLong(pp.get(n), value);
 }

 

 

 

 
public   void  setNCharacterStream(String paramName, Reader value,  long  arg2)
   
throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setNCharacterStream(pp.get(n), value, arg2);
 }

 

 
public   void  setNCharacterStream(String paramName, Reader value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setNCharacterStream(pp.get(n), value);
 }

 

 
public   void  setNClob(String paramName, NClob value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setNClob(pp.get(n), value);
 }

 

 
public   void  setNClob(String paramName, Reader value,  long  arg2)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setNClob(pp.get(n), value, arg2);
 }

 

 
public   void  setNClob(String paramName, Reader value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setNClob(pp.get(n), value);
 }

 

 
public   void  setNString(String paramName, String value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setNString(pp.get(n), value);
 }

 

 
public   void  setNull(String paramName,  int  value, String arg2)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setNull(pp.get(n), value, arg2);
 }

 

 
public   void  setNull(String paramName,  int  value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setNull(pp.get(n), value);
 }

 

 
public   void  setObject(String paramName, Object value,  int  arg2,  int  arg3)
   
throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setObject(pp.get(n), value, arg2, arg3);
 }

 

 
public   void  setObject(String paramName, Object value,  int  arg2)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setObject(pp.get(n), value, arg2);
 }

 

 
public   void  setObject(String paramName, Object value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setObject(pp.get(n), value);
 }

 

 
public   void  setPoolable( boolean  paramName)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setPoolable(paramName);
 }

 
public   void  setRef(String paramName, Ref value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setRef(pp.get(n), value);
 }

 

 
public   void  setRowId(String paramName, RowId value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setRowId(pp.get(n), value);
 }

 

 
public   void  setShort(String paramName,  short  value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setShort(pp.get(n), value);
 }

 

 
public   void  setSQLXML(String paramName, SQLXML value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setSQLXML(pp.get(n), value);
 }

 

 
public   void  setString(String paramName, String value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setString(pp.get(n), value);
 }

 

 
public   void  setTime(String paramName, Time value, Calendar arg2)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setTime(pp.get(n), value, arg2);
 }

 

 
public   void  setTime(String paramName, Time value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setTime(pp.get(n), value);
 }

 

 
public   void  setTimestamp(String paramName, Timestamp value, Calendar arg2)
   
throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setTimestamp(pp.get(n), value, arg2);
 }

 

 
public   void  setTimestamp(String paramName, Timestamp value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setTimestamp(pp.get(n), value);
 }

 

 
public   void  setUnicodeStream(String paramName, InputStream value,  int  arg2)
   
throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setUnicodeStream(pp.get(n), value, arg2);
 }

 
 

public   void  setURL(String paramName, URL value)  throws  SQLException {
  List pp 
=  parameters.get(paramName);
  
for  ( int  n  =   0 ; n  <  pp.size(); n  ++ )
   preState.setURL(pp.get(n), value);
 }
}

转载于:https://www.cnblogs.com/dotjava/articles/1264951.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值