说明:本文非原生jdbc案例,经过DbUtils和C3p0实现对原生jsdc的简单封装。直接以案例开始php
一.前期准备html
*导入jar包java
mysql
*添加c3p0配置文件和jdbcutils工具类sql
▶c3p0-config.xml(文件名称不能改变,且默认必须放在src目录下)
数据库
▶jdbcutils工具类app
package com.learn.utils; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; /** * 将增删改查操做中重复代码提取出来 */ public class JDBCUtils { //建立数据库链接池对象 private static ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource(); //获取链接的方法 public static Connection getConnection() throws SQLException{ return comboPooledDataSource.getConnection(); } //提供数据库链接池对象的方法 public static DataSource getDataSource(){ return comboPooledDataSource; } //释放资源的方法 public static void release(ResultSet rs, Statement stmt, Connection conn) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } rs = null; } release(stmt, conn); } public static void release(Statement stmt, Connection conn) { if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } stmt = null; } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } conn = null; } } }
▶建表、建实体类(表与实体类字段相对应)
框架
二.使用queryRunner实现增删改查ide
*添加操做工具
*修改操做
*删除操做
//DbUtils结合c3p0删除====================================================================== String sql2="delete from contect where id=?"; try { int update = runner.update(sql2, "1"); System.out.println(update); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }
*查询操做
▶ 自定义handler查询
MyHandler
public class MyHandler implements ResultSetHandler<List<Contect>>{ @Override public List<Contect> handle(ResultSet rs) throws SQLException { //封装数据,数据从Resultset中获取 ArrayList<Contect> list = new ArrayList<Contect>(); while(rs.next()){ Contect contect = new Contect(); String name = rs.getString("cname"); contect.setCname(name); String sex = rs.getString("sex"); contect.setSex(sex); String tel = rs.getString("tel"); contect.setTel(tel); String address = rs.getString("address"); contect.setAddress(address); list.add(contect); } return list; } }
查询
String sql3 ="select * from contect"; try { List<Contect> contectList = runner.query(sql3, new MyHandler()); System.out.println(contectList); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }
▶ResultSetHandler实现类介绍(由DBUtils框架给咱们提供使用)实现类的学习方式:
先测试,根据测试结果总结当前实现类的按照什么样的方式封装数据(策略)
ArrayListHandler
String sql4 ="select * from contect"; try { List<Object[]> list = runner.query(sql4, new ArrayListHandler()); for (Object[] objects : list) { for (Object object : objects) { System.out.println(object); } System.out.println("------------------------------------"); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }
BeanHandler
BeanListHandler
ScalarHandler