1. 程式人生 > >java JDBC 的使用總結

java JDBC 的使用總結

eas print 解決 dst .sql tco 其中 ride 工具類

一、最原始的使用方式:

  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:本文為作者原創,為學習筆記,如有雷同,純屬巧合,轉載請說明來處,不得不做標識私自轉載!

java JDBC 的使用總結