java-jdbc5:jdbc工具类,简化jdbc代码

从上一文中:写一段“查询结果返回java集合对象”查询的代码很长,有没有能简化查询的方法呢?

就是创建一个工具类,把一些固定的代码转化为方法,如注册驱动,连接数据库,关闭资源等

这样就简化很多重复代码。

一、创建数据库信息的配置文件。

为了方便阅读,提前创建该配置文件。文件放在src目录下,下面的信息分别对应你的数据库名,用户名,密码,驱动(其他的名称可能不一样)。

url:=jdbc:mysql:///test
user=root
password=newpassword
driver=com.mysql.cj.jdbc.Driver

 二、创建工具类

package cn.JdbcUtil;

import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/*
 *JDBC工具类
 */
public class JDBCUtils {
    /*
     * 获取连接
     * @return 连接对象
     */
    // 创建公共类对象,用于传参
    public static String url;
    public static String user;
    public static String password;
    public static String driver;
    static {
        try {  //处理pro.load(new FileReader()的异常
            // 读取文件,获取值
            //1.创建Properties集合类
            Properties pro = new Properties();
            //2.加载文件
            //pro.load(new FileReader("src/jdbc.properties"));
           
            /*   加载文件的方法了,推荐换成下面方法,上面先理解,可以先跳过阅读,最后运行不出来在换,运行出来也换
            这个路径可能会报错,可以使用 ClassLoadder 类加载器获取对象,绝对路径也行,但是比较麻烦不推荐
           // 获取ClassLoader的对象
            ClassLoader classLoader = JDBCUtils.class.getClassLoader();
            //输入文件名返回一个文件对象 URL报红则ALT + 回车处理一下,选择第一个就行
            URL res = classLoader.getResource("src/jdbc.properties");
            // 获取字符串路径
            String path = res.getPath();
            System.out.println(path);
            pro.load(new FileReader(path));
             */
            //3.赋值
            url = pro.getProperty("url");
            user = pro.getProperty("user");
            password = pro.getProperty("password");
            driver = pro.getProperty("driver");
            //4.注册驱动
            try {
                Class.forName(driver);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static Connection getConnection() {
        return null ;
    }
    /*
     * 释放资源
     */
    public static void Close(Statement stat, Connection conn) {
        if (stat != null) {
            try {
                stat.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
    public static void Close(ResultSet rs,Statement stat, Connection conn) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (stat != null) {
            try {
                stat.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}

三、调用工具类,以上一个代码为例。

package cn.JdbcUtil;

import cn.Emp;
import cn.JdbcEmp;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class jdbcDemo4_2 {
    public static void main(String[] args) {
        // 创建对象,调用 fineAll方法。并返回 list 集合
        List<Emp> list = new JdbcEmp().fineAll() ;
        System.out.println(list);
        System.out.println(list.size());
    }
    // 查询所有 Emp对象
    // 创建集合,结果返回 Emp 类
    public List<Emp> fineAll2() {
        Connection con = null ;
        Statement stat = null ;
        ResultSet rs = null ;
        List<Emp> list = null ;

        try {
//            // 1.注册驱动
//            Class.forName("com.mysql.cj.jdbc.Driver");
            // 2.定义sql脚本
            String sql = "select * from emp " ;
            con = JDBCUtils.getConnection();
//            // 3.获取Connection连接   Connection 在try外面定义后进行赋值,定义连接
//            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","newpassword") ;
            // 4.获取执行sql对象 Statement  Statement stat 在try外面进行定义后赋值
            //stat = con.createStatement() ;
            // 5.执行sql语句
            rs = stat.executeQuery(sql) ;
            // 6.结果处理
            // 封装,创建对象
            Emp emp = null ;
            list = new ArrayList<Emp>() ;
            while(rs.next()) {
                int id = rs.getInt("id") ;
                String name = rs.getString("name") ;
                double salary = rs.getDouble("salary") ;
                //创建emp 对象,并赋值
                emp = new Emp() ;
                emp.setId(id);
                emp.setName(name);
                emp.setSalary(salary);

                // 装载集合
                list.add(emp) ;
            }
      }
        catch (Exception e ) {
            e.printStackTrace();
        } finally {
//            if(rs != null  ) {
//                try {
//                    rs.close();
//                } catch (Exception e) {
//                    e.printStackTrace();
//                }
//            }
//            if(stat != null  ) {
//                try {
//                    stat.close();
//                } catch (Exception e) {
//                    e.printStackTrace();
//                }
//            }
//            if(con != null  ) {
//                try {
//                    con.close();
//                } catch (Exception e) {
//                    e.printStackTrace();
//                }
//            }
            JDBCUtils.Close(rs,stat,con);
        }
        return list ;
    }
}

可以看出可以省了很多代码的书写,大概率会报pro.load文件的错,可以返回看这一段的注释,修改。,

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值