package cn.xiechengxu.dbutils;
import javax.sql.DataSource;
import java.sql.*;
/**
* Created by zhangqiang on 17/6/23.
*/
public class MyQueryRunner {
private DataSource ds;
public MyQueryRunner() {
}
public MyQueryRunner(DataSource ds){
this.ds=ds;
}
public <T> T query(Connection con,String sql ,MyResultSetHandler<T> mrs, Object ...params) throws SQLException {
PreparedStatement pst=con.prepareStatement(sql);
ParameterMetaData pmd=pst.getParameterMetaData();
int count=pmd.getParameterCount();
for(int i=1;i<=count;i++){
pst.setObject(i,params[i-1]);
}
ResultSet rs=pst.executeQuery();
return mrs.handle(rs);
}
public int update(Connection con,String sql , Object ...params) throws SQLException {
PreparedStatement pst=con.prepareStatement(sql);
ParameterMetaData pmd=pst.getParameterMetaData();
int count=pmd.getParameterCount();
for(int i=1;i<=count;i++){
pst.setObject(i,params[i-1]);
}
int row= pst.executeUpdate();
pst.close();
return row;
}
public int update(String sql , Object ...params) throws SQLException {
Connection con=ds.getConnection();
PreparedStatement pst=con.prepareStatement(sql);
ParameterMetaData pmd=pst.getParameterMetaData();
int count=pmd.getParameterCount();
for(int i=1;i<=count;i++){
pst.setObject(i,params[i-1]);
}
int row= pst.executeUpdate();
pst.close();
con.close();
return row;
}
}
package cn.xiechengxu.dbutils.domain;
import cn.xiechengxu.dbutils.MyQueryRunner;
import cn.xiechengxu.dbutils.MyResultSetHandler;
import cn.xiechengxu.utils.DataSourceUtils;
import org.junit.Test;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* Created by zhangqiang on 17/6/23.
*/
public class MyQueryRunnerTest {
@Test
public void updateTest() throws SQLException{
String sql="delete from account where id=?";
MyQueryRunner mqr=new MyQueryRunner();
mqr.update(DataSourceUtils.getConnection(),sql,3);
}
@Test
public void selectTest() throws SQLException {
String sql="select * from account where id=?";
MyQueryRunner mqr=new MyQueryRunner();
Account a=mqr.query(DataSourceUtils.getConnection(), sql, new MyResultSetHandler<Account>() {
@Override
public Account handle(ResultSet rs) throws SQLException {
Account a=null;
if(rs.next()){
a=new Account();
a.setId(rs.getInt("id"));
a.setName(rs.getString("name"));
a.setMoney(rs.getDouble("money"));
}
return a;
}
}, 2);
System.out.print(a);
}
}
public interface MyResultSetHandler<T> {
public T handle(ResultSet rs)throws SQLException;
}