JDBC产生的原因?
在解决实际问题中,我们编写的程序常常需要对数据库进行操作(如mysql、oracle等)。因为不同的数据库执行的细节不同,所以在java编程的时候对不同的数据库进行增删改查等操作时,需要编写不同的java代码。这样大大增加了编程的冗余度 和降低了代码的可用性。
综上,sun公司为了解决这个问题,编写了一套代码称为JDBC,提出了操作所有关系型数据库的规则。即程序员只要根据JDBC规则,就可以实现用一套代码,对多个不同的关系型数据库进行操作。
1.JDBC的概念
java数据库连接(Java DataBase Connectivity,JDBC)是java语言中用来规范客户端程序访问数据库的应用程序接口(api)。
(通俗来说:
JDBC是一套操作所有关系型数据库的规则,即接口;数据库对应的厂商去实现这套接口,提供数据库驱动jar包;程序员就可以使用这套规则(JDBC)编程,但是真正执行的代码是驱动jar包中的实现类。)
2.JDBC驱动程序
JDBC驱动程序在JDBC API中实现定义的接口,用于与数据库服务器执行交互。
比如:使用JDBC中定义的接口,可通过发送SQL或数据库指令,然后用java接受结果来建立数据库连接。实现与数据库进行交互。
3.JDBC API概述
JDBC API就是一个java API,可以访问任何类型表列数据,特别是存储在关系型数据中的数据,JDBC表示java数据库连接。
JDBC库中含有的API与数据库使用在:
连接数据库;
创建SQL语句;
执行SQL语句;
查看和修改数据库中的数据记录。
以下是一些常见的 JDBC API功能:
DriverManger:这个类是负责管理数据库驱动程序。驱动注册后会保存在DriverManger中的已注册列表中,后续处理就可以对该列表操作。使用通信自协议将来自java应用程序的连接请求与适当的数据库驱动程序匹配,负责加载各种不同驱动程序(Driver),并根据不同的请求,向调用者返回对应的数据库连接。
Driver:这是一个接口,用于处理与数据库服务器的通信。驱动程序,会将自身加载到Drivermanger中,处理相应的请求并返回相应的数据库连接(Connection)。
Connection:这个接口负责数据库连接,并与数据库通讯,SQL执行以及事务处理都是在这个特定的Connection环境中实现的。可产生执行sql语句的Statement对象,具有连接数据库的所有方法。注意:与数据库的所有通信只能通过connection对象。
Statement:这个接口创建对象用以执行SQL查询和更新针对静态Sql语句和单次执行,
PrepareStatement:用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)
ResultSet:在使用Statement对象执行SQL语句后,这些对象保存从数据库检索的数据。它作为一个迭代器并可移动ResultSet对象查询的数据。
CallabelStatement:用以调用数据库中的存储过程。
SqlException:表示在数据库连接的建立和关闭和SQL语句执行过程中发生了错误。
4.JDBC的一般步骤总结:
(1)导入对应的关系型数据库驱动包;
(2)注册驱动;
(3)创建对应的sql语句;
(4)创建sql 执行对象;
(5)执行sql语句;
(6)处理返回结果;
(7)释放变量;
代码展示:
package JDBC_statement;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
/*JDBC概念:
* Java数据库连接(JDBC)是java语言中用来规范客户端程序和访问数据库的应用接口,提供诸如查询和更新数据库中的数据方法。
* 通常说的JDBC是一种用于执行SQL语句的java API,支持为多种关系型数据库提供同意访问,JDBC是由一组
* 用java语言编写的类和接口组成的。
* 从根本上说,JDBC是一个规范,他提供了一整套接口,允许以一种可移植的访问底层
* 数据库API。java可以结合JDBC来编写不同类型的可执行文件
*/
// JDBC快速入门代码展示
public class JDBC_day1 {
public static void main(String[] args) throws Exception {
//注册驱动
Class.forName("com.mysql.jdbc.Driver"); //MYSQL55以上可直接省略
//2.获取连接
String url="jdbc:mysql://localhost:3306/test";
String username="root"; //我电脑中为mysql数据库环境的用户名为“root”
String password="1234"; //我电脑中mysql数据库环境的密码为“1234”
//前面已经完成了注册驱动,根据所学知识知道,注册完的的驱动保存在Drivermanger中,在调用
//Drivermanger中的静态方法getConnection建立数据库连接。
Connection conn=DriverManager.getConnection(url,username,password);
//4、创建sql执行对象
Statement stamt = conn.createStatement();
//定义sql语句
String sql="select * from `student`;";
//执行sql语句
ResultSet re =stamt.executeQuery(sql);
//处理结果
while(re.next()){
System.out.println(re.getString("name")+' '+ re.getString("age"));
}
//释放资源
stamt.close();
conn.close();
}
}
数据库中对应的数据:
在navicat中查看数据库中的数据:
java代码运行截图:
以上便完成了JDBC的快速入门。
接下来是JDBC API的功能简介:
1.DriverManger 驱动管理对象(管理驱动、获取连接对象等)
(1)注册驱动(第一步):
我们在注册驱动时会调用定义好的函数:static void registerDriver(Driver driver)。我们只需要知道有这个步骤就行。因为在实际编程过程中我们注册驱动(举例子是一个mysql驱动)都是利用java反射机制,使用:Class.forName("com.mysql.jdbc.Driver")语句完成。
(2)获取数据库连接:
我们在获取数据库连接对象时会调用 函数:static Connection getConnection(String url,String user,String password)。这个函数的返回值是一个Connection数据库连接对象。其中函数对应的参数分别为:
url:数据库连接路径。(jdbc:mysql://ip地址(域名):端口号/数据库名称)
user:用户名
password:密码
2.Connection数据库连接对象
(1)获取执行者对象:
执行者对象分为普通执行者对象和预编译执行者对象。
获取普通执行者对象:Statement createStatement();
获取预编译执行者对象:PreparedStatement prepareStatement(String sql);
(2)管理事务
开启事务:setAutoCommit(boolean autoCommit);参数为false,则开启事务;提交事务:commit();回滚事务:rollback();
(3)释放资源
立即将数据库连接对象释放:void close();
3.Statement执行sql语句的对象
(1)执行DML语句:int executeUpdate(String sql);
返回值:返回影响的行数
参数sql:可以执行insert、update、delete语句。
(2)执行DQL语句:ResultSet executeQuery(String sql);
返回值ResultSet:封装查询的结果。
参数sql:可以执行select语句
4.RestultSet执行sql语句的对象
(1)判断结果集中是否含有数据:boolean next();
有数据返回true,并将索引行下移动一行,没有数据返回false。
(2)获取结果集中数据的语法格式:结果的数据类型 get结果的数据类型(“列名”)
(3)释放资源:立即将结果集对象释放 void close();