黑马程序员技术交流社区
标题:
【南京校区】JDBC详解
[打印本页]
作者:
大蓝鲸Java
时间:
2019-3-29 11:59
标题:
【南京校区】JDBC详解
JDBC详解
MySQL
只能识别
SQL
语句,我们用
Java
代码不能直接操作,而
JDBC
的出现就解决了这一难题。而
JDBC
在开发中出
现的身影是非常多的,比如我们目前最为常用的框架
Mybatis
,底层就是基于
JDBC
,所以我们必须要对
JDBC
有较深
的了解。
1
,
JDBC
的步骤:
1
,加载驱动。
2
,获得连接。
3
,获得执行者对象。
4
,执行
sql
语句。
5
,处理结果集。
6
,释放资源。
原生的
JDBC
上面的
6
步缺一不可。
只不过针对于增删改而言,结果集只是一个
int
值,表示受影响的行数。
针对于查询来讲,结果集才有丰富的意义,表示我们查询到的所有的数据。
2
,分步介绍:
2.1 Connection
Connection
表示与特定数据库的连接,可以获取到数据库的一些信息,这些信息包括:其表信息,应该支持的
SQL
语法,数据库内有什么存储过程,此链接功能的信息等等。
2.2 Statement
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
Statement
的功能在于根据传入的
sql
语句,将传入
sql
经过整理组合成数据库能够识别的
sql
语句
(
对于静态的
sql
语
句,不需要整理组合;而对于预编译
sql
语句和批量语句,则需要整理
)
,然后传递
sql
请求,之后会得到返回的结
果。对于查询
sql
,结果会以
ResultSet
的形式返回。
要注意的是,针对于
sql
语句不同,我们用
Statement
调用的方法也是不一样的。
executeQuery(String sql)
:该方
法只能用于查询,返回一个
ResultSet
的结果集。
executeUpdate(String sql)
:该方法可以用户增删改,返回一个
int
,表示受影响的行数。除此之外,如果需要处理多条语句,还有一个批处理的功能。
addBatch(String sql)
。
但是要注意的是这个方法的
sql
语句顺序不能上下颠倒,
sql
语句先添加的先执行。
2.3 ResultSet
当
Statement
查询
sql
执行后,会得到
ResultSet
对象,
ResultSet
对象是
sql
语句查询的结果,作为数据库结果的映
射,其映射关系如下图所示。
ResultSet
对从数据库返回的结果进行了封装,使用迭代器的模式逐条取出结果集中
的记录。
三,具体实现案例:
需求:
利用
JDBC
查询
employee
表中所有的数据。
代码示例:
DBConnection
{
static final
String
URL
=
"jdbc:mysql://127.0.0.1:3306:
数据库
1"
;
static final
String
USER_NAME
=
"username"
;
static final
String
PASSWORD
=
"password"
;
public static
void
main
(
String
[]
args
) {
connectionTest
();
}
public static
void
connectionTest
(){
Connection connection
=
null
;
Statement statement
=
null
;
四,总结:
Connection connection
=
null
;
Statement statement
=
null
;
ResultSet resultSet
=
null
;
try
{
//1.
加载类,并注册驱动器(
Driver
会注册到
DriverManager
中)
//
加载数据库驱动
Class
.
forName
(
"mysql.jdbc.driver"
);
//2.
根据特定的
URL
,返回可以接受此
URL
的数据库驱动对象
Driver driver
=
DriverManager
.
getDriver
(
URL
);
Properties props
=
new
Properties
();
props
.
put
(
"user"
,
USER_NAME
);
props
.
put
(
"password"
,
PASSWORD
);
//3.
使用数据库驱动创建数据库连接
Connection
会话
connection
=
driver
.
connect
(
URL
,
props
);
//4.
获得
Statement
对象
statement
=
connection
.
createStatement
();
//5.
执行
sql
语句,返回结果
resultSet
=
statement
.
executeQuery
(
"select * from employees"
);
//6.
处理结果,取出数据
while
(
resultSet
.
next
()){
System
.
out
.
println
(
resultSet
.
getString
(
2
));
}
/
/7.
关闭链接,释放资源
}
catch
(
ClassNotFoundException e
) {
System
.
out
.
println
(
"
加载
Oracle
类失败!
"
);
e
.
printStackTrace
();
}
catch
(
SQLException e
) {
e
.
printStackTrace
();
}
catch
(
InstantiationException e
) {
e
.
printStackTrace
();
}
catch
(
IllegalAccessException e
) {
e
.
printStackTrace
();
}
finally
{
//
使用完成后管理链接,释放资源,释放顺序应该是:
ResultSet ‐>Statement ‐>Connection
try
{
resultSet
.
close
();
}
catch
(
SQLException e
) {
e
.
printStackTrace
();
}
t
ry
{
statement
.
close
();
}
catch
(
SQLException e
) {
e
.
printStackTrace
();
}
t
ry
{
connection
.
close
();
}
catch
(
SQLException e
) {
e
.
printStackTrace
();
}
}
}
}
JDBC是Java提供的一个接口,在这些接口中规定了一些方法,但是这些方法中并没有给出具体的方法实现。而这些方法的实现是由数据库生成厂商自己提供的。这样,我们在学习的时候,只要学习一套Java提供的规范接口,就可以任意操作
MySQL
,
oracle
,
SQLServer
等不同的数据库了,而不需要关心底层的实现细节。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2