JDBC简介
l
数据库驱动
SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC

l
JDBC
全称为:
Java Data Base Connectivity
(
java
数据库连接),它主要由接口组成。
l
组成
JDBC
的2个包:
l
java.sql
l
javax.sql
l
开发
JDBC
应用需要以上
2
个包的支持外,还需要导入相应
JDBC
的数据库实现
(
即数据库驱动
)
。
第一个JDBC程序
l
编写一个程序,这个程序从
user
表中读取数据,并打印在命令行窗口中。
一、搭建实验环境 :
1、在mysql中创建一个库,并创建user表和插入表的数据。
2、新建一个Java工程,并导入数据驱动。
二、编写程序,在程序中加载数据库驱动
DriverManager.registerDriver(Driverdriver)
三、建立连接(Connection)
Connection conn = DriverManager.getConnection(url,user,pass);
四、创建用于向数据库发送SQL的Statement对象,并发送sql
Statement st =conn.createStatement();
ResultSetrs =st.excuteQuery(sql);
五、从代表结果集的ResultSet中取出数据,打印到命令行窗口
六、断开与数据库的连接,并释放相关资源
程序详解—DriverManager
l
Jdbc
程序中的
DriverManager
用于加载驱动,并创建与数据库的链接,这个
API
的常用方法:
•
DriverManager.registerDriver
(new Driver())
•
DriverManager.getConnection
(
url
, user, password)
,
•
l
注意:在实际开发中并不推荐采用
registerDriver
方法注册驱动。原因有二:
一、查看Driver的源代码可以看到,如果采用此种方式,会导致驱动程序注册两次,也就是在内存中会有两个Driver对象。
二、程序依赖mysql的api,脱离mysql的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦。
•
推荐方式:
Class.forName
(“
com.mysql.jdbc.Driver
”);
•
采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要依赖具体的驱动,使程序的灵活性更高。
•
l
同样,在开发中也不建议采用具体的驱动类型指向
getConnection
方法返回的
connection
对象。
其实还有另一种注册驱动的方式:System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver");若要注册多个驱动,在第二个参数后直接加驱动名字,用":"隔开
如:System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver:oracle.jdbc.driver.OracleDriver");
数据库URL
l
URL
用于标识数据库的位置,程序员通过
URL
地址告诉
JDBC
程序连接哪个数据库,
URL
的写法为:

l
常用数据库
URL
地址的写法:
•
Oracle
写法:
jdbc:oracle:thin
:@localhost:1521:sid
•
SqlServer
—
jdbc:microsoft:sqlserver
://localhost:1433;
DatabaseName
=
sid
•
MySql
—
jdbc:mysql
://localhost:3306/
sid
l
Mysql
的
url
地址的简写形式:
jdbc:mysql
:///
sid
l
常用属性:
useUnicode
=
true&characterEncoding
=UTF-8
程序详解
—Connection
l
Jdbc
程序中的
Connection
,它用于代表数据库的链接,
Collection
是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过
connection
对象完成的,这个对象的常用方法:
•
createStatement
()
:创建向数据库发送
sql
的
statement
对象。
•
prepareStatement
(
sql
)
:创建向数据库发送预编译
sql
的
PrepareSatement
对象。
•
prepareCall
(
sql
)
:创建执行存储过程的
callableStatement
对象。
•
setAutoCommit
(
boolean
autoCommit
)
:设置事务是否自动提交。
•
commit()
:在链接上提交事务。
•
rollback()
:在此链接上回滚事务。
程序详解
—Statement
l
Jdbc
程序中的
Statement
对象用于向数据库发送
SQL
语句,
Statement
对象常用方法:
•
executeQuery
(String
sql
)
:用于向数据发送查询语句。
•
executeUpdate
(String
sql
)
:用于向数据库发送
insert
、
update
或
delete
语句
•
execute(String
sql
)
:用于向数据库发送任意
sql
语句
•
addBatch
(String
sql
)
:把多条
sql
语句放到一个批处理中。
•
executeBatch
()
:向数据库发送一批
sql
语句执行。
程序详解
—
ResultSet
l
Jdbc
程序中的
ResultSet
用于代表
Sql
语句的执行结果。
Resultset
封装执行结果时,采用的类似于表格的方式。
ResultSet
对象维护了一个指向表格数据行的
游标,
初始的时候,游标在第一行之前,调用
ResultSet.next
()
方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
l
ResultSet
既然用于封装执行结果的,所以该对象提供的都是用于获取数据的
get
方法:
•
获取任意类型的数据
•
getObject
(
int
index)
•
getObject
(string
columnName
)
•
获取指定类型的数据,例如:
•
getString
(
int
index)
•
getString
(String
columnName
)
•
提问:数据库中列的类型是
varchar
,获取该列的数据调用什么方法?
Int
类型呢?
bigInt
类型呢?
Boolean
类型?
常用数据类型转换表
程序详解
—
ResultSet
l
ResultSet
还提供了对结果集进行滚动的方法:
•
next()
:移动到下一行
•
Previous()
:移动到前一行
•
absolute(
int
row)
:移动到指定行
•
beforeFirst
()
:移动
resultSet
的最前面。
•
afterLast
()
:移动到
resultSet
的最后面。
程序详解
—
释放资源
l
Jdbc
程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是
ResultSet
,Statement
和
Connection
对象。
l
特别是
Connection
对象,它是非常稀有的资源,用完后必须马上释放,如果
Connection
不能及时、正确的关闭,极易导致系统宕机。
Connection
的使用原则是尽量晚创建,尽量早的释放。
l
l
为确保资源释放代码能运行,资源释放代码也一定要放在
finally
语句中。
使用
JDBC
对数据库进行
CRUD
l
Jdbc
中的
statement
对象用于向数据库发送
SQL
语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可。
l
l
Statement
对象的
executeUpdate
方法,用于向数据库发送增、删、改的
sql
语句,
executeUpdate
执行完后,将会返回一个整数
(
即增删改语句导致了数据库几行数据发生了变化
)
。
l
l
Statement.executeQuery
方法用于向数据库发送查询语句,
executeQuery
方法返回代表查询结果的
ResultSet
对象。
PreparedStatement
l
PreperedStatement
是
Statement
的孩子,它的实例对象可以通过调用
Connection.preparedStatement
()
方法获得,相对于
Statement
对象而言:
•
PreperedStatement
可以避免
SQL
注入的问题。
•
Statement
会使数据库频繁编译
SQL
,可能造成数据库缓冲区溢出。
PreparedStatement
可对
SQL
进行预编译,从而提高数据库的执行效率。
•
并且
PreperedStatement
对于
sql
中的参数,允许使用占位符的形式进行替换,简化
sql
语句的编写。
数据库分页
l
MySQL
分页的实现:
•
Select * from table limit M,N
•
M
:记录开始索引位置
•
N
:取多少条记录。
l
完成
WEB
页面的分页显示
•
先获得需分页显示的记录总数,然后在
web
页面中显示页码。
•
根据页码,从数据库中查询相应的记录显示在
web
页面中。
以上两项操作通常使用
Page
对象进行封装
select* from (
select rownum r_,row_.*from (
select * from studentorderby id
) row_ where rownum<=5
) where r_>=1
1位置:起始索引位置。
5位置:结束索引位置。
//本文及后续两篇源自传智播客