JDBC工具类

完成jdbc操作时,重复代码太多了。
所以 抽取一个jdbc工具类简化书写。

  1. 抽取注册驱动
  2. 抽取一个方法获取连接对象
  3. 抽取一个方法释放资源
    方法用static修饰方便调用
    JDBC工具类
    src下创建.properties文件(配置文件)
    JDBC工具类
    驱动也写进来了,将来如果切换数据库,只用修改配置文件。

文件的读取,只需读取一次即可拿到数据,使用静态代码块

JDBCUtils

package emp;

import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;

public class JDBCUtils {
    private static String url;
    private static String user;
    private static String password;
    private static String driver;

    static {//静态代码块里只能用静态
        try {
            Properties pro=new Properties();
            //类加载器:从src下获取文件路径的方式--->ClassLoader
            ClassLoader cl = JDBCUtils.class.getClassLoader();
            URL res = cl.getResource("jdbc.properties");
            String path = res.getPath();
            pro.load(new FileReader(path));
            url=pro.getProperty("url");
            user=pro.getProperty("user");
            password=pro.getProperty("password");
            driver=pro.getProperty("driver");
            //注册驱动
            Class.forName(driver);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    //连接对象
    public static Connection getConn() throws SQLException {
        return DriverManager.getConnection(url,user,password);
    }
    //释放资源
    public static void close(Statement stmt, Connection conn, ResultSet rs){
        if (stmt!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (rs!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    //重载
    public static void close(Statement stmt, Connection conn){
        if (stmt!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

抽取后的代码

private List<Emp> getAll2(){
        Connection conn=null;
        Statement stmt=null;
        ResultSet rs=null;
        List<Emp> list=new ArrayList<Emp>();
        try {
            conn = JDBCUtils.getConn();
            //sql
            String sql="select * from emp";
            //创建执行sql的statement对象
            stmt = conn.createStatement();
            //执行sql
            rs = stmt.executeQuery(sql);
            //处理结果

            Emp m=new Emp();
            while (rs.next()){
                int id = rs.getInt("id");
                String ename = rs.getString("ename");
                int job_id = rs.getInt("job_id");
                int mgr = rs.getInt("mgr");
                Date joindate = rs.getDate("joindate");
                double salary = rs.getDouble("salary");
                double bonus = rs.getDouble("bonus");
                int dept_id = rs.getInt("dept_id");

                m.setId(id);
                m.setEname(ename);
                m.setJob_id(job_id);
                m.setMgr(mgr);
                m.setJoindate(joindate);
                m.setSalary(salary);
                m.setBonus(bonus);
                m.setDept_id(dept_id);

                list.add(m);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JDBCUtils.close(stmt,conn,rs);
        }
        return list;
    }
上一篇:JDBC工具类


下一篇:QT中的消息对话框