【JDBC】JDBC的基本使用步骤(清晰完美版)

JDBC的操作五大步骤:注册驱动;建立连接;创建statement去执行sql,获得结果;处理结果;释放资源。就是这么简简单单的五步,阐释了Java连接数据库时的优雅。

啥是JDBC

JDBC全称: Java Data Base Connectivity,Java 数据库连接

为什么会出现JDBC?

  • 对于Java这门编程语言来说,它可能需要连接各种数据库(MySQL、SQL Server、Oracle等等);
  • 那么对于这些数据库厂商来说,他们都需要提供一套Java程序员能看懂的操作API;
  • 这对于程序员来说,可谓是不小的难度。因为,当你连接MySQL时用的是一套API,当你连接Oracle时,又用的是另外一套API,十分蛋疼
  • 于是SUN公司就想能不能程序员只用一套API,就可以操作所有的数据库。(皆大欢喜。
  • 于是,就诞生了JDBC这门规范、技术,程序员使用SUN公司提供的API,就可以操作所有的数据库,至于其他的,就是SUN公司的事了~~

在这里插入图片描述

JDBC的工作原理示意图

注册驱动

接下来,我将使用Java来连接MySQL数据库。学习JDBC的基础用法。

第0步:首要步骤!!
导入驱动包:

  • 在当前项目根目录下建立一个“lib”文件夹;
  • 把“mysql-connector-java-5.1.18-bin.jar”复制到该文件夹中;
  • 选中该jar包,右键,执行“build Path”才能真正导入该jar包。才可以开始执行以下的步骤!
    在这里插入图片描述
导入驱动成功

为什么要导入这个jar包?

  • 有了这个包,你才可以愉快地使用JDBC操作MySQL数据库。
  • 里面提供了MySQL的实现类:com.mysql.jdbc.Driver
  • 但是要注意,JDBC规范定义驱动接口在java.sql.Driver,也就是你要操作数据库的所有方法都要在这个包下查找。

注册驱动法一:创建驱动对象

快速理解连接操作方式:

import com.mysql.jdbc.Driver;
import java.util.Properties;
import java.sql.Connection;
import java.sql.SQLException;

public class TempMain {
	// 连接数据库URL格式为:jdbc协议:数据库子协议:主机:端口/连接的数据库名
	// 和HTTP协议类似
	private static String url = "jdbc:mysql://localhost:3306/mydb";
	private static String user = "root";// 用户名
	private static String password = "root";// 密码
	
	//第一种方法:使用驱动程序去连接
	public static void main(String[] args) throws SQLException {
			//1.创建驱动程序类对象:
			//new不能是接口,而是实现类;实现类(要导包)在:com.mysql.jdbc.Driver里;
			Driver driver = new com.mysql.jdbc.Driver(); //新版本
			//Driver driver = new org.gjt.mm.mysql.Driver(); //旧版本
			
			//设置用户名和密码
			Properties props = new Properties();
			props.setProperty("user", user);
			props.setProperty("password", password);
			
			//2.连接数据库,返回连接对象
			Connection conn = driver.connect(url, props);
			System.out.println(conn);
			//输出:com.mysql.jdbc.JDBC4Connection@ba4d54,表明连接成功
	}
}

分析:
JDBC的URL格式:
在这里插入图片描述
JDBC规定url的格式由三部分组成,每个部分中间使用冒号分隔。

  1. 第一部分是jdbc,这是固定的;
  2. 第二部分是数据库名称,那么连接mysql数据库,第二部分当然是mysql了;
  3. 第三部分是由数据库厂商规定的,我们需要了解每个数据库厂商的要求,mysql的第三部分分别由数据库服务器的IP地址(localhost)、端口号(3306),以及DATABASE名称(mydb)组成。

如果连接的是本地的Mysql数据库,并且连接使用的端口是3306,那么的url地址可以简写为:

jdbc: mysql://数据库,
例如:jdbc: mysql://localhost:3306/mydb

注册驱动法二: 使用驱动管理器类连接数据库

快速理解使用方式

import com.mysql.jdbc.Driver;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class TempMain {
	// 连接数据库URL格式为:jdbc协议:数据库子协议:主机:端口/连接的数据库名
	// 和HTTP协议类似
	private static String url = "jdbc:mysql://localhost:3306/mydb";
	private static String user = "root";// 用户名
	private static String password = "root";// 密码

	// 第二种方法:使用驱动管理器类连接数据库
	public static void main(String[] args) throws SQLException {
		Driver driver = new com.mysql.jdbc.Driver();
		// Driver driver2 = new com.oracle.jdbc.Driver(); //Oracle数据库的连接

		// 1.注册驱动程序(可以注册多个驱动程序)
		DriverManager.registerDriver(driver);
		// DriverManager.registerDriver(driver2);
		//注意,通过查询驱动包中的Driver类的源码可知:该类的static代码块中已经执行了“DriverManager.registerDriver(driver);”,那么这就相当于注册了两次,冗余了

		// 2.连接到具体的数据库
		Connection conn = DriverManager.getConnection(url, user, password);
		System.out.println(conn);
		//输出:com.mysql.jdbc.JDBC4Connection@31b7dea0;表明连接成功
	}
}

不推荐使用这种注册方式:

  1. 硬编码,后期不易于程序扩展和维护
  2. 通过查询驱动包中的Driver类的源码可知:该类的static代码块中已经执行了“DriverManager.registerDriver(driver);”,那么这就相当于注册了两次,也就是在内存中会有两个Driver对象,冗余了
  3. 程序依赖mysql的api,脱离mysql的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦。

注册驱动法三: 使用加载驱动程序类来注册驱动程序

快速理解使用方式

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class TempMain {
	// 连接数据库URL格式为:jdbc协议:数据库子协议:主机:端口/连接的数据库名
	// 和HTTP协议类似
	private static String url = "jdbc:mysql://localhost:3306/mydb";
	private static String user = "root";// 用户名
	private static String password = "root";// 密码

	// 第三种方法:使用驱动管理器类连接数据库
	public static void main(String[] args) throws SQLException, ClassNotFoundException {
		// 1.通过得到字节码对象的方式加载静态代码块,从而注册驱动程序
		Class.forName("com.mysql.jdbc.Driver"); // 参数是字节码

		// 2.连接到具体的数据库
		Connection conn = DriverManager.getConnection(url, user, password);
		System.out.println(conn);
		//输出:com.mysql.jdbc.JDBC4Connection@50675690,表明连接成功
	}
}

底层原理:

  • 通常开发我们使用Class.forName() 加载一个使用字符串描述的驱动类。
  • 如果使用Class.forName()将类加载到内存,该类的静态代码将自动执行
  • 通过查询com.mysql.jdbc.Driver源码,我们发现Driver类“主动”将自己进行注册
  • 结论:推荐使用

建立连接

方法1:创建驱动对象

Driver driver = new com.mysql.jdbc.Driver(); //若new驱动对象
Connection conn = driver.connect(url, props); //则必须使用这种建立连接

方法2:使用加载驱动程序类来注册驱动程序

Class.forName("com.mysql.jdbc.Driver"); //加载驱动对象
Connection conn = DriverManager.getConnection(url, user, password); //加载获取连接
  • Connection是接口,DriverManager.getConnection()返回的是com.mysql.jdbc.JDBC4Connectiond的实现类。

Connection类的API详解

  • createStatement():创建向数据库发送sql的statement对象。
  • prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。
  • prepareCall(sql):创建执行存储过程的callableStatement对象。
  • setAutoCommit(boolean autoCommit):设置事务是否自动提交。
  • commit() :在链接上提交事务。
  • rollback() :在此链接上回滚事务。

DriverManager类功能详解

  1. DriverManager在JDBC规范中是类而不是接口。它是一个服务类,用于管理JDBC驱动程序,提供getConnection()方法建立应用程序与数据库的连接
  2. getConnection()是个静态方法。返回的是com.mysql.jdbc.JDBC4Connectiond的实现类。打印“conn”变量内容为:“com.mysql.jdbc.JDBC4Connectiond”
  3. DriverManager在java.sql包中。当我们调用sql包里不论什么一个类(包含接口)的不论什么一个方法时都会报一个编译时异常SQLException

创建statement去执行sql,获得结果

类型:
1、运行静态SQL语句。通常通过Statement实例实现。
2、运行动态SQL语句。通常通过PreparedStatement实例实现。
3、运行数据库存储过程。通常通过CallableStatement实例实现。

测试用的mysql语句

CREATE DATABASE mydb;

USE mydb;

CREATE TABLE person(
	p_id INT PRIMARY KEY,
	p_name VARCHAR(10),
	p_age INT
);

INSERT INTO person(p_id,p_name,p_age) VALUES
	(1,"asus",20),
	(2,"alibaba",40),
	(3,"huawei",50)

静态SQL:Statement

特性:

  1. java.sql.Statement接口,所有的操作方法也来自该接口;
  2. 在每次使用时,都是用“com.mysql.jdbc”包中的类来返回“java.sql.Statement”接口的引用

Statement接口提供了三种运行SQL语句的方法:executeQuery、executeUpdate 和execute。

  1. ResultSet executeQuery(String sqlString):运行查询数据库的SQL语句。返回一个结果集(ResultSet)对象。
  2. int executeUpdate(String sqlString):用于运行INSERT、UPDATE或DELETE语句以及SQL DDL语句,如:CREATETABLE和DROP TABLE等。返回影响作用的行数。
  3. boolean execute(sqlString):用于运行返回多个结果集、多个更新计数或二者组合的语句。
  4. ddBatch(String sql):把多条sql语句放到一个批处理中。
  5. executeBatch():向数据库发送一批sql语句执行。

学习例子:
https://github.com/Kyle-Shawe/JavaEE-Study-Notes/tree/master/01-JDBC/03-%E9%9D%99%E6%80%81SQL(Statement)%E7%9A%84CRUD

动态SQL:PreparedStatement

特性:

  1. 是“java.sql.Statement”接口的子接口
  2. 这个接口的实现类,在数据库的驱动中:“com.mysql.jdbc. JDBC4PreparedStatement”

方法详情:

  • int executeUpdate(); 执行PreparedStatement对象中预编译的SQL语句。返回执行成功的行数。 适用执行:insert、update、delete类的SQL语句;
  • executeQuery方法,适用于执行有返回结果集的SQL语句,例如select。

学习例子:
https://github.com/Kyle-Shawe/JavaEE-Study-Notes/tree/master/01-JDBC/04-%E5%8A%A8%E6%80%81SQL(PreparedStatement)%E7%9A%84CURD

处理结果

获取方法:

  • Object getObject(int index) / Object getObject(String name) 获得任意对象
  • String getString(int index) / Object getObject(String name) 获得字符串
  • int getInt(int index) / Object getObject(String name) 获得整形
  • double getDouble(int index) / Object getObject(String name) 获得双精度浮点型

遍历方法:

  • boolean next(); 将光标移动至下一行。当光标返回最后一行之后一行,或者为空,返回false。
  • Previous():移动到前一行
  • absolute(int row):移动到指定行
  • beforeFirst():移动resultSet的最前面。
  • afterLast() :移动到resultSet的最后面。

释放资源

操作完毕以后要把全部使用的JDBC对象全都关闭,以释放JDBC资源。关闭顺序和声明顺序相反
1、关闭记录集
2、关闭声明
3、关闭连接对象

关闭资源SOP:

	if(rs!=null)
	{ // 关闭记录集
		try {
			rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	if(stmt!=null)
	{ // 关闭声明
		try {
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	if(conn!=null)
	{ // 关闭连接对象
		try {
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JDBC(Java Database Connectivity)是Java语言访问关系型数据库的标准API,下面是JDBC编程的基本步骤: 1. 加载数据库驱动:使用Class.forName()方法加载数据库驱动程序。 2. 建立数据库连接:使用DriverManager.getConnection()方法建立与数据库的连接。 3. 创建SQL语句:使用SQL语句或PreparedStatement预处理语句操作数据库。 4. 执行SQL语句:使用Statement或PreparedStatement接口的execute()或executeUpdate()方法执行SQL语句。 5. 处理查询结果:使用ResultSet接口获取查询结果并进行相应的处理。 6. 关闭连接:使用Connection接口的close()方法关闭数据库连接。 以下是一个简单示例: ```java import java.sql.*; public class JDBCDemo { public static void main(String[] args) { Connection conn = null; Statement stmt = null; ResultSet rs = null; try { //1. 加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); //2. 建立数据库连接 String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String password = "123456"; conn = DriverManager.getConnection(url, user, password); //3. 创建SQL语句 String sql = "SELECT * FROM user"; //4. 执行SQL语句 stmt = conn.createStatement(); rs = stmt.executeQuery(sql); //5. 处理查询结果 while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); System.out.println("id: " + id + ", name: " + name); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { //6. 关闭连接 try { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } ``` 以上是JDBC编程的基本流程,当然在实际应用中还需要注意事务处理、连接池等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值