JDBC技术
1、JDBC简介
大型网站是离不开数据库的,使用JDBC技术链接数据库
JDBC:java Data Base Connectivity,使用JDBC连接数据库后数据库的增/删/改/查及批处理等操作
JDBC是java程序与数据库系统通信的标准API,定义在JDK的API中,JDBC在java程序和数据库系统之间建立了桥梁
java程序<------->JDBC API<--------->数据库驱动<--------->数据库系统
2、JDBC连接数据库的流程
1)注册数据库驱动
连接数据库需要将数据库厂商提供的数据库驱动类注册到JDBC的驱动管理器中,通常是将数据库驱动类加载到JVM虚拟机。
Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动,注册到驱动管理器
2)构建数据库连接URL
这个URL一般由数据库厂商制定,不同的数据库的URL不同,但基本的格式都是;JDBC协议+IP地址或域名+端口+数据库名称。
MySQL数据库的URL的字符串为:"jdbc:mysql://localhost:3306/db_admin"; //db_admin是本地创建的一个数据库名称
3)获取Connection对象
在前两步完成后,即可通过驱动管理器获取数据库的Connection对象,该对象是JDBC封装的数据库连接对象,创建此对象后才可以对数据库执行相关操作
DriverManager.getConnection(url,userName,password);
获取Connection对象需要DriverManager对象,该对象的getConnection()方法提供数据库连接URL,数据库用户名和密码创建Connection对象
提示:JDK中不包含数据库的驱动程序,使用JDBC操作数据库需要事先下载数据库厂商提供的驱动包,由于使用的是mysql数据库,故添加的是MySQL官方提供的数据库驱动包
为:mysql-connector-java-5.1.20-bin.jar //数据库驱动包
JDBC -------> jar包(驱动包) ---------> 操作数据库
try{
Class.forName("com.mysql.jdbc.Driver");
String URL = "jdbc:mysql://localhost:3306/db_admin";
String userName = "root";
String password = "123";
Connection connection = DriverManager.getConnection(URL,userName,password);
if(connection!=null){
System.out.println("数据库连接成功");
}else{
System.out.println("数据库连接失败");
}
}catch(exception ee){
System.out.println(ee);
}
3、JDBC的核心API
JDBC核心API主要包括5个接口:
数据库连接接口Connection
驱动程序管理类 DriverManager
执行SQL语句的Statement接口 :执行静态SQL语句
预编译SQL语句的PreparedStatement接口:执行动态SQL语句
结果集ResultSet接口
DriverManager.getConnection()-----------> Connection -------> Connection.createStatement()----> Statement对象
1)DriverManager类
负责管理JDBC驱动程序的基本服务,是JDBC的管理层,作用于用户和驱动程序之间,负责跟踪可用的驱动程序,并在数据库和驱动程序之间建立连接。
该类也处理诸如驱动程序登录时间限制,以及显示登录和跟踪消息等,成功加载Driver类并在DriverManager类中注册后,DriverManager类即可建立数据库连接
当调用DriverManager类的getCoonnection()方法请求建立数据库连接时,该类将试图定位一个适当的Driver类,并检查定位到的Driver类是否可以建立连接,如果可以
则建立连接并返回。否则抛出SQLException异常。
该类主要方法:
getConnection(String url,String user,String password)
根据指定数据库连接的url和用户名、密码建立数据库连接
getDrivers()
获取当前DriverManager中已加载的所有驱动程序,返回值为:Enumeration类型
deregisterDriver(Driver driver)
从DriverManager的管理列表删除一个驱动程序。
registerDriver(Driver driver)
向DriverManager注册一个驱动对象,参数driver为要注册的驱动
2)代表数据库连接的Connection接口
Connection接口用于创建数据库的链接会话,只有获得该连接对象后才能访问数据库,并操作数据库
方法:
close() 关闭连接,释放系统资源
createStatement() 创建一个Statement对象
isClosed() 检索此Connection对象是否已经被关闭
preparedStatement(String sql) 创建一个PreparedStatement对象来将参数化的SQL语句发送到数据库
3)执行SQL语句的Statement接口
Statement接口用于执行静态的SQL语句,并返回一个生成结果的对象。利用该接口对象把静态的SQL语句发送到数据库编译执行,然后返回数据库的处理结果
方法:
close() 释放此Statement对象的数据库和JDBC资源
execute(String sql) 执行给定的SQL语句,该语句可能返回多个结果
addBatch(String sql) 向Batch中添加待执行的SQL语句
executeBatch() 将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组
executeQuery(String sql) 执行给定的SQL语句,该语句返回单个ResultSet对象
executeUpdate(String sql) 执行给定的SQL语句,该语句可能为insert update delete
4)预编译SQL语句的PreparedStatement接口
使用占位符"?"代替参数,通过setXX()为SQL语句的参数赋值
execute()
executeQuery()
executeUpdate()
setBoolean(int parameterIndex,boolean x) 将指定参数设置为给定的java Boolean值
setByte(int parameterIndex,byte x)
setDate(int parameterIndex,Date x)
setInt(int parameterIndex,int x) //为SQL语句的第parameterIndex个参数赋值为x
setString(int parameterIndex,String x)
5)结果集ResultSet接口
ResultSet接口保存JDBC执行查询时返回的结果。该结果集与数据库字段相对应。由行和列组成,并且在ResultSet结果集的行上提供指针,最初指针指向结果集的第一行之前
调用next()方法可将指针移动到下一行,如果下一行没有数据,则返回false,一般对结果遍历通过while()循环
方法:
afterLast() 将指针移到此ResultSet对象的末尾,位于最后一行之后
beforeFirst() 将指针移到此ResultSet对象的开头,位于第一行之前
close() 立即释放此ResultSet对象的数据库和JDBC资源
first() 将指针移到此ResultSet对象的第一行
getFloat(int columnIndex) 用float的形式检索ResultSet对象的当前行中指定列的值
getInt(int columnIndex) 用Int的形式检索ResultSet对象的当前行中指定列的值
getString(int columnIndex) 用String的形式检索ResultSet对象的当前行中指定列的值
next() 将指针从当前位置下移一行,常用while循环的迭代条件
absolute(int row) 将指针移到此 ResultSet对象的给定行编号
提示:里面的索引都是从1开始,不同于数组
在执行deleteRow()方法时并不将操作同步到数据库,而是在关闭ResultSet结果集时同步到数据库
建议每次操作数据库结束后,依次关闭ResultSet Statement Connection
虽然直接关闭Statement实例也会关闭相关的ResultSet实例,并且JVM虚拟机的垃圾回收机制会定时清理缓存并关闭长时间不用的数据库连接,但是如果关闭不及时
数据库连接达到一定数量,将严重影响数据库和计算机的运行速度,甚至瘫痪
6)JSP连接数据库操作
A:安装好Mysql数据库,下载驱动包:mysql-connector-java-5.1.20-bin.jar,根据数据库的版本下载对应的驱动包
B:把mysql-connector-java-5.1.20-bin.jar放到tomcat服务器的lib文件夹下
C:使用jsp程序访问数据库时一定要导入的包:java.sql.*
D:使用服务器自带的jar包以及JREjar包