一(JDBC的编程步骤)
1.加载数据库驱动
加载数据库驱动通常使用class类的静态方法forName()来实现,具体实现方式如下:
Class.forName(“DriverName”),DriverName就是数据库驱动类所对应的字符串。
要加载MySQL数据库的驱动可以采用如下代码:
Class.forName("com.mysql.cj.jdbc.Driver");//MySQL8版本
Class.forName("com.mysql.jdbc.Driver");//MySQL5版本
加载Oracle数据库的驱动可以采用如下代码:
Class.forName("Oracle.jdbc.driver.OracleDriver");
从上面两种加载数据库驱动的代码可以看出,在加载驱动时所加载的并不是真正使用数据库的驱动类,而是数据库驱动类名的字符串。
2.通过DriverManage获取数据库连接。
DriverManage中提供了一个getConnection()方法来获取数据库连接,获取方式如下:
Connection con=DriverManage.getConnection(String url,String user,String pwd);
方法里面的三个参数分别表示连接数据库的url,登录数据库的用户名和密码。其中用户名和密码通常由数据库管理员设置,而连接数据库的url则遵循一定的写法。以MySQL数据库为例,其地址的书写格式如下:
url="jdbc:mysql://hostname:port/databasename";
eg:url="jdbc:mysql://localhost:3306/stu" ;
上面代码中,jdbc:mysql是固定写法,mysql指的是MySQL数据库。hostname表示主机名(如果数据库在本机上,hostname可以为localhost或者127.0.0.1,如果在其他机器上,hostname为所要连接机器的IP地址),port指的是连接数据库的端口号(MySQL端口号默认为3306)databasename指的是MySQL中相应数据库的名称。
3.通过Connection对象获取Statement对象。
Connection创建Statement的方式有以下3种:
(1):createStatement();创建基本的Statenment对象。
(2):prepareStatement(String sql);根据传递的SQL语句创建PrepareStatement对象。
(3): prepareCall(String sql);根据传递的SQL语句创建CallableStatement对象。
以创建基本的Statement对象为例,创建方式如下:
Statement stmt=con.createStatement();
4.使用Statement执行SQL语句。
所有的Statement都有如下三种执行SQL语句的方法。
(1):execute(String sql),用于执行任意的SQL语句。
(2):executeQuery(String sql):用于执行查询。返回一个ResuleSet结果集对象。
(3.executeUpdate(String sql):主要用于执行DML(数据操作语言)和DDL(数据定义语言)语句。执行DML语句(INSERT,UPDATE,DELETE)时会返回受SQL语句影响的行数,执行DDL(CREATE,ALTER)语句返回0。
以execyteQuery()方法为例,其使用方式如下:
ResultSet rs=stmt.executeQuery(sql);
5.操作ResultSet结果集。
如果执行的SQL语句是查询语句,执行结果将会返回一个ResultSet对象,该对象里保存了SQL语句查询的结果。程序可以通过操作该ResultSet对象来取出查询结果。
6.关闭连接,释放资源。
每次操作数据哭结束后都要关闭数据库连接,释放资源,以重复利用资源 。需要注意的是通常资源的关闭顺序与打开顺序相反,关闭资源顺序为:ResultSet,Statement(或PrepareStatement)和Connection。为了保证在异常情况下也能关闭资源。需要在try……catch的finally代码块中统一关闭资源。
二(案例展示)
从数据库中的数据表读取数据,并将结果打印在控制台。
(1):搭建数据库环境。
在MySQL数据库中创建一个名为jdbc的数据库,在该数据库下创建一个名称为tb_user的表,创建数据库和表的SQL语句如下:
create database jdbc;
use jdbc;
create table tb_user(
id int primary key auto_increment,
NAME varchar(40),
sex varchar(2),
email varchar(60),
birthday DATE
);
上述创建tb_user表时添加了id,NAME,sex,email,birthday5个字段,NAME字段名称为大写形式,是因为NAME在MYSQL数据库中属于关键字,为方便区分,所以将NAME字段名称全部用大写表示。
数据库和表创建成功后,再向tb_user表中添加3条数据,插入的SQL语句如下:
insert into tb_user(NAME,sex,email,birthday)
values ('Jack','男','jack@126,com','2000-08-01'),
('Tom','男','tom@126.com','1999-01-09'),
('Alice','女','alice@126,com','2001-05-06');
查看数据是否添加成功,使用select语句查询tb_user表中的数据,查询结果如下:
(2):创建项目环境,导入数据库驱动。
2.1 在项目中新建一个文件夹Directory,取名为lib,将数据库驱动文件JAR包mysql-connector-java-8.0.18复制在lib文件夹中(驱动下载地址,可进maven仓库)。
2.2 右键File-Project Structure-Libraries-+-Java-项目下lib包中的驱动包-ok-ok-ok-Apply-ok
2.3 编写JDBC程序
package jdbc;
import java.sql.*;
public class Demo1 {
public static void main(String[] args) throws SQLException {
Connection con=null;
Statement sta=null;
ResultSet res=null;
try {
//1.加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.通过DriverManage获取数据库连接
String url="jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=true";
String user="root";
String password="123456";
con= DriverManager.getConnection(url,user,password);
//3.通过Connection对象来获取Statement对象
sta= con.createStatement();
//4.使用Statement对象来执行SQL语句
String sql="select * from tb_user";
res= sta.executeQuery(sql);
//5.操作ResultSet结果集
System.out.println("id\tname\tsex\teamil\tbirthday");
while(res.next()){
//通过列名获取指定字段的值
int id=res.getInt("id");
String name=res.getString("name");
String sex=res.getString("sex");
String email=res.getString("email");
Date birthday=res.getDate("birthday");
System.out.println(id+"\t"+name+"\t"+sex+"\t"+email+"\t"+ birthday);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
//6.关闭连接,释放资源
if(res!=null){res.close();}
if(sta!=null){sta.close();}
if(con!=null){con.close();}
}
}
}
该案例中,首先注册了MySQL数据库驱动,通过DriverManage获取一个Connection对象,然后使用Connection对象创建一个Statement对象,Statement对象通过executeQuery(String sql)方法执行了SQL语句,并返回结果集ResultSet,接下来遍历ResultSet得到查询结果并输出,最后关闭连接,释放数据库资源。