对数据库完成增、删、改、查询
2016-02-04 15:26
211 查看
当不知道数据库各列类型时,对数据库实现增、删、改、查询。通过给出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>
相关文章推荐
- MySQL之——MySQL5.6 my.cnf 参数说明(附上自己服务器上真实配置文件)
- MySQL下载安装、配置与使用
- sqlite3 脚本的使用
- VS2010数据库项目不能正常工作解决方案
- Sqlite3 like和glob的区别
- mongodb与mysql相比的优缺点
- oracle安装好后 创建用户
- oracleXE(oracle学习版)在windows的安装配置
- redis的主从切换的两种方式
- centos安装redis3为系统服务
- MyBatis参数传入集合之foreach动态sql
- linux-tomcat-memcached-session共享
- dpkg: error processing archive /var/cache/apt/archives/mysql-server-5.5_5.5.47-0ubuntu0.14.04.1_amd64.deb (--unpack):
- MySQL中事务的分类
- Sqlite3 批量插入
- SQL Server中的三种物理连接操作
- No module named flask.ext.sqlalchemy.SQLALchemy
- redis在PHP中的基本使用
- 【Tornado +Tenjin+MongoDB】- 初窥Tornado
- 电商数据库网摘