JDBC---封装JDBC代码,配置properties文件

封装JDBC

由于在使用jdbc连接数据库时,出现了多次下列代码

//注册驱动获取地址
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/tb1?characterEncoding=utf-8";
String username = "root";
String password = 自己的密码;
//获取数据库连接
Connection conn = DriverManager.getConnection(url, username, password);

存在大量数据冗余,所以可以将该代码提取出来,封装成一个工具类,在使用时只需传入sql语句以及sql代码中 ? 的数量即可

封装代码:

/**
 * 数据库工具类
 */
public class BaseDao {
    Connection conn = null;
    PreparedStatement ps = null;
    //获取Conn对象 打开数据库链接
    public boolean getConn() {
        boolean bool = false;//默认 false 未打开数据库
        try {
            //加载驱动  方言
            Class.forName("com.mysql.jdbc.Driver");
            //准备数据库连接路径
            String url = "jdbc:mysql://127.0.0.1:3306/xxshop?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull";
            //用户名与密码
            String username = "root";
            String userpwd = "密码";
            //根据路径,用户名,密码 使用DriverManager获取数据库connection连接
            conn = DriverManager.getConnection(
                    url,username,userpwd);
            bool = true;//已经打开
        } catch (Exception e) {
            e.printStackTrace();
            bool = false ;//已经打开
        }
            return  bool;
    }
    /**
     * 添加,修改,删除数据
     * @param sql
     * @param objs
     * @return
     */
    public int executeUpdate(String sql,Object objs[])
    {
        int res = 0;//初始化执行结果  失败0
        try {
            if(getConn())//打开数据库链接
            {
                ps = conn.prepareStatement(sql);
                if(objs!=null){
                    for (int i = 0; i < objs.length; i++) {
                        ps.setObject((i+1),objs[i]);
                    }
                }
                res = ps.executeUpdate();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            closeResource();//关闭数据源
        }
        return res;
    }
    /**
     * 查询
     * @param sql
     * @param objs
     * @return
     */
    public ResultSet executeSQL(String sql,Object objs[]){
        ResultSet rs = null;
        try {
            if(getConn())//打开数据库链接
            {
                ps = conn.prepareStatement(sql);
                //判断是否有参数
                if (objs != null) {
                    //循环封装参数
                    for (int i = 0; i < objs.length; i++) {
                        ps.setObject((i + 1), objs[i]);
                    }
                }
                rs = ps.executeQuery();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            closeResource();//释放资源
        }
        return rs;
    }
    //关闭资源
    public void closeResource(){
        try {
            if(ps!=null)
            {
                ps.close();
            }
            if(conn!=null) {
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

由于在开发过程中,后续使用时数据库文件不可能写死到java代码中,多使用 yml 或者 properties 文件来存储数据库信息,所以我们将数据库url以及用户名密码提取出来,使用其他方式来读取
示例代码:
jdbc.properties:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/tb1?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
username=root
pwd=密码

编写读取类,读取数据库信息

package JDBC02.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 使用单例模式将文件中的信息提取出来
 * 每次使用这个类时,只new一次
 */
public class ConfigManager {

    private static Properties pro = null;
    private static ConfigManager cm = new ConfigManager();

    public ConfigManager() {
        pro = new Properties();
        InputStream is = ConfigManager.class.getClassLoader().getResourceAsStream("jdbc.properties");
        try {
            pro.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static Properties getProperties() {
        return pro;
    }
}

修改工具类中的加载数据库信息代码,不再写死

 /**
     * 获取数据库连接驱动
     */
    public static boolean getConn() {
        boolean bool = false;//默认 false 未打开数据库
        try {
            Properties pro = ConfigManager.getProperties();
            String driver = pro.getProperty("driver");
            String url = pro.getProperty("url");
            String username = pro.getProperty("username");
            String pwd = pro.getProperty("pwd");

            Class.forName(driver);
            //获取数据库连接
            conn = DriverManager.getConnection(url, username, pwd);
            bool = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return bool;
    }

这样子可以方便后续的修改以及阅读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛总来学习了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值