
1、创建一个普通的空项目
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aQx9d6Ru-1669516492142)(JDBC.assets/image-20220718173544643.png)]](https://img.pic99.top/dingtaihe/202402/cd34d4cc273e599.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XozNJduP-1669516492142)(JDBC.assets/image-20220718173708368.png)]](https://img.pic99.top/dingtaihe/202402/44880578343e2.png)
2、配置JDK版本
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1P5zM0ot-1669516492143)(JDBC.assets/image-20220718173857728.png)]](https://img.pic99.top/dingtaihe/202402/bff20dded11e117.png)
3、创建一个子模块(jdbc快速入门的程序在这里面写)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C1vebDFa-1669516492147)(JDBC.assets/image-20220718174129296.png)]](https://img.pic99.top/dingtaihe/202402/f1a9a6d6367b22c.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A2jdOHMA-1669516492148)(JDBC.assets/image-20220718174238449.png)]](https://img.pic99.top/dingtaihe/202402/82cf334beb455e2.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lysBxsk6-1669516492149)(JDBC.assets/image-20220718174300017.png)]](https://img.pic99.top/dingtaihe/202402/e99584da1dfc91e.png)
4、导入jar包
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oxmcqCqS-1669516492149)(JDBC.assets/image-20220718194901077.png)]](https://img.pic99.top/dingtaihe/202402/a0c221b6f3fefad.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NoxJXCh5-1669516492150)(JDBC.assets/image-20220718195342220.png)]](https://img.pic99.top/dingtaihe/202402/cb792d1ccb614c3.png)
JDBC操作数据库步骤如下:
1、创建数据库和表:
CREATE DATABASE `jdbc_test` DEFAULT CHARSET utf8mb4;CREATE TABLE `account`(`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'ID',`name` varchar(20) NOT NULL COMMENT '姓名',`salary` int(11) COMMENT '薪资',
);
2、编写Java程序:
package com.baidou.jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;/*** JDBC快速入门** @author 白豆五* @version 2022/7/18 19:56* @since JDK8*/
public class JDBCDemo {public static void main(String[] args) throws Exception {// 1、注册驱动Class.forName("com.mysql.jdbc.Driver");// 2、获取连接String url = "jdbc:mysql://127.0.0.1:3306/jdbc_test?useSSL=false";String user = "root";String password = "123456";Connection conn = DriverManager.getConnection(url, user, password);// 3、定义sql语句String sql = "insert into account(name,salary) values('王强',10000)";// 4、获取执行sql的对象 StatementStatement stmt = conn.createStatement();// 5、执行sqlint count = stmt.executeUpdate(sql);// 6、处理结果// 打印受影响的行数System.out.println(count);System.out.println(count>0?"插入成功":"插入失败");// 7、释放资源stmt.close();conn.close();}
}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UrHX2XS4-1669516492150)(JDBC.assets/image-20220718203614831.png)]](https://img.pic99.top/dingtaihe/202402/50ec61c4c7ba206.png)
控制输出结果如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XNEX2S7U-1669516492151)(JDBC.assets/image-20220718203124299.png)]](https://img.pic99.top/dingtaihe/202402/dce26a99b4a25a.png)
表中的数据:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hXxuqe5C-1669516492151)(JDBC.assets/image-20220718203225862.png)]](https://img.pic99.top/dingtaihe/202402/c638725e5552f1a.png)
1、注册驱动
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7sp0OB2e-1669516492151)(JDBC.assets/image-20220718204431218.png)]](https://img.pic99.top/dingtaihe/202402/54b4ed9100683.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QNMH8yBc-1669516492152)(JDBC.assets/image-20220718204849139.png)]](https://img.pic99.top/dingtaihe/202402/09b978bd408fdd2.png)
例如 MySQL数据库驱动类 com.mysql.jdbc.Driver,实现了java.sql.Driver接口。
查看源码发现底层是通过DriverManager.registerDriver()来注册驱动的,这样我们可以通过反射的方式来加载这个数据库驱动类Class.forName(xxx.Driver)。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a3XFzNB5-1669516492152)(JDBC.assets/image-20220718205216879.png)]](https://img.pic99.top/dingtaihe/202402/9d6aa3f72bb92e6.png)
扩展:
Class.forName("xxx");的步骤。![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WBcg8WWX-1669516492152)(JDBC.assets/image-20220718210415594.png)]](https://img.pic99.top/dingtaihe/202402/1daa7eb975d64e4.png)
2、获取数据库的连接
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bH8oLAvT-1669516492152)(JDBC.assets/image-20220718205718991.png)]](https://img.pic99.top/dingtaihe/202402/e27514f072af095.png)
getConnection()方法中需要传递3个参数,分别是url、user、password:
1、url
url,统一资源定位符(网络中某个资源的绝对地址)。
url由哪几个部分组成:协议,ip,port,资源名。
比如我们访问百度的主页:
http://39.156.66.18:80/index.htmlhttp:// 通信协议
39.156.66.18 服务器ip地址
80 端口,80是Web服务的默认端口
index.html 是服务器上某个资源名
mysql5.7和8.0驱动中url:
// mysql5.7
// userSSL=false: 禁用安全连接方式,关闭警告问题。
// useUnicode=true&characterEncoding=utf-8: 字符集编码
url=jdbc:mysql://127.0.0.1:3306/mydatabase?useSSL=false&useUnicode=true&characterEncoding=utf-8// mysql8.0,
// 需要配置时区:serverTimezone=GMT%2B8 东八区GMT+8
url=jdbc:mysql://127.0.0.1:3306/mydatabase?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
2、user:用户名
3、password:密码
扩展:
jdbc:mysql:///db。userSSL=false,禁用安全连接方式,解决警告问题。 jdbc:mysql://127.0.0.1:3306/mydatabase?useSSL=false,如果后面还要拼接参数如要用 & 隔开。1、获取执行SQL的对象
a. 普通执行SQL对象:
Statement createStatement()
b. 预编译的执行SQL对象:(防止SQL注入)
PreparedStatement prepareStatement(String sql)
c. 执行存储过程的对象
CallableStatement prepareCall(String sql)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M5CkEbg5-1669516492153)(JDBC.assets/image-20220718214205257.png)]](https://img.pic99.top/dingtaihe/202402/4f041c3b4b6d64f.png)
2、事务管理
作用:保证在一个事务中的所有SQL要么全部执行成功,要么全部不执行。
a. MySQL 事务管理:
开启事务:BEGIN; 或者 START TRANSACTION;
提交事务:COMMIT;
回滚事务:ROLLBACK;# MySQL默认自动提交事务
b. JDBC事务管理:Connection接口中定义了3个对应的方法:
开启事务: setAutoCommit(boolean autoCommit): true为自动提交事务;false为手动提交事务,即为开启事务。提交事务:commit()
回滚事务: rollback()
示例:
package com.baidou.jdbc;import java.sql.*;
/*** Connection,事务操作** @author 白豆五* @version 2022/7/18 21:50* @since JDK8*/
public class JDBC_Connection {public static void main(String[] args) throws Exception {// 1、注册驱动// Class.forName("com.mysql.jdbc.Driver");// 2、获取连接String url = "jdbc:mysql:///jdbc_test?useSSL=false";String user = "root";String password = "123456";Connection conn = DriverManager.getConnection(url, user, password);// 3、定义sql语句String sql1 = "insert into account(name,salary) values('李四',5000)";String sql2 = "insert into account(name,salary) values('王五',4004)";// 4、获取执行sql的对象 StatementStatement stmt = conn.createStatement();try {/* 开启事务 */conn.setAutoCommit(false); // 手动提交事务// 5、执行sqlint count1 = stmt.executeUpdate(sql1);// 6、处理结果System.out.println(count1);// 打印受影响的行数// 5、执行sqlint count2 = stmt.executeUpdate(sql2);// 6、处理结果System.out.println(count2);// 打印受影响的行数/*提交事务*/conn.commit();} catch (Exception e) {/*回滚事务*/conn.rollback();e.printStackTrace();}// 7、释放资源stmt.close();conn.close();}
}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qVdBdtXw-1669516492153)(JDBC.assets/image-20220718220025835.png)]](https://img.pic99.top/dingtaihe/202402/1f6670a35ad37c5.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NtbgdrdP-1669516492153)(JDBC.assets/image-20220718220042542.png)]](https://img.pic99.top/dingtaihe/202402/f4fbb83257df19e.png)
Statement:执行SQL的对象
作用:执行SQL语句
1、执行DML、DDL语句
int executeUpdate(sql)
返回值: (1)DML语句影响的行数(2)DDL语句执行后,执行成功也可能返回0
2、执行DQL语句
ResultSet executeQuery(sql)
返回值: ResultSet结果集对象
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PTPKCRYn-1669516492154)(JDBC.assets/image-20220719070429457.png)]](https://img.pic99.top/dingtaihe/202402/b452e575ab5b5e2.png)
获取查询结果:
// next功能: (1)将游标从当前位置向下移动一行(2)判断当前行是否有效
boolean next()
返回值: true:有效行,当前行有数据 false: 无效行,当前行无数据
xxx getXxx(参数) //获取指定类型数据xxx是数据类型,如 int getInt(参数) 、String getString(参数) 参数(重载方法): int: 列的编号,从1开始String: 列的名称
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GnYKAtmf-1669516492154)(JDBC.assets/image-20220719072523534.png)]](https://img.pic99.top/dingtaihe/202402/83b19e62b57349e.png)
ResultSet使用步骤:
// 通过循环遍历结果集对象
while(rs.next()){ // rs.next()将游标从当前位置向下移动一行并判断当前行是否有效// 获取数据rs.getXxx(参数);
}
示例:
/*** ResultSet的使用** @author 白豆五* @version 2022/7/19 7:42* @since JDK8*/
public class JDBC_ResultSet {public static void main(String[] args) throws Exception {// 1、注册驱动// Class.forName("com.mysql.jdbc.Driver");// 2、获取连接String url = "jdbc:mysql:///jdbc_test?useSSL=false";String user = "root";String password = "123456";Connection conn = DriverManager.getConnection(url, user, password);// 3、定义sql语句String sql = "select * from account";// 4、获取执行sql的对象 StatementStatement stmt = conn.createStatement();// 5、执行sql并返回结果集ResultSet rs = stmt.executeQuery(sql);// 6、处理结果while (rs.next()) { // 通过循环取出ResultSet中的所有数据System.out.print("id:" + rs.getInt("id") + "\t");System.out.print("name:" + rs.getString("name") + "\t");System.out.print("salary:" + rs.getInt("salary") + "\t");System.out.println();}/*// 进行读取一次 判断是否有数据if (rs.next()) {System.out.println("id:" + rs.getInt(1) );}*/// 7、释放资源rs.close();stmt.close();conn.close();}
}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GwzQqA36-1669516492155)(JDBC.assets/image-20220719075752992.png)]](https://img.pic99.top/dingtaihe/202402/2f345fb488413d7.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e9k9kjNx-1669516492155)(JDBC.assets/image-20220719075603999.png)]](https://img.pic99.top/dingtaihe/202402/b8ad96c35a0fe3c.png)
通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
示例:模拟sql注入问题
数据库SQL:
CREATE TABLE `user` (`id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',`username` varchar(20) NOT NULL COMMENT '用户名',`password` varchar(20) NOT NULL COMMENT '密码',PRIMARY KEY (`id`)
);insert into user(username,password) values('张三','123');
db.properties:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/jdbc_test?useSSL=false&useUniCode=true&characterEncoding=utf-8
user=root
password=123456
Java程序:
/*** 模拟SQL注入问题** @author 白豆五* @version 2022/7/19 8:14* @since JDK8*/
public class JDBC_SQLinjection {/*功能:实现用户登录需求:接收用户输入的用户名和密码;验证用户名和密码;返回给用户提示信息*/public static void main(String[] args) {Map userLoginInfo = initUI();boolean loginSuccess = login(userLoginInfo);System.out.println(loginSuccess?"登录成功":"用户名或密码有误");}/*** @param userLoginInfo 用户登录信息* @return false表示失败, true表示成功*/private static boolean login(Map userLoginInfo) {Connection conn = null;Statement stmt = null;ResultSet rs = null;// 定义一个红绿灯表示用户登录和失败boolean loginSuccess = false;try {// 创建配置类对象Properties properties = new Properties();// 通过类加载器获取类路径下的db.properties这个资源InputStream is = ClassLoader.getSystemResourceAsStream("db.properties");// 加载资源到配置类中properties.load(is);// 关闭流is.close();// 通过属性获取配置文件里的书String driver = properties.getProperty("driver");String url = properties.getProperty("url");String user = properties.getProperty("user");String password = properties.getProperty("password");// 注册驱动Class.forName(driver);// 获取连接conn = DriverManager.getConnection(url, user, password);// 获取数据库操作对象stmt = conn.createStatement();// 定义sqlString sql = "select * from user where username='" + userLoginInfo.get("username")+ "' and password='" + userLoginInfo.get("password") + "'";// 执行sqlrs = stmt.executeQuery(sql);// 如果结果集中有数据表示登录成功if (rs.next()) {loginSuccess = true;}} catch (Exception e) {e.printStackTrace();} finally {// 是否资源close(rs,stmt,conn);}return loginSuccess;}/*** 初始化界面** @return 用户名和密码等信息*/public static Map initUI() {Scanner sc = new Scanner(System.in);System.out.println("用户名:");String username = sc.nextLine();System.out.println("密码:");String password = sc.nextLine();// 定义一个Map,存储用户信息Map userLoginInfo = new HashMap<>();userLoginInfo.put("username", username);userLoginInfo.put("password", password);return userLoginInfo;}/*** 释放资源** @param rs 结果集对象* @param stmt 执行sql的对象* @param conn 数据库连接对象*/public static void close(ResultSet rs, Statement stmt, Connection conn) {try {if (rs != null) {rs.close();}if (stmt != null) {stmt.close();}if (conn != null) {conn.close();}} catch (Exception e) {e.printStackTrace();}}
}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u8V33nsK-1669516492155)(JDBC.assets/image-20220719085344240.png)]](https://img.pic99.top/dingtaihe/202402/ab03b5a8a906d12.png)
分析:只要用户提供的信息不参与SQL语句的编译过程,问题就解决了。
解决方案:
1、可以利用正则表达式来防止用户输入一些非法字符,例如(‘=’,‘or’等)
2、将Statment换成PreparedStatement(预编译的数据库操作对象);
PreparedStatement的原理:首先将SQL语句传入PreparedStatement中,然后把传入到SQL语句中的参数用?(占位符)来代替,然后该SQL语句会进行编译(耗时操作),之后将获取的参数通过PreparedStatement中的set()方法传入编译后的SQL语句中,这样SQL语句就会先被编译再进行传值,最后在执行一下,就解决了SQL注入问题。
示例:使用PreparedStatement解决SQL注入问题
/*** 使用PreparedStatement解决SQL注入问题** @author 白豆五* @version 2022/7/19 8:14* @since JDK8*/
public class JDBC_SQLinjection2 {/*功能:实现用户登录需求:接收用户输入的用户名和密码;验证用户名和密码;返回给用户提示信息*/public static void main(String[] args) {Map userLoginInfo = initUI();boolean loginSuccess = login(userLoginInfo);System.out.println(loginSuccess?"登录成功":"用户名或密码有误");}/*** @param userLoginInfo 用户登录信息* @return false表示失败, true表示成功*/private static boolean login(Map userLoginInfo) {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;// 定义一个红绿灯表示用户登录和失败boolean loginSuccess = false;try {// 创建配置类对象Properties properties = new Properties();// 通过类加载器获取类路径下的db.properties这个资源InputStream is = ClassLoader.getSystemResourceAsStream("db.properties");// 加载资源到配置类中properties.load(is);// 关闭流is.close();// 通过属性获取配置文件里的书String driver = properties.getProperty("driver");String url = properties.getProperty("url");String user = properties.getProperty("user");String password = properties.getProperty("password");// 注册驱动Class.forName(driver);// 获取连接conn = DriverManager.getConnection(url, user, password);// 定义sqlString sql = "select * from user where username=? and password=?";// 获取数据库操作对象ps = conn.prepareStatement(sql); // 先编译后传值// 给占位符传值ps.setString(1,userLoginInfo.get("username"));ps.setString(2,userLoginInfo.get("password"));// 执行sqlrs = ps.executeQuery();// 如果结果集中有数据表示登录成功if (rs.next()) {loginSuccess = true;}} catch (Exception e) {e.printStackTrace();} finally {// 是否资源close(rs,ps,conn);}return loginSuccess;}/*** 初始化界面** @return 用户名和密码等信息*/public static Map initUI() {Scanner sc = new Scanner(System.in);System.out.println("用户名:");String username = sc.nextLine();System.out.println("密码:");String password = sc.nextLine();// 定义一个Map,存储用户信息Map userLoginInfo = new HashMap<>();userLoginInfo.put("username", username);userLoginInfo.put("password", password);return userLoginInfo;}/*** 释放资源** @param rs 结果集对象* @param ps 执行sql的预编译对象* @param conn 数据库连接对象*/public static void close(ResultSet rs, PreparedStatement ps, Connection conn) {try {if (rs != null) {rs.close();}if (ps != null) {ps.close();}if (conn != null) {conn.close();}} catch (Exception e) {e.printStackTrace();}}}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5iS3g9xD-1669516492156)(JDBC.assets/image-20220719090611974.png)]](https://img.pic99.top/dingtaihe/202402/271e509b78e03eb.png)
PreparedStatement:预编译的SQL执行对象。
作用:预编译SQL并执行SQL语句
1、获取PreparedStatement 对象
// SQL语句中的参数值,使用?占位符替代
String sql = "select * from user where username = ? and password = ?";//通过Connection对象获取,并传入对应的sql语句,然后进行预编译操作
PreparedStatement pstmt = conn.prepareStatement(sql);
2、设置参数值
ps.setXxx(参数1,参数2) //给?赋值 Xxx:数据类型; 如 ps.setInt (参数1,参数2)、ps.setString (参数1,参数2)参数:参数1: ?的位置编号,从1开始参数2: ?的值
3、执行SQL
ps.ecuteUpdate(); // 不需要再传递sql
import org.junit.Test;import java.sql.*;/*** @ClassName: JDBCTest05* @Description: 使用PreparedStatement完成增删改查功能* @Author: baidou* @Date: 2022/2/2 09:06* Version: 1.0*/
public class JDBCTest05 {Connection conn;PreparedStatement pstmt;/*** 获取数据库连接对象** @return connection* @throws SQLException, ClassNotFoundException*/public static Connection getConnection() throws SQLException, ClassNotFoundException {Class.forName("com.mysql.jdbc.Driver");Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctest?useSSL=false&useUniCode=true&characterEncoding=utf-8", "root", "123456");return connection;}/*** 获取数据库的预处理对象** @param connection 数据库连接对象* @param sql 我们传入的sql语句* @param obj 占位符的参数* @return* @throws SQLException*/public static PreparedStatement getPreparedStatement(Connection connection, String sql, Object[] obj) throws SQLException {PreparedStatement pstmt = connection.prepareStatement(sql);if (obj != null) {for (int i = 0; i < obj.length; i++) {pstmt.setObject(i + 1, obj[i]);}}return pstmt;}/*** 释放资源** @param rs* @param ps* @param conn* @throws SQLException*/public static void close(ResultSet rs, PreparedStatement ps, Connection conn) throws SQLException {if (rs != null) {rs.close();}if (ps != null) {ps.close();}if (conn != null) {conn.close();}}@Testpublic void add() throws SQLException, ClassNotFoundException {conn = JDBCTest05.getConnection();String sql = "insert into user(name,password,vocation) values(?,?,?)";Object[] obj = {"大灰狼", "2333", "战士"};pstmt = JDBCTest05.getPreparedStatement(conn, sql, obj);int count = pstmt.executeUpdate();System.out.println(count > 0 ? "添加成功" : "添加失败");JDBCTest05.close(null, pstmt, conn);}@Testpublic void delete() throws SQLException, ClassNotFoundException {conn = JDBCTest05.getConnection();String sql = "delete from user where id=?";pstmt = JDBCTest05.getPreparedStatement(conn, sql, new Object[]{4});int count = pstmt.executeUpdate();System.out.println(count > 0 ? "删除成功" : "删除失败");JDBCTest05.close(null, pstmt, conn);}@Testpublic void update() throws SQLException, ClassNotFoundException {conn = JDBCTest05.getConnection();String sql = "update user set name=?,password=? where name=?";Object[] obj = {"铠甲勇士", "0000", "zhangsan"};pstmt = JDBCTest05.getPreparedStatement(conn, sql, obj);int count = pstmt.executeUpdate();System.out.println(count > 0 ? "修改成功" : "修改失败");JDBCTest05.close(null, pstmt, conn);}@Testpublic void list() throws SQLException, ClassNotFoundException {conn = JDBCTest05.getConnection();String sql = "select * from user";pstmt = JDBCTest05.getPreparedStatement(conn, sql, null);ResultSet rs = pstmt.executeQuery();while (rs.next()) {System.out.println("id:" + rs.getObject(1) + "\t用户名:" + rs.getObject(2) + "\t密码:" + rs.getObject(3) + "\t职业:" + rs.getObject(4));}JDBCTest05.close(rs, pstmt, conn);}
}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gWeTUphG-1669516492156)(JDBC.assets/image-20220719095350923.png)]](https://img.pic99.top/dingtaihe/202402/8b08b1128d207b1.png)
数据库连接池的实现
1、标准接口:javax.sql.DataSource。
2、常见的数据库连接池:
Druid使用步骤:
1、导入jar包 druid-1.1.12.jar
2、定义配置文件
3、加载配置文件
4、获取数据库连接池对象
5、获取连接
druid.properties:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc_test?useSSL=false&useServerPrepStmts=true
username=root
password=123456
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000
package com.baidou.druid;import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.Connection;
import java.util.Properties;/*** Druid的使用** @author 白豆五* @version 2022/7/19 10:28* @since JDK8*/
public class DruidDemo {public static void main(String[] args) throws Exception {//加载配置文件Properties prop = new Properties();// System.out.println(System.getProperty("user.dir"));prop.load(new FileInputStream("jdbc_demo2/src/druid.properties"));// 获取连接池对象DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);// 获取数据库连接Connection conn = dataSource.getConnection();System.out.println("conn = " + conn);conn.close();}
}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BjeTZjcH-1669516492157)(JDBC.assets/image-20220719111306421.png)]](https://img.pic99.top/dingtaihe/202402/8624502cbd5cd1c.png)
下一篇:患字的成语疯狂猜成语