木木的Java知识整理——JDBC(Java数据库连接)

本文介绍了Java数据库连接JDBC的基础知识,包括JDBC概述、JDBC API的使用如DriverManager、Connection、Statement、ResultSet以及资源释放。此外,还讲解了JDBC工具类JDBCUtils的两种实现方式:属性文件和连接池。最后,讨论了JDBC中的SQL注入漏洞及其防范措施,推荐使用PreparedStatement来避免注入问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、JDBC概述

Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。
在这里插入图片描述
通过JDBC将应用程序与数据库相连,从而对数据库进行增删查改等操作。

二、JDBC的API

2.1 JDBC的连接

jdbc建立连接的五大步骤:

  1. 加载(注册)数据库
  2. 建立链接
  3. 执行SQL语句
  4. 处理结果集
  5. 关闭数据库
	@Test
	public void demo1() {
   
		Connection conn = null;
		Statement stmt = null;
		ResultSet resultSet = null;
		try {
   
			//1、加载驱动
			//DriverManager.registerDriver(new Driver());
			Class.forName("com.mysql.cj.jdbc.Driver");
			//2、获得连接
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/数据库名?serverTimezone=UTC&characterEncoding=utf-8", "用户名" ,"密码");
			//3、创建执行SQL语句的对 象,并且执行SQL
			//3.1 创建执行sql的对象
			String sql = "SELECT id,name,price,desp FROM goods WHERE price<3500";
			stmt = conn.createStatement();
			//3.2 执行sql语句
			resultSet = stmt.executeQuery(sql);
			//4、处理结果集
			while(resultSet.next()) {
   
				int id = resultSet.getInt("id");
				String name = resultSet.getString("name");
				float price = resultSet.getFloat("price");
				String desp = resultSet.getString("desp");
				
				System.out.println(id + "  " + name + "  " + price + "  " + desp);
			}
		} catch (Exception e) {
   
			e.printStackTrace();
		} finally {
   
			//5、释放资源
			if(resultSet != null) {
   
				try {
   
					resultSet.close();
				} catch (SQLException e) {
   
					e.printStackTrace();
				}
				resultSet = null;
			}
			
			if(stmt != null) {
   
				try {
   
					stmt.close();
				} catch (SQLException e) {
   
					e.printStackTrace();
				}
				stmt = null;
			}
			
			if(conn != null) {
   
				try {
   
					conn.close();
				} catch (SQLException e) {
   
					e.printStackTrace();
				}
				conn = null;
			}
		}
		
	}

2.2 DriverManager:驱动管理类

主要作用

1、注册驱动
DriverManager .registerDriver(new Driver());
但是这种方式会导致驱动注册两次(在加载DriverManager的时候会自动注册一次)
实际开发中注册驱动会使用如下方式:

//1、加载驱动
//DriverManager.registerDriver(new Driver());
//开发中常用:
Class.forName("com.mysql.cj.jdbc.Driver");

2、获得连接

//2、获得连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/imooc?serverTimezone=UTC&characterEncoding=utf-8", "用户名" ,"密码");

Connection getConnection(String url,String username,String password);
*url写法:jdbc:mysql://localhost:3307/数据库名称
**jdbc:协议
**mysql:子协议
**localhost:主机名
**3307:端口号
*url简写:jdbc:mysql:///jdbc(数据库默认端口号是3306,如果你的数据库不是在默认端口号,最好还是写全)

2.3 Connection:连接对象

主要作用

1、创建执行SQL语句的对象:

方法 作用
Statement createStatement(); 执行SQL语句,有SQL注入的漏洞存在
PreparedStatement prepareStatement(String sql); 预编译SQL语句并且执行,解决SQL注入的漏洞(实际开发中用的)
CallableStatement prepareCall(String sql) ; 执行SQL中存储过程

2、进行事务的管理(保证多个操作是在同一个事务当中)

方法 作用
setAutoCommit(boolean autoCommit) 设置事务是否自动提交(默认自动提交)
commit() 事务提交
rollback() 事务回滚

若想开启JDBC的事务,需要先将自动提交关闭,设置为false(之后再详细整理事务)

2.4 Statement:执行SQL语句

主要作用

1、 执行SQL语句:

方法 作用
boolean excute(String sql); (少用)执行sql,如果执行select语句返回true,否则返回false
ResultSet executeQuery(String sql); (常用)执行sql中的select语句,返回表格,结果集
int excuteUpdate(String sql); (常用)执行sql中的insert/update/delete语句,返回影响的行数 int 类型 , 当返回值>0时&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值