写在前面。
我们先来了解一下为什么探究mybatis之前要先了解jdbc呢?
MyBatis是一个优秀的持久层框架,它对jbdc的操作数据库的过程进行封装,使开发者本身只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
由上可以看出Mybatis的基础是基于JDBC,所以如果想彻底认知MyBatis的话,需要先了解一下JDBC。
一、认识JDBC
1、什么是JDBC
JDBC(Java Database Connectivity)翻译过了就是Java数据链接,其实就是通过Java语言操作数据库的一门技术。
2、JDBC的作用
如果只是自己练一练,我们通常可以通过CMD窗口来操作数据库,但在java开发中,更多的是通过Java程序来操作数据库,而JDBC就可以实现这样一个操作。
3、如何使用JDBC访问数据库
3.1、确定需求
创建一个个mytestdb1数据库,在库中创建一个stu表,并插入三条数据。然后利用Java程序查询处stu表中的所有数据,并打印出来。
3.2、实现步骤
准备数据,创建mytestdb1数据库,在库中创建stu表。
SHOW DATAbaseS; DROp DATAbase IF EXISTS mytestdb1; CREATE DATAbase IF NOT EXISTS mytestdb1 CHARSET utf8; USE mytestdb1; CREATE TABLE stu( id int PRIMARY KEY, name VARCHAR(20) UNIQUE, gender CHAR(1) NOT NULL, age INT ); INSERT INTO stu VALUES(1,'小明','男',22); INSERT INTO stu VALUES(2,'小白','男',27); INSERT INTO stu VALUES(3,'小黑','女',26); SELECT * FROM stu;
(1)创建JAVA工程
(2)导入jar包
文件–项目结构–模块–依赖–±-jar或目录–找到需要导入的包(因为我使用的是mysql8.0.23,所以需要使用的是与版本对应的包)–确认–显示在外部库
(4)创建类并实现JDBC程序(6个步骤)
//1.注册数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获取数据库连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mytestdb1?&useSSL=false&serverTimezone=UTC", "root", "root");
//3.获取传输器
Statement stat = conn.createStatement();
//4.利用传输器发送SQL到数据库执行,并返回执行结果
ResultSet rs = stat.executeQuery("select * from stu");
//5.处理结果:将表中所有的记录输出在控制台
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String gender = rs.getString("gender");
int age = rs.getInt("age");
System.out.println(id+" : "+name+" : "+gender+" : "+age);
}
//6.释放资源
rs.close();
stat.close();
conn.close();
3.3、执行结果
此处注意:
需要事先完成mysql的配置,如果是mac系统,需要手动添加配置文件,方法可以参考本专栏中的另外一篇文章:mac中手动添加mysql配置文件
4、JDBC小结
4.1、JDBC的由来
由于数据库厂商提供的数据库驱动(操作数据库的jar包)各不相同,导致开发人员的学习成本十分的高。因此SUN公司提出了JDBC这套规范,用来统一访问数据的标准。JDBC本质上是一套接口,SUN公司要求所有的数据厂商在设计驱动时都要实现JDBC这套标准。因此开发人员只要学会JDBC这套接口,所有的数据库驱动就都会使用了。
4.2、JDBC包的介绍
JDBC主要是由java.sql和javax.sql包组成的,并且这两个包已经被集成到J2SE的规范中了,这意味着只要一个普通的java程序就可以使用JDBC。
需要注意的是,JDBC包中大部分都是接口,因此在开发数据库程序时,除了如上的两个包,还需要手动的导入具体的数据库驱动。
5、JDBC开发细节
5.1、注册数据库驱动
Class.forName(“com.mysql.cj.jdbc.Driver”);
所谓的注册驱动,就是让JDBC程序加载mysql驱动程序,并管理驱动。
驱动程序实现了JDBC API定义的接口和数据库服务器交互的功能,加载驱动是为了方便使用这些功能。
这里需要注意一下,mysql8.0之前注册驱动是“com.mysql.jdbc.Driver”,没有中间的“cj”。
5.2、获取连接数据库的URL
Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/mytestdb1?&useSSL=false&serverTimezone=UTC", "root", "root");
DriverManager.getConnection()用于获取数据库连接,返回的Connection连接对象是JDBC程序连接数据库至关重要的一个对象。
参数2和参数3分别是所连数据库的用户名和密码。
参数1”jdbc:mysql://localhost:3306/mytestdb1”是连接数据库的URL,用于指定访问哪一个位置上的数据库服务器以及服务器中的哪一个数据库,其写法为:
当连接本地数据库,并且端口为3306时,可以简写为如下形式:
Jdbc:mysql:///mytestdb1
5.3、Statement传输器对象
Statement stat = conn.createStatement();
Statement传输器对象用于向数据库服务器发送sql语句,该对象上提供了发送sql的方法。如下:
executeQuery(String sql) //用于向数据库发送查询类的sql,返回一个ResultSet对象。
executeUpdate(String sql) //用于向数据库发送更新(增加、删除、修改)类型的sql语句,返回一个int值,表示影响的记录行数。
5.4、ResultSet结果集对象
Result对象用于封装sql语句查询的结果,也是一个非常重要的对象。该对象上提供了便利数据以及获取数据的方法。
(1)遍历数据行的方法
Next( ) //使指向数据行的索引向下移动一行
(2)获取数据的方法
getInt(int columnlndex) getInt(String columnLable) getString(int columnlndex) getString(String columnLable) GetDouble(int columnlndex) getDouble(String columnLable) getObject(int columnlndex) getObject(String columnLable) ……
5.5、释放资源
rs.close( ); stat.close( ); conn.close( );
此处释放资源必须按照一定的顺序释放,越晚获取的越先关闭。所以先关闭rs对象,再关闭stat对象,最后关闭conn对象。
另外,为了避免上面的程序抛出异常,释放资源的代码不会执行,应该把释放资源的代码放在finally块中。
try{
...
}catch(Exception e){
...
}finally{
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
rs = null;
}
}
if (stat != null) {
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
stat = null;
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
conn = null;
}
}
}



