连接池技术(30)
1、共享连接 Connection。以优化性能。对于多并发的时候呢,优势更为明显,好比线程池技术。
2、常见连接池:DBCP (apache) , C3P0。 javax.sql.datasource。
3、dbcp和pool的jar包实现高效的连接池。
4、编写工具类
// BasicDataSource类 是 DataSource接口的实现类
// DataSource接口,它是java与每种数据库连接池 连接的规范标准
public class JDBCUtils { public static final String DRIVER = "com.mysql.jdbc.Driver"; public static final String URL = "jdbc:mysql://localhost:3306/daydb"; public static final String USERNAME = "root"; public static final String PASSWORD = "root"; /* * 创建连接池BasicDataSource */ public static BasicDataSource dataSource = new BasicDataSource(); //静态代码块 static { //对连接池对象 进行基本的配置 dataSource.setDriverClassName(DRIVER); // 这是要连接的数据库的驱动 dataSource.setUrl(URL); //指定要连接的数据库地址 dataSource.setUsername(USERNAME); //指定要连接数据的用户名 dataSource.setPassword(PASSWORD); //指定要连接数据的密码 } /* * 返回连接池对象 */ public static DataSource getDataSource(){ return dataSource; } }
5、 工具类的使用
建立数据库连接的代码中,要用try...catch来抛运行时期异常,连接时期有异常时候那么接下来的操作都跑不了,所以没必要用throws SQLException
public class Demo { // 插入功能 @Test public void insert(){ try { //获取一个用来执行SQL语句的对象 QueryRunner QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); String sql = "INSERT INTO zhangwu(name,money,parent) VALUES(?,?,?)"; Object[] params = {"股票收入", 5500, "收入"}; int line = qr.update(sql,params); //结果集处理 System.out.println("line = " + line); } catch (SQLException e) { throw new RuntimeException(e); } } //删除功能 @Test public void delete(){ try { //创建一个QueryRunner对象,用来完成SQL语句的执行 QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); //执行SQL语句 String sql = "DELETE FROM zhangwu WHERE name = ?"; Object[] params = {"股票收入"}; int line = qr.update(sql, params); //结果集的处理 System.out.println("line="+line); } catch (SQLException e) { throw new RuntimeException(e); } } //更新功能 @Test public void update(){ try { //创建一个QueryRunner对象,用来完成SQL语句的执行 QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); //执行SQL语句 String sql = "UPDATE zhangwu SET money = money+1000 WHERE name=?"; Object[] params = {"股票收入"}; int line = qr.update(sql, params); //结果集的处理 System.out.println("line="+line); } catch (SQLException e) { throw new RuntimeException(e); } } //查询功能,将结果集中第一条记录封装到一个指定的javaBean中。 @Test public void search(){ try{ //获取QueryRunner QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); //执行SQL语句 String sql = "SELECT * FROM zhangwu"; Object[] params = {}; Product p = qr.query(sql, new BeanHandler<Product>(Product.class), params); //结果集处理 System.out.println(p); } catch(SQLException e){ throw new RuntimeException(e); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?