java JDBC 的使用总结

一、最原始的使用方式:

  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:本文为作者原创,为学习笔记,如有雷同,纯属巧合,转载请说明来处,不得不做标识私自转载!

 

 

 

 

 

 

posted @ 2018-09-25 17:42  StupidXiXi  阅读(173)  评论(0编辑  收藏  举报