JDBCTools 第一个版本

JDBCToolV1:

复制代码
package com.dgd.test;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;

public class JDBCToolsV1 {

    public  static  DataSource ds;
    //静态代码块,创建数据库连接池
    static {
        try {
            Properties p=new Properties();
            p.load(JDBCToolsV1.class.getClassLoader().getResourceAsStream("druid.properties"));
            ds= DruidDataSourceFactory.createDataSource(p);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public  static Connection getConnection(){
        //方式1: DriverManger.getConnection();
        //方式2: 数据库连接池, ds.getConnection();
        try {
            return  ds.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
            return  null;
        }
    }

    public  static  void free( Connection conn){
        try {
            if(conn!=null)
            {
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    //增删改,不能处理事务
    public  static int  update1(String sql, Object...args) throws SQLException {
        //获取连接
        Connection conn= getConnection();
        //创建PreparedStatement对象
        PreparedStatement ps= conn.prepareStatement(sql);
        //设置 ?
        if(args!=null&& args.length>0)
        {
            for (int i = 0; i <args.length ; i++) {
                ps.setObject(i+1,args[i]);

            }
        }
        //执行sql
        int len=ps.executeUpdate();
        //关闭
        ps.close();
        free(conn);

        return  len;
    }
  
  //处理事务的公共部分
public static int update2(Connection conn, String sql, Object... args) throws SQLException { PreparedStatement ps=conn.prepareStatement(sql); if(args!=null && args.length>0) { for (int i = 0; i <args.length ; i++) { ps.setObject(i+1,args[i]); } } int len=ps.executeUpdate(); ps.close(); return len; } }
复制代码

Test:

复制代码
package com.dgd.test;

import org.junit.Test;

import java.sql.Connection;
import java.sql.SQLException;

public class TestJDBCToolV1 {
    @Test
    public  void test1(){
        try {
            String sql="INSERT INTO COURSE VALUES(NULL,?)";
            int len=JDBCToolsV1.update1(sql,"天文");
            System.out.println(len>0?"成功":"失败");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Test //处理事务,不能使用update1,因为update1中每次都是获取一个数据库连接对象,不能保证事务的ACID
    public  void test() throws SQLException {
        String sql1="INSERT INTO COURSE VALUES(NULL,?)";
        String sql2="INSERT INTO COURSE VALUES(NULL,?)";
        Connection conn= JDBCToolsV1.getConnection();
        conn.setAutoCommit(false);

        try {
            int len1=JDBCToolsV1.update2(conn,sql1,"美术");
            int len2=JDBCToolsV1.update2(conn,sql2,"体育");
            if(len1>0 && len2>0)
            {
                conn.commit();
            }
            else
            {
                conn.rollback();
            }
        } catch (SQLException e) {
            conn.rollback();
        }
        conn.setAutoCommit(true);
        JDBCToolsV1.free(conn);

    }


}
复制代码

 

posted @   kkzhang  阅读(187)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示