第九章:JDBC以及实现第一个JDBC程序

学习目标

一、学习JDBC

学习内容

1.什么是JDBC

JDBC的全称是Java数据库连接(Java Dalabase Connectivity),它是一套用于执行soL语句的Java API应用程序可通过这套API连接到关系型数据库,并使用SQL语句来完成对数据库中数据的查询、更新、新增和删除的操作。
不同种类的数据库(如MySQL、Oracle 等)在其内部处理数据的方式是不同的。如果直接使用数据库厂商提供的访问接口操作数据库,应用程序的可移植性就会变得很差。例如,用户当前在程序中使用的是MySQL提供的接口操作数据库,如果换成Oracle数据库,则需要重新使用Oracle数据库提供的接口,这样代码的改动量会非常大。有了JDBC后,这种情况就不复存在了,因为它要求各个数据库厂商按照统一的规范来提供数据库驱动,而在程序中是由JDBC 和具体的数据库驱动联系,所以用户就不必直接与底层的数据库交互,这使得代码的通用性更强。
JDBC在应用程序与数据库之间起到了一个桥梁作用。当应用程序使用,JDBC访问特定的数据库时,需要通过不同数据库驱动与不同的数据库进行连接,连接后即可对该数据库进行相应的操作作。

2.JDBC常用的API
在开发JDBC程序前,该包定义了一系列访问数据库的接口和关。常 用的API。JDBC API主要位于 java.sql包中,该包定义了一系列数据库的接口和类。

2.1 Driver 接口
Driver接口是所有JDBC驱动程序必须实现的接口,该接口专门提供给数据库厂商使用。锅要注意的是,在编写JDBC程序时,必须要把所使用的数据库驱动程序或类库加载到项目的classpath中(这里指MySQL驱动JAR包)。

2.2 DriverManager 类
DriverManager类用于加载JDBC驱动并且创建与数据库的连接。在DriverManager类中,定义了两个比较重要的静态方法。
在这里插入图片描述

2.3 Connection 接口
Connecion接按口代表Java程序和数据库的连接,只有获得该连接对象后才能访问数据库,并操作数据表。在Connection接口中,定义了一系列方法,其常用方法如下表所示:

在这里插入图片描述

2.4 Statement 接口
Statement接口用于执行静态的SQL语句,并返回一个结果对象,该接口的对象通过Connection实例的createStatement()方法获得。利用该对象把静态的SQL语句发送到数据库编译执行,然后返回数据库的处理结果。在Statement接口中,提供了3个常用的执行SQL语句的方法,具体如下表所示:

在这里插入图片描述

2.5 PreparedStatement 接口
Statement接口封装了JDBC执行SQL语句的方法,可以完成Java程序执行SQL语句的操作。然而,在实际开发过程中往往需要将程序中的变量作为SQL语句的查询条件,而使用Statement接口操作这些SQL语句会过于繁琐,并且存在安全方面的问题。针对这-问题,JDBCAPI提供了扩展的PreparedStatement接口。
在这里插入图片描述

PreparedStatement 是Statement的子接口,用于执行预编译的SQL语句。该接口扩展了带有参数SQL语句的执行操作,应用该接口中的SQL语句可以使用占位符“?”来代替其参数,然后通过setXxx()方法为SQL语句的参数赋值。在PreparedStatement接口中,提供了一些常用方法,具体如下表所示。

需要注意的是,表中的setDate()方法可以设置日期内容,但参数Date 的类型是javasal.Date,而不是javautil.Date.

2.6 ResultSet 接口
ResultSet接口用于保存JDBC执行查询时返回的结果集,该结果集封装在-一个逻辑表格中。在ResultSet接口内部有一个指向表格数据行的游标(或指针),ResultSet 对象初始化时,游标在表格的第1行之前,调用nex()方法可将游标移动到下一行。如果下一行没有数据,则返回false。在应用程序中经常使用next(方法作为WHILE循环的条件来迭代ResultSet结果集。ResultSet 接口中的常用方法如下表所示:
在这里插入图片描述

ResultSet 接口中定义了大量的getXxx()方法,而采用哪种getXxx()方法取决于字段的数据类型。程序既可以通过字段的名称来获取指定数据,也可以通过字段的索引来获取指定的数据,字段的索引是从1开始编号的。例如,数据表的第1列字段名为id,字段类型为int,那么既可以使用getin(1)字段索引的方式获取该列的值,也可以使用gltln(id)字段名称的方式获取该列的值。

3. 实现第一个JDBC程序
JDBC的使用可以按照以下几个步骤进行。

(1)加载并注册数据库驱动
注册数据库驱动的具体方式如下。

 DriverManager . registerDriver (Driver driver);
  或 
 Class. forName ("DriverName");

(2 )通过DriverManager获取数据库连接
获取数据库连接的具体方式如下。

Connection conn= Dr iverManager . getConnection(Stringurl, Stringuser, Stringpwd);

从上述代码可以看出, getConnection(方法中有3个参数,它们分别表示连接数据库的URL地址、登录数据库的用户名和密码。以MySQL数据库为例,其URL地址的书写格式如下。

jdbc:mysql://hos tname:port/databasename

上面代码中,jdbc:mysql:是固定的写法,mysql 指的是MySQL数据库。hostname 指的是主机的名称(如果数据库在本机中,hostname可以为localhost或127.0.0.1; 如果要连接的数据库在其他电脑上hostname为所要连接电脑的IP ), port 指的是连接数据库的端口号(MySQL端口号默认为306),而dabsenane指的是MySQL中相应数据库的名称。
(3) 通过Connection对象获取Statement对象
Connection 创建Statement的方式有如下3种。

cealetatement): 创建基本的Slatement对象。

prepareStatement():PreparedStatement 对象。

prepareCall(:创建allableStatement对象。

以创建基本的Salement对象为例,创建方式如下。

 Statement stmt一conn. createStatement();

(4)使用Statement执行SQL语
所有的Stalement都有如下3种执行SQL语句的方法。

execule(): 可以执行任何SQL语句。

exctueuery):通常执行查询语句,执行后返回代表结果集的ResulSet对象。. execueupate): 主要用于执行DML和DDL语句。执行DML语句,如INSERT、UPDATE或DELETE时,返回受SQL语句影响的行数,执行DDL语句返回0。

以executeQuery()方法为例,其使用方式如下。

//执行SQL语句,获取结果集ResultSet
ResultSet rs = stmt. executeQuery(sq1);

(5)操作ResultSet结果集
如果执行的SQL语句是查询语句,执行结果将返回一个ResultSet 对象,该对象里保存了SQL语句查询的结果。程序可以通过操作该ResultSet对象来取出查询结果。

(6)关闭连接,释放资源
每次操作数据库结束后都要关闭数据库连接,释放资源,包括关闭ResultSet、 Statement和Connection等资源。
至此,JDBC程序的大致实现步骤已经讲解完成。接下来,依照上面所讲解的步骤来演示JDBC的使用。该程序从users表中读取数据,并将结果打印在控制台。具体操作如下:
①搭建数据库环境
在MySQL中创建一一个名称为jdbc 的数据库,然后在该数据库中创建一一个users数据库和表的SQL语句如下所示:

在这里插入图片描述

数据库和表创建成功后,再向users表中插入3条数据,插入的SQL语句如下所示:
在这里插入图片描述

为了查看数据是否添加成功,使用SELECT语句查询users表中的数据,执行结果如图所示:
在这里插入图片描述

②搭建项目环境
在Eclipse中新建一一个名称为chapter09的Web项目,将下载好的MySQL的数据库驱动文件mysql-connector-java-5.0.8- bnjan复制到项目的ib目录中,并发布到类路径下(MsSQL驱动文件可以在其官网地址: ht:/:/v.mysal.om/downloadsco.e.cor/页面中下载在浏览器中输入该地址后即可进入下载页面,单击页面Generally Available (GA) Releases窗口中的Looking for previous GA versions超链接后,在显示出的下拉框中下载所需的驱动版本即可)
在这里插入图片描述
③编写JDBC程序
a.注册驱动
b.释放资源
在项目chapter09的srC目录下,新建一一个名称为cn.itcast.jdbc.example的包,在该包中创建类Example01,该类用于读取数据库中的users表,并将结果输出到控制台,如下图所示。
Example01.java

package cn.itcast.jdbc.example;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
 
public class Example01 {
   
 
	public static void main(String[] args) throws SQLException {
   
		Statement stmt  = null;
		ResultSet rs = null;
		Connection conn = null;
		try {
   
			//1.注册数据库驱动
			Class.forName("com.mysql.jdbc.Driver");
			//2.通过DriverManager获取数据库连接
			String url = "jdbc:mysql://localhost:3306/jdbc";
			String username = "root";
			String password = "123456";
			//3.通过Connection对象获取Statement对象
			//4.使用Statement执行SQL语句
			String sql = "select * from users";
			rs = stmt.executeQuery(sql);
			//5.操作ResultSet结果集
			System.out.println("id|name|password|email|brithday");
			while(rs.next()) {
   
				int id = rs.getInt("id");
				String name = rs.getString("username");
				String paw = rs.getString("password");
				String email = rs.getString("email");
				Date birthday = rs.getDate("birthday");
				System.out.println(id+"|"+name+"|"+paw+"|"+email+"|"+birthday);
			}
		}catch (ClassNotFoundException e) {
   
			e.printStackTrace();
		}finally {
   
			//回收数据库资源
			if(rs!=null) {
   
				try {
   
					rs.close(
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值