一、最原始的使用方式:
1、连接工具类:
抽取工具类:
1.创建一个类,并将其构造方法私有化
2.准备一个空该类的对象,用private修饰
3.向外界提供一个可以获取到该类对象的方法 getIns()(ps:该方法要用static修饰)
4.将加载驱动的代码放到 getIns()中
5.在该类中创建一个可以获得链接对象一个公共的方法
6.在该类中创建一个关闭资源的方法(对于每一个资源的非空判断 需要使用try catch finally结构)
抽取配置文件 解决硬编码:
1.准备一个叫db.properties的普通file文件,并将连接数据库用到的相关属性用key value的形式写进来
2.在工具类中读取资源文件调用java自带的工具类 Properties prop=new Properties();
加载资源文件 prop.load(Thread.currentThread().getClassContextLoader().getResourceAsStream("db.properties"));
获取资源文件中的值 prop.getProperty("对应的key")
代码:
工具类:
package cn.xx.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; public class JdbcUtil { //私有化构造方法 private JdbcUtil(){} //准备一个对象 private static JdbcUtil ins; //向外界提供一个公共的可获取该类对象方法 private static Properties prop=new Properties(); public static JdbcUtil getIns(){ try { prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties")); Class.forName(prop.getProperty("driverClassName")); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } if (ins==null) { ins=new JdbcUtil(); } return ins; } public Connection getConn(){ Connection conn=null; try { conn = DriverManager.getConnection(prop.getProperty("url"), prop.getProperty("username"), prop.getProperty("password")); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; } public void close(ResultSet rs,PreparedStatement pst,Connection conn){ try { if (rs!=null) { rs.close(); } } catch (SQLException e) { e.printStackTrace(); }finally { try { if (pst!=null) { pst.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { if (conn!=null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } }
数据库配置文件:db.properties
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql:///.... username=.... password=....
2、在Dao层调用工具类,实现数据操作,下面以查询操作为例:
package cn.xx.dao.impl; import java.sql.*; import cn.xx.dao.UserDao; import cn.xx.domain.User; import cn.xx.utils.JdbcUtil; public class UserDaoImpl implements UserDao{ @Override public User checkUser(String name, String password) { Connection conn = JdbcUtil.getIns().getConn(); //获取连接对象 User user = null; String sql = "select * from t_user where name=? and password=?"; //查询语句,其中?为占位符 try { PreparedStatement pst = conn.prepareStatement(sql); //预编译sql语句 pst.setString(1, name); //给占位符--?赋值 pst.setString(2,password); ResultSet rs = pst.executeQuery(); //查询结果集 while(rs.next()){ //遍历查询结果 user = new User(); //封装结果集 user.setName(rs.getString("name")); user.setPassword(rs.getString("password")); user.setId(rs.getLong("id")); } JdbcUtil.getIns().close(rs, pst, conn); //关闭数据连接 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return user; } }
二、在Spring框架中,使用JDBC,可以在配置文件中写入数据库的连接配置,然后通过实例化这个bean,再调用jdk已经封装了的类(类似于以上方法)----QueryRunner类,将实例化的bean传入,这个类中封装了数据库的连接方法、数据的操作方法等所需要的方法,因此比较简单快捷。
代码实现:配置文件
<!-- 扫描包 --> <context:component-scan base-package="cn.xx"></context:component-scan> <util:properties id="conf" location="classpath:db.properties"></util:properties> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="#{conf.driverName}"></property> <property name="url" value="#{conf.url}"></property> <property name="username" value="#{conf.username}"></property> <property name="password" value="#{conf.password}"></property> </bean>
数据库连接配置:db.properties同方法一
dao层实现:
package cn.xx.dao.daoimpl; import javax.annotation.Resource; import javax.sql.DataSource; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler; import org.springframework.stereotype.Repository; import cn.xx.bean.User; import cn.xx.dao.UserDao; @Repository("userDao")//依赖注入bean容器 public class UserDaoImpl implements UserDao { @Resource(name="dataSource")//通过注解,实例化DataSource Bean的类对象 private DataSource dataSource; @Override public User login(String username, String password) throws Exception { String sql="select * from t_user where username=? and password=?"; QueryRunner runner = new QueryRunner(dataSource); //将数据库连接配置传入QueryRunner类以完成自动装配 return runner.query(sql, new BeanHandler<User>(User.class),username,password); } } //返回查询结果
三、Mybatis和从c3p0:下次补充
ps:本文为作者原创,为学习笔记,如有雷同,纯属巧合,转载请说明来处,不得不做标识私自转载!
原文地址:https://www.cnblogs.com/stupidxixi/p/9700835.html