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); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· 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吧