07_数据库创建,添加c3p0操作所需的jar包,编写c3p0-config.xml文件,编写User.java,编写jdbcUtils.java实现操作数据库的模板工具类,UserDao编写,Dao
1
创建day14数据库,创建user.sql表:
A
创建数据库 day14
B
创建数据表
users
create
table users
(
id int
primary
keyauto_increment,
username varchar(20),
password
varchar(20)
);
2
添加依赖的jar包
c3p0-0.9.1.2.jar |
mysql-connection-java-5.0.8-bin.jar |
commons-beanutils-1.8.0.jar |
commons-logging.jar |
3
编写c3p0-config.xml
<?xml <c3p0-config> <default-config> <property <property <property <property <property <property </default-config> <named-config <property <property <property <property <property <property </named-config> </c3p0-config> |
4
编写User.java
package cn.toto.domain; public private private String private String public return } public this.id } public String getUsername() { return } public this.username } public return } public this.password } public User() { super(); } } |
5
编写jdbcUtils.java
package cn.toto.utils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.sql.DataSource; import cn.toto.exception.DaoException; import com.mchange.v2.c3p0.ComboPooledDataSource; public class JdbcUtils { private static DataSource ds; static { //ds = new ComboPooledDataSource();//默认的缺省的配置 ds = new ComboPooledDataSource("toto");//配置文件中设置的内容 } //获取与指定数据的连接 public static DataSource getSource(){ return ds; } //获得与指定数据库的连接 public static Connection getConnection() throws SQLException { //从连接池返回一个连接 return ds.getConnection(); } //释放资源 public static void release(ResultSet rs,Statement stmt,Connection conn) { if(rs!=null){ try{ rs.close(); }catch(SQLException e){ e.printStackTrace(); } rs = null; } 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; } } //写一个通过的增删改方法 public static boolean update(String sql,Object[] params) { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { //获得连接 conn = getConnection(); //写SQL //预编译sql pstmt = conn.prepareStatement(sql); //替换参数 int pos = 1;//设置一个脚标 //for(Object param : params) 这样写是有错误的,会有空指针异常,要写成如下的方法: for(int i=0;params!=null&&i<params.length;i++) pstmt.setObject(i+1, params[1]);//由于不知道是什么类型的,故可以用Object //发送sql int num = pstmt.executeUpdate(); //返回结果 if(num>0) return true; return false; } catch (SQLException e) { throw new DaoException(e); }finally{ release(rs,pstmt,conn); } } //实现一个通用的查询方法 public static Object query(String sql,Object[] params,ResultSetHandler handler){ Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try{ conn = getConnection(); //写sql //预编译sql pstmt = conn.prepareStatement(sql); //替换参数 for(int i=0;params!=null&&i<params.length;i++) pstmt.setObject(i+1, params[1]);//由于不知道是什么类型的,故可以用Object //发送sql rs = pstmt.executeQuery(); //处理结果集 /*我们在方法中需要一种功能让调用者里调用 * 在方法的内部都有一个模块不会写,有变化,需要留给调用者来处理*/ //这时我们需要用一种设计模式策略模式 TreeSet //TreeSet 实现排序,只是实现了部分功能(二叉树,还有没实现的) //(元素的比较) //让我们传入比较器实现Comparator的compare方法 /*元素的自然顺序 //向调用者要一个结果集处理器 Object result = handler.handle(rs);//调用结果处理器的handle方法,它返回的结果就是我们想要的。将结果集变成了一个对象 return result; }catch(SQLException e){ throw new DaoException(e); }finally { release(rs,pstmt,conn); } } } //写一个通过的增删改方法 public static boolean update(String sql,Object[] params) { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { //获得连接 conn = getConnection(); //写SQL //预编译sql pstmt = conn.prepareStatement(sql); //替换参数 int pos = 1;//设置一个脚标 for(Object param : params) pstmt.setObject(pos, param);//由于不知道是什么类型的,故可以用Object //发送sql int num = pstmt.executeUpdate(); //返回结果 if(num>0) return true; return false; } catch (SQLException e) { throw new DaoException(e); }finally{ release(rs,pstmt,conn); } } } |
6
编写UserDao.java
package cn.toto.dao; import import import import java.util.List; import cn.toto.domain.User; import import cn.toto.utils.BeanHandler; import cn.toto.utils.BeanListHandler; import cn.toto.utils.JdbcUtils; import public public List<User> getAll() { //写sql String sql = "select * from users"; //封装参数 //实现结果集处理器 List list = (List) JdbcUtils.query(sql, null, return } public User find(int String sql = "select * from users where id = ?"; //调用方法 User user = (User) JdbcUtils.query(sql, new return user; } public /*//写Sql String sql = "insert into users(username,password) values(?,?)"; //封装参数 Object[] params = new Object[2]; params[0] = user.getUsername(); params[1] = user.getPassword(); //调用新方法 boolean b = JdbcUtils.update(sql, params); return b;*/ String sql = "insert into users(username,password) values(?,?)"; boolean b = JdbcUtils.update(sql, return b; } public String sql = "update users set username=?,password=? where id=?"; return JdbcUtils.update(sql, user.getUsername() ,user.getPassword() ,user.getId() }); } public String sql = "delect from users where id=?"; return JdbcUtils.update(sql, } } |
7
编写自定义异常:DaoException.java
package cn.toto.exception; public private public DaoException() { } public DaoException(String message) { super(message); } public DaoException(Throwable cause) { super(cause); } public DaoException(String message, Throwable cause) super(message, cause); } } |
8
编写BeanHandler.java
在测试类中所有的类中都用到的数据可以写在@BeforeClass中。
package cn.toto.utils; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import import org.apache.commons.beanutils.BeanUtils; import import cn.toto.exception.DaoException; public private public BeanHandler(Class clazz) { this.clazz } //将结果集的第一行数据封装到bean返回,要想返回,得加一个返回的类型,上面的代码就是获得类型的代码 public Object handle(ResultSet rs) { try { if(rs.next()){ Object bean = this.clazz.newInstance(); //获得元数据 ResultSetMetaData metaData = rs.getMetaData(); int columnCount = metaData.getColumnCount(); for(int //根据列的编号获得列名 String name = metaData.getColumnName(i); //根据列名获得这一行中这一列的值 Object value = rs.getObject(name); //使用beanutils实现属性的封装 BeanUtils.setProperty(bean, name, value); } //返回bean return bean; } return } catch (Exception e) { throw } } } |
9
编写BeanListHandler.java
package cn.toto.utils; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import import java.util.ArrayList; import java.util.List; import org.apache.commons.beanutils.BeanUtils; import cn.toto.exception.DaoException; //它的功能是将数据封装到bean,然后再将数据封装到List集合中 public private public BeanListHandler(Class clazz){ this.clazz } //实现接口,要实现接口中的方法中。 //将结果集的每一行封装到bean,将bean加入一个List返回 public Object handle(ResultSet rs) { try{ List list = new while(rs.next()){ Object bean = this.clazz.newInstance(); //知道列名 //获得结果集的元数据 ResultSetMetaData metaData = rs.getMetaData(); //获得列的数量 int columnCount = metaData.getColumnCount(); for(int //获得类名 String columnName = metaData.getColumnName(i); //获得列对应的值 Object value = rs.getObject(columnName); BeanUtils.setProperty(bean, columnName, value); } //将bean存入List集合 list.add(bean); } return list; }catch(Exception e){ throw } } } |
10
编写ResultSetHandler.java
package cn.toto.utils; import java.sql.ResultSet; public Object handle(ResultSet rs); } |
12
编写UserDaoTest.java
package junit.test; import java.util.List; import org.junit.Test; import cn.toto.dao.UserDao; import cn.toto.domain.User; public private UserDao @Test public User user = new User(); user.setUsername("zhangsan"); user.setPassword("11111111"); boolean b = System.out.println(b); } @Test public List all = dao.getAll(); System.out.println(all); } @Test public User user = dao.find(0); System.out.println(user); } } |
07_数据库创建,添加c3p0操作所需的jar包,编写c3p0-config.xml文件,编写User.java,编写jdbcUtils.java实现操作数据库的模板工具类,UserDao编写,Dao的更多相关文章
- idea 为模块添加Tomcat依赖 解决: Intelij IDEA 创建WEB项目时没有Servlet的jar包
解决: Intelij IDEA 创建WEB项目时没有Servlet的jar包 今天创建SpringMVC项目时 用到HttpServletRequest时, 发现项目中根本没有Servlet这个包, ...
- Maven创建工程项目如何下载所需要的jar包
转自:http://hi.baidu.com/hotthought/item/57ce101556d0ba0de75c36c5 Maven包的下载路径: http://maven.apache.org ...
- json-lib-2.4-jdk15.jar所需全部JAR包.rar java jsoup解析开彩网api接口json数据实例
json-lib-2.4-jdk15.jar所需全部JAR包.rar java jsoup解析开彩网api接口json数据实例 json-lib-2.4-jdk15.jar所需全部JAR包.rar ...
- 02_c3p0之c3p0-config.xml配置案例,操作c3p0的jdbcUtil工具类的编写
c3p0也是一个开源jdbc连接池,我们熟悉的Hibernate和Spring框架使用的都是该数据源. 这里获得数据源使用的方法是:ComboPooledDataSource 它提供的构造方法有 ...
- web工程 所需是jar包总结
commons-beanutils-1.8.3.jar : BeanUtils主要提供了对于JavaBean进行各种操作,需要Commons -Collections包和Commons -loggin ...
- SpringBoot+Maven多模块项目(创建、依赖、打包可执行jar包部署测试)完整流程
一,创建Maven多模块项目先建立外层父工程 File →new →project 选择Spring Initializr Next下一步到以下页面 工程结构如下 ...
- 二.创建maven工程及下载需要的jar包
1.使用Eclipse的Maven插件来创建一简单的Maven项目 步骤:打开新建项目对话框,选择Maven Project(File->New->Object->Maven-> ...
- SSH整合所需的jar包
Spring3.1+Hibernate3+Struts2的最新整合所需要的jar包 Spring的基本jar包: 1.org.springframework.web-3.1.4.RELEASE.jar ...
- maven添加本地非repository中的jar包
1.今天在使用maven编译打包一个web应用的时候,碰到一个问题: 项目在开发是引入了依赖jar包,放在了WEB-INF/lib目录下,并通过buildpath中将web libariary导入. ...
随机推荐
- [POI 2015]Kinoman
Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[i]部. 你可以选择l,r(1<=l< ...
- [Luogu 3389]【模板】高斯消元法
Description 给定一个线性方程组,对其求解 Input 第一行,一个正整数 n 第二至 n+1 行,每行 n+1 个整数,为a1,a2⋯an和 b,代表一组方程.1,a2⋯an ...
- gift 分数规划的最大权闭合子图
题目大意: N个物品,物品间有M组关系,每个物品有一个ai的代价,满足关系后会得到bi的值 求 max(sigma(bi)/sigma(ai)) 题解: 很明显的最大权闭合子图,只不过需要处理分数. ...
- 华科机考:N阶楼梯上楼
时间限制:1秒空间限制:32768K 题目描述 N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式.(要求采用非递归) 输入描述: 输入包括一个整数N,(1<=N<90). 输出描 ...
- EffectiveTensorflow:Tensorflow 教程和最佳实践
Tensorflow和其他数字计算库(如numpy)之间最明显的区别在于Tensorflow中的操作是符号. 这是一个强大的概念,允许Tensorflow进行所有类型的事情(例如自动区分),这些命令式 ...
- Angular 和 Vue 使用的对比总结 -- 脚手架
前言 之前是用Vue的,现在由于工作原因,开始使用Angular.分别是Vue2和Angular5入的坑.只是从使用上来对比总结,加深记忆,避免混淆. 什么 ? 你问实现原理的异同及优劣? 本宝宝还 ...
- PTA 邻接矩阵存储图的深度优先遍历
6-1 邻接矩阵存储图的深度优先遍历(20 分) 试实现邻接矩阵存储图的深度优先遍历. 函数接口定义: void DFS( MGraph Graph, Vertex V, void (*Visit)( ...
- Linux下解决无法远程连接数据库问题
起因 今天在ubuntu16.04环境下通过mysql workbench访问远程数据库时,发现无法连接问题,解决思路及方法记录如下,不足之处,请多指教. 问题 通过workbench输入密码访问时报 ...
- jquery form submit提交后无反应 不报错
jquery form onSubmit默认返回false 因为页面添加了validate验证,在刷新页面后重新提交需要加上下一行代码 onSubmit:function() {return true ...
- JAVA (集合和数据结构)
Collection和Collections的区别: 1.java.util.Collection 是一个集合接口.它提供了对集合对象进行基本操作的通用接口方法.Collection接口在Java 类 ...