Java数据库连接--JDBC--DRUID

1.JDBC简介

JDBC(Java Data Base Connectivity,Java数据库连接)是Java程序和数据库之间的桥梁,包含 了⼀套Java定义的用于执行SQL语句的接口,使开发者能够编写数据库的程序。JDBC 的主要作用是: 与数据库建立连接、发送SQL语句和处理数据库执行结果。
访问数据库步骤

  1. 加载驱动
  2. 确认用户名、密码、url
  3. 创建Statement
  4. 执行SQL并接受返回的结果
  5. 关闭连接

2.JDBC配置

2.1建立连接

首先我们需要获取jar包,这里以oracle举例。将jar包复制到libs文件中,点击jar包右键,选择添加到库

2.2基础配置

注册驱动

java 复制代码
    //注册驱动,有三种方式,我比较习惯使用class.forname
    Class.forName("oracle.jdbc.driver.OracleDriver");
    //获取连接
	Connection con = DriverManager.getConnection(  
			"jdbc:oracle:thin:@localhost:1521:XE",  
			"XIAOMING",  
			"123456"  
	);

配置Statement

  • prepareStatement会先初始SQL,先把这个SQL提交到数据库中进行预处理,多次使用可提高效率;可以保证SQL安全问题,防止SQL注入,可以重复使用;
  • createStatement不会初始化,没有预处理,只能在SQL中拼接参数,容易造成SQL注入,如果要删除多条数据,需要写多条SQL语句;
java 复制代码
String sql = "select * from family_member where name";
Statement stat = con.createStatement();
ResultSet resultSet = stat.executeQuery(sql);
while(resultSet.next()){  
	System.out.println(resultSet.getString("name")  
						+"\t"  
						+resultSet.getString("gender")  
	);  
}
java 复制代码
String sql = "select * from family_member where name = ?";
PreparedStatement stat = con.prepareStatement(sql);
stat.setString(1,"爸爸");
ResultSet resultSet = stat.executeQuery();
while(resultSet.next()){  
	System.out.println(resultSet.getString("name")  
						+"\t"  
						+resultSet.getString("gender")  
	);  
}

释放资源

java 复制代码
resultSet.close();  
stat.close();  
con.close();

3.Spring实战 --手动构建DataSource

3.1配置类结构

整个配置类包含三部分:

  • 数据源配置:连接信息 + 连接池参数
  • Druid 监控 Servlet:提供可视化监控页面
  • Druid Web 过滤器:统计 Web 请求与 SQL 的关联

3.2配置

数据源核心配置

java 复制代码
@Bean  
public DataSource dataSource() throws SQLException {  
    DruidDataSource ds = new DruidDataSource();  
    //基础连接信息
    ds.setUrl("jdbc:oracle:thin:@localhost:1521:XE");  
    ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");  
    ds.setUsername("XIAOMING");  
    ds.setPassword("123456");  
    //连接池大小控制
    ds.setMinIdle(5);  //最小连接数
    ds.setMaxWait(60000);  //获取连接的最大等待时间
    ds.setMaxActive(20);  //最多20个连接同时活跃
    ds.setInitialSize(5);  //5个初始连接
    //空闲连接回收策略
    ds.setMinEvictableIdleTimeMillis(60000);  //最小回收等待时间
	ds.setMaxEvictableIdleTimeMillis(900000);  //最大回收等待时间
    ds.setTimeBetweenEvictionRunsMillis(30000);  //每30s检测一次
    //连接检测
    ds.setValidationQuery("SELECT 1 FROM DUAL");  //检测语句
    ds.setTestWhileIdle(true);  //空闲时检测
    ds.setTestOnBorrow(false);  //借出不检测
    ds.setTestOnReturn(false);  //还回不检测
    //废弃处理
    ds.setRemoveAbandoned( true);  //自动回收泄露的连接
    ds.setRemoveAbandonedTimeout(180);  //设置3分钟未关闭为泄露
	ds.setLogAbandoned(true);  //回收时打印
	//扩展功能
    ds.setFilters("stat,wall");  //stat=SQL监控,wall=SQL防火墙
    ds.setPoolPreparedStatements(true);  //开启预先输入缓存
    ds.setUseGlobalDataSourceStat( true);  //启用全局数据源统计
    return ds;  
}

注意setFilters("stat,wall") 中的 wall 是 Druid 的 SQL 防火墙,能防御 SQL 注入攻击,实际开发中很有用。

Druid监控页面Servlet

java 复制代码
@Bean  
public ServletRegistrationBean<StatViewServlet> statViewServlet() {  
    ServletRegistrationBean<StatViewServlet> servletReg =  
            new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");  
    servletReg.addInitParameter("loginUsername", "admin");  // 监控页登录账号  
    servletReg.addInitParameter("loginPassword", "123456"); // 监控页登录密码  
    return servletReg;  
}

DruidWeb过滤器

这个过滤器的作用是将 HTTP 请求和执行的 SQL 语句关联起来,让你在监控页面能看到"哪个接口执行了什么 SQL,耗时多少"。

java 复制代码
@Bean  
public FilterRegistrationBean<WebStatFilter> webStatFilter() {  
    FilterRegistrationBean<WebStatFilter> filterReg = new FilterRegistrationBean<>();  
    filterReg.setFilter(new WebStatFilter());  
    filterReg.addUrlPatterns("/*");  
    filterReg.addInitParameter("exclusions", "*.js,*.css,/druid/*");  
    return filterReg;  
}

3.3验证配置

  1. 测试数据库连接和业务代码

    java 复制代码
    @GetMapping("/listAll")  
    public Result listAll() {  
        List<familyMember> listall= familyMemberService.listAll();  
        if(listall.size()>0){  
            return Result.ok(listall);  
        }else{  
            return Result.fail("没有数据");  
        }  
    }
  2. 访问监控页面
    http://localhost:8080/druid

相关推荐
zzzll11112 分钟前
Spring Boot 入门指南:从零开始构建微服务
spring boot·后端·微服务
wWYy.15 分钟前
Mysql:有哪些锁?
数据库·mysql
李可以量化16 分钟前
Tornado 从了解到精通(一)下:异步与非阻塞 IO 核心原理
java·数据库·tornado
运维行者_22 分钟前
企业带宽监控工具实战:网络流量分析与异常排查的5个关键能力
运维·服务器·开发语言·网络·分布式·后端·php
长栎29 分钟前
你用了五年的消息队列,不知道它背后站着中介者模式
后端
Gopher_HBo29 分钟前
路由注册:RouterGroup(routergroup.go)
后端
用户6081865279033 分钟前
Avalonia UI 控件样式定义的三种方式详解
后端
feng尘34 分钟前
volatile 可见性与内存屏障知识点
后端
SamDeepThinking36 分钟前
第3篇:企业级CAS单点登录实战-技术架构设计方案
后端·程序员·架构
JoyT37 分钟前
Agent 开源项目全景解析(上):LangGraph、Spring AI 与 Agent Runtime
后端