JavaWeb(5)之JDBC(1)

JDBC概述

JDBC详解

什么是JDBC

百度百科:
Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。我们通常说的JDBC是面向关系型数据库的。

什么是数据库驱动

驱动:两个设备(应用)之间的桥梁

为什么学习JDBC

没有JDBC的时候,如果现在要开发一套系统,使用Java连接MySQL数据库,那么这时候Java程序员需要了解MySQL驱动API,如果使用Java连接Oracle数据库,那么这个时候Java程序员需要了解Oracle数据库驱动API。

SUN公司提供一套统一的规范 (接口)。然后各个数据库生产商提供这套接口的实现。这套接口规范就是JDBC的规范。

JDBC的入门

JDBC的环境准备

创建数据库和表

CREATE TABLE `jdbc` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) DEFAULT NULL,
  `password` varchar(20) DEFAULT NULL,
  `nickname` varchar(20) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
)

在这里插入图片描述

创建项目引入jar包

MySQLjar包下载地址
项目中引入jar包
在这里插入图片描述

JDBC的代码实现

JDBC的开发步骤

第一步:加载驱动
第二步:获得连接
第三步:基本操作
第四步:释放资源

JDBC的代码实现

Mysql8.0连接时的几个常见基本问题
连接MySQL8.0

		Connection con = null;//与数据库连接的对象
		Statement stmt= null;//执行SQL的对象
		ResultSet rs = null;//存放结果集的对象
		// 驱动程序名
		final String driver = "com.mysql.cj.jdbc.Driver";
		// URL指向要访问的数据库名
		final String url = "jdbc:mysql://localhost:3306/jdbc?useSSL=false&serverTimezone=UTC";
		// MySQL配置时的用户名
		final String user = "root";
		// MySQL配置时的密码
		final String password = "123456";
		// 遍历查询结果集
		try {
   
			// 加载驱动程序
			Class.forName(driver);
			System.out.println("加载驱动成功!");
			// 1.getConnection()方法,连接MySQL数据库!!
			con = DriverManager.getConnection(url, user, password);
			System.out.println("连接数据库!");
			// isClosed():检索此Connection对象是否已关闭
			if (!con.isClosed()) {
   
				System.out.println("连接到数据库成功!");
			}
			// 2.创建statement类对象,用来执行SQL语句!!
			stmt= con.createStatement();
			// 要执行的SQL语句
			String sql = "select * from user";
			// 3.ResultSet类,用来存放获取的结果集!!
			rs = stmt.executeQuery(sql);
			while (rs.next()) {
   
				System.out.print(rs.getInt("id") + " ");
				System.out.print(rs.getString("username") + " ");
				System.out.print(rs.getString("password") + " ");
				System.out.print(rs.getString("nickname") + " ");
				System.out.print(rs.getInt("age"));
				System.out.println();
			}
		} catch (ClassNotFoundException | SQLException e) {
   
			e.printStackTrace();
		} finally {
   
			if (rs != null) {
   
				try {
   
					rs.close();
					System.out.println("释放ResultSet成功");
				} catch (SQLException e) {
   
					e.printStackTrace();
				}
				rs = null;
			}
			if (stmt!= null) {
   
				try {
   
					stmt.close();
					System.out.println("释放Statement成功");
				} catch (SQLException e) {
   
					e.printStackTrace();
				}
				stmt= null;
			}
			if (con != null) {
   
				try {
   
					con.close();
					System.out.println("释放Connection成功");
				} catch (SQLException e) {
   
					e.printStackTrace();
				}
				con = null;
			}
		}

运行结果:
在这里插入图片描述

JDBC详解之DriverManager

驱动管理类

作用:

  1. 注册驱动
    在这里插入图片描述
    这个方法可以完成驱动的注册,但是实际开发中-般不会使用这个方法完成驱动的注册!!
    原因:
    如果需要注册驱动,就会使用DriverManager.registerDriver(new Driver);但是查看源代码发现,在代码中有一段静态代码块,静态代码块已经调用了注册驱动的方法。
    如果再手动调用该方法注册驱动,就会导致驱动被注册两次。
    实际开发中一般会采用:
Class.forName("com.mysql.cj.jdbc.Driver");
  1. 获得连接
    在这里插入图片描述
    这个方法就是用来获得与数据库连接的方法,这个方法中有3个参数:
    url:  —与数据库连接的路径
    user:  —与数据库连接的用户名
    password:  —与数据库连接的密码
    主要关注的是url的写法:
jdbc:mysql://localhost:3306/user?useSSL=false&serverTimezone=UTC

jdbc:—连接数据库的协议
mysql:—是jdbc的子协议,用来区分连接什么样的数据库
localhost:连接的MySQL数据库服务器的主机地址。(连接是本机就可以写成localhost),如果连接的不是本机的,就需要写上连接主机的IP地址。
3306:MySQL数据库服务器的端口号
user:数据库名称
url如果连接的是本机的路径,可以简化为如下格式:

jdbc:mysql:///user

JDBC的API详解之Connection

与数据库连接的对象
作用:

  1. 创建执行SQL语句的对象
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    执行SQL语句对象
    Statement:—执行SQL
    CallableStatement:—执行数据库中存储过程
    PreparedStatement:—执行SQL对SQL进行预处理。解决SQL注入漏洞。
  2. 管理事务
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

JDBC的API详解之Statement

执行SQL

作用:

  1. 执行SQL
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

执行SQL的方法:

  • boolean execute(String sql);
    执行查询,修改,添加,删除的SQL语句。
  • ResultSet executeQuery(String sq);
    执行查询(执行select 语句)。
  • int executeUpate(String sql);
    执行修改、添加、删除的SQL语句。

通常使用的是executeQuery和executeUpate两个方法。

  1. 执行批处理
    将SQL添加到批处理中
    在这里插入图片描述
    情况批处理
    在这里插入图片描述
    执行批处理
    在这里插入图片描述
    可以写多个SQL语句,然后将SQL语句添加到批处理中,执行executeBatch方法执行。

JDBC的API详解之ResultSet

结果集,通过select语句查询的结果。

结果集的遍历:
在这里插入图片描述
遍历的原理:每使用一次next()方法就会遍历一行数据,从第一行开始,直到返回的是false为止。
在这里插入图片描述
代码实现:输出结果集时,int结果使用getInt,String结果使用getString
在这里插入图片描述
结果集的获取:
在这里插入图片描述
在这里插入图片描述

结果集获取可以使用结果集中的:
getXXX();方法通常都会有一个重载的方法。
getXXX(lint columnIndex);—通过列数来获取数据
getXX(String columnLabel);—通过列的名字获取数据,推荐使用本方法。

JDBC的资源释放

JDBC程序执行结束后,将与数据库进行交互的对象释放掉,通常是ResultSet,Statement.Connection。

这几个对象中尤其是Connection对象是非常稀有的。这个对象一定要做到尽量晚创建,尽早释放掉。

将资源释放的代码写入到finally 的代码块中。
资源释放的代码应该写的标准:

finally {
   
			if (rs != null) {
   
				try {
   
					rs.close();
					System.out.println("释放ResultSet成功");
				} catch (SQLException e) {
   
					e.printStackTrace();
				}
				//将re=null,是为了让垃圾回收机制更快的回收。
				rs = null;
			}
			if (statement != null) {
   
				try {
   
					statement.close();
					System.out.println("释放Statement成功");
				} catch (SQLException e) {
   
					e.printStackTrace();
				}
				statement = null;
			}
			if (con != null) {
   
				try {
   
					con.close();
					System.out.println("释放Connection成功");
				} catch (SQLException e) {
   
					e.printStackTrace();
				}
				con = null;
			}
		}

JDBC的CRUD操作之添加操作

因为是添加数据的操作,所以就不需要使用ResultSet结果集了。
编写添加数据的SQL语句,然后使用executeUpdate方法执行SQL语句,executeUpdate方法返回的是影响的行数,判断影响的行数是否大于0就可以知道是否成功添加数据。

代码实现:

@Test
	public void demo1() {
   
		Connection con = null;
		Statement stmt = null;
		// 驱动程序名
		String driver = "com.mysql.cj.jdbc.Driver";
		// URL指向要访问的数据库名
		String url = "jdbc:mysql://localhost:3306/jdbc?useSSL=false&serverTimezone=UTC";
		// MySQL配置时的用户名
		String user = "root";
		// MySQL配置时的密码
		String password = "123456";
		// 遍历查询结果集
		try {
   
			// 加载驱动程序
			Class.forName(driver);
			System.out.println(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值