首页 > 其他分享 >JDBC的简单封装

JDBC的简单封装

时间:2024-02-03 12:32:45浏览次数:24  
标签:JDBC 封装 简单 Connection static sql catch return conn

1、dataSource.properties

driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
username=username
password=password


2、代码示例

package com.example;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JdbcUtil {
    /** 数据库驱动 */
    private static String driver;
    /** 数据库连接url */
    private static String url;
    /** 用户名 */
    private static String username;
    /** 密码 */
    private static String password;

    static {
        // 创建properties对象获取属性文件的内容
        Properties properties = new Properties();
        // 获取属性文件的读取流对象
        InputStream is = JdbcUtil.class.getResourceAsStream("/dataSource.properties");
        try {
            // 加载属性配置文件
            properties.load(is);
            // 获取jdbc参数
            driver = properties.getProperty("driver");
            url = properties.getProperty("url");
            username = properties.getProperty("username");
            password = properties.getProperty("password");
            // 加载驱动
            Class.forName(driver);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * DML操作
     *
     * @param sql  sql语句
     * @param objs 占位参数
     * @return 影响的结果行数
     */
    public static int executeDML(String sql, Object... objs) {
        // 创建连接对象
        Connection conn = getConnection();
        // 创建sql命令对象
        PreparedStatement ps = getPreparedStatement(sql, conn);
        try {
            // 手动提交事务
            conn.setAutoCommit(false);
            // 给占位符赋值
            for (int i = 0; i < objs.length; i++) {
                ps.setObject(i + 1, objs[i]);
            }
            int i = ps.executeUpdate();
            conn.commit();
            return i;
        } catch (Exception e) {
            try {
                conn.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
        } finally {
            // 关闭资源
            close(ps);
            close(conn);
        }
        // 返回结果
        return -1;
    }

    /**
     * 获取Connection对象
     *
     * @return Connection对象
     */
    public static Connection getConnection() {
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(url, username, password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;

    }
    
    /**
     * 获取PreparedStatement对象
     *
     * @param sql  sql语句
     * @param conn Connection连接对象
     * @return PreparedStatement实例
     */
    public static PreparedStatement getPreparedStatement(String sql, Connection conn) {

        PreparedStatement ps = null;
        try {
            ps = conn.prepareStatement(sql);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return ps;

    }

    /**
     * 获取Statement对象
     *
     * @param conn Connection连接对象
     * @return Statement实例
     */
    public static Statement getStatement(Connection conn) {
        Statement stmt = null;
        try {
            stmt = conn.createStatement();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return stmt;

    }

    /**
     * 关闭资源
     *
     * @param autoCloseable AutoCloseable接口实现类
     */
    public static void close(AutoCloseable autoCloseable) {
        if (autoCloseable != null) {
            try {
                autoCloseable.close();
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
}


JDBC的简单封装_JDBC封装

标签:JDBC,封装,简单,Connection,static,sql,catch,return,conn
From: https://blog.51cto.com/u_16231213/9569539

相关文章

  • ffmpeg剪辑视频简单应用
    背景:博主非视频剪辑从业者,非软开码农, 不想花费大量时间进行ffmpeg的学习搞这个的初衷是,被剪辑video文件太大,导入剪映耗时长,且剪映导出分辨率低,且不想花钱==因此只做最简单的视频剪辑应用分享,达到截取视频,简单音视频抽取及重组的目的即可。 1.安装https://ffmpeg.org/dow......
  • Jmeter JDBC连接配置
    JDBC连接配置(JDBCConnectionConfiguration),用于创建数据库连接,后续可对数据库进行增删查等操作。和组件【JDBC请求(JDBCRequest)】搭配使用组件路径:线程组->右键添加->配置元件->JDBCConnectionConfiguration 1、前提:Jmeter连接数据库需要有JDBC驱动包,可去网上下载jar......
  • ThreeJs实现简单的动画
    上一节实现可用鼠标控制相机的方式实现动态效果,但很多时候是需要场景自己产恒动态效果,而不是通过鼠标拖动,此时引入一个requestAnimationFrame方法,它实际上是通过定时任务的方式,每隔一点时间改变场景中内容后重新渲染一遍,间隔时间短的话视觉上就显示出连续的动画效果,Js本身也自带定......
  • 史上最简单的日志告警方案,没有之一
    如果你在意生产环境的稳定性,希望自己的服务出问题时及时发现,大概率就有日志监控告警的需求,比如发现日志中有Error或Exception关键字就告警,比如通过日志统计某个服务的95分位延迟数据,延迟过高就告警,比如通过日志统计某个服务的statuscode,出现多个5xx就告警,等等。日志可......
  • uniapp sqlite方法封装
    vardbName='xxx'//数据库名称vardbPath='_doc/xxx.db'//数据库地址,推荐以下划线为开头_doc/xxx.db//判断数据库是否打开constisOpen=(plus:any)=>{//数据库打开了就返回true,否则返回falsevaropen=plus.sqlite.isOpenDatabase({name:......
  • 面试官:你能简单聊聊MyBatis执行流程
    本文分享自华为云社区《面试必问|聊聊MyBatis执行流程?》,作者:冰河。MyBatis源码解析大家应该都知道Mybatis源码也是对Jbdc的再一次封装,不管怎么进行包装,还是会有获取链接、preparedStatement、封装参数、执行这些步骤的。配置解析过程Stringresource="mybatis-config.x......
  • 工规和车规的简单区别
     车规级,即AutomotiveGrade,指要满足车载等级要求的元器件,AEC-Q系列标准是行业公认的车规元器件认证标准。AEC为美国汽车电子委员会(AutomotiveElectronicsCouncil),是由通用、福特和克莱斯勒为建立一套通用的零件资质及质量系统标准而设立,Q为Qualification的首字母,AEC-Q是AEC组......
  • 简单神经网络
    """前向传播解释:https://towardsdatascience.com/forward-propagation-in-neural-networks-simplified-math-and-code-version-bbcfef6f9250"""importmathimportrandom#Sigmoid激活函数defsigmoid_function(value:float,deriv:bool=F......
  • Vue中如何对Axios进行二次封装
    作为一个前端开发者,你一定对Axios这个强大的HTTP库非常熟悉。它不仅简化了与后端API的通信,而且还提供了许多强大的功能,如拦截器、取消请求等。但是在实际开发中,我们经常需要对Axios进行二次封装,以便更好地适应我们的业务需求。今天,我将为大家分享一下如何在Vue中对Axios进行二次封......
  • vue3,封装检测元素大小变化的自定义指令
    1//resizeObserver.ts2//监听元素大小变化的指令3constmap=newWeakMap()4constob=newResizeObserver((entries)=>{5for(constentryofentries){6//获取dom元素的回调7consthandler=map.get(entry.target)8//存在回调函......