当不知道数据库各列类型时,对数据库实现增、删、改、查询。通过给出sql语句、若干参数完成操作。
<span style="font-size:18px;">package dbutils;
import java.sql.ResultSet;
import java.sql.SQLException;
import jdbc.JDBCUtils;
import org.junit.Test;
public class Demo2 {
@Test
public void fun(){
// Stu stu=new Stu(3,"haha");
// addStu(stu);
Stu s=selectStu(3);
System.out.println(s.getId()+","+s.getName());
}
public void addStu(Stu stu){
QR qr=new QR(JDBCUtils.getDataSource());
String sql="insert into stu values(?,?)";
Object [] params={stu.getId(),stu.getName()};
qr.update(sql, params);
}
public Stu selectStu(int id){
QR qr=new QR(JDBCUtils.getDataSource());
String sql="select * from stu where id=? ";
Object [] params={id};
RsHandler<Stu> rh=new RsHandler<Stu>(){
@Override
public Stu handle(ResultSet rs) throws SQLException{
// TODO Auto-generated method stub
if(!rs.next()) return null;
Stu stu =new Stu();
stu.setId(rs.getInt("id"));
stu.setName(rs.getString("name"));
return stu;
}
};
return (Stu) qr.query(sql, rh, params);
}
}</span>
<span style="font-size:18px;">package dbutils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import jdbc.JDBCUtils;
public class QR <T> {
private DataSource dataSource;
public QR(DataSource dataSource) {
super();
this.dataSource = dataSource;
}
public QR() {
super();
}
/**
* 完成增、删、改
*
*/
public int update(String sql,Object ...params ){
Connection con=null;
PreparedStatement pps=null;
try {
con=dataSource.getConnection(); //通过连接池获取连接对象
pps=con.prepareStatement(sql);
initParms(pps,params);
return pps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
finally {
try {
if(pps!=null) pps.close();
if(con!=null) con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
}
//给参数赋值
public void initParms(PreparedStatement pps,Object ...params) throws SQLException{
for (int i=0;i<params.length;i++){
pps.setObject(i+1, params[i]);
}
}
public T query(String sql, RsHandler<T> rh, Object ... params){
Connection con=null;
PreparedStatement pps=null;
try {
con=dataSource.getConnection(); //通过连接池获取连接对象
pps=con.prepareStatement(sql);
initParms(pps,params);
ResultSet rs= pps.executeQuery();
return rh.handle(rs);
} catch (SQLException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
finally {
try {
if(pps!=null) pps.close();
if(con!=null) con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
}
}
//把结果集转换成对象
interface RsHandler<T>{
public T handle(ResultSet rs) throws SQLException;
}
</span>