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

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

原先我们这样写代码:


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

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

    ps.setInt(
11000);

    ps.setInt(
210);

     

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


    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);
 }
}
posted on 2008-08-11 10:35  dotjava  阅读(1882)  评论(1编辑  收藏  举报