1. 什么是JDBC?
ODBC的概念: Open Database Connectivity 开放的数据库连接, 它基于C语言开发
是微软倡导的、当前被业界广泛接受的、用于数据库访问的应用程序编程接口(API)
JDBC(Java DataBase Connectivity)是Java与数据库的接口规范,
JDBC定义了一个支持标准SQL功能的通用低层的应用程序编程接口(API),
它由Java 语言编写的类和接口组成,旨在让各数据库开发商为Java程序员
提供标准的数据库API。 JDBC API定义了若干Java中的类,表示数据库
连接、SQL指令、结果集、数据库元数据等。它允许Java程序员发送
SQL指令并处理结果。通过驱动程序管理器,JDBC API可利用不同的驱动
程序连接不同的数据库系统。
JDBC保持了ODBC的基本特性,也独立于特定数据库。使用相同源代码的应用程序
通过动态加载不同的JDBC驱动程序,可以访问不同的DBMS。连接不同的DBMS时,
各个DBMS之间仅通过不同的URL进行标识。JDBC的 DatabaseMetaData接口提供了一系列方法,
可以检查DBMS对特定特性的支持,并相应确定有什么特性,从而能对特定数据库的特性予以支持。
与ODBC一样,JDBC也支持在应用程序中同时建立多个数据库连接,
采用JDBC可以很容易地用SQL语句同时访问多个异构的数据库,
为异构的数据库之间的互操作奠定基础。
----但是,JDBC除了具有ODBC的上述特点外,更具有对硬件平台、操作系统异构性的支持。
这主要是因为ODBC使用的是C语言,而JDBC使用的是Java语言。
Java语言具有与平台无关、移植性强、安全性高、稳定性好、分布式、面向对象等众多优点,
而JDBC确保了“100%纯Java”的解决方案,利用Java的平台无关性,
JDBC应用程序可以自然地实现跨平台特性,因而更适合于Internet上异构环境的数据库应用。
那么:JDBC 是由SUN公司制定的一套用来访问数据库的标准接口,
所以,要通过JDBC去访问数据库,必须要数据库厂商或第三方来提供访问此数据库的驱动程序
而这些驱动程序也必须要实现JDBC规范
现在,我们来了解一下 JDBC的四种类型的驱动:
1. JDBC-ODBC bridge plus ODBC Driver
Provides JDBC access via ODBC drivers.
2. Native API partly Java Driver:
convert jdbc calls into calls on the native
3. JDBC-net pure java Driver
Translates JDBC calls into a DBMS independent net protocol,
which is then translated to a DBMS protocol by a server
4. Native protocol pure java driver :
把JDBC的调用直接转换成RDMBS的网络协议
---------------------------------------------------
Type 1: jdbc-odbc桥
Jdbc-odbc 桥 是sun公司提供的,是jdk提供的的标准api. 这种类型的驱动实际是把所有
jdbc的调用传递给odbc ,再由odbc调用本地数据库驱动代码.( 本地数据库驱动代码是指
由数据库厂商提供的数据库操作二进制代码库,例如在oracle for windows中就是oci dll 文
件)
jdbc-odbc桥
|
odbc
|
厂商DB代码---------------数据库Server
Type 2: 本地Api驱动
本地api驱动直接把jdbc调用转变为数据库的标准调用再去访问数据库.这种方法需要本地
数据库驱动代码.
本地api驱动
|
厂商DB代码---------------数据库Server
Type3:网络协议驱动
这种驱动实际上是根据我们熟悉的三层结构建立的. jdbc先把对数局库的访问请求传递给网
络上的中间件服务器. 中间件服务器再把请求翻译为符合数据库规范的调用,再把这种调用
传给数据库服务器.如果中间件服务器也是用java开法的,那么在在中间层也可以使用1,2型
jdbc驱动程序作为访问数据库的方法.
网络协议驱动---------中间件服务器------------数据库Server
Type4 本地协议驱动
这种驱动直接把jdbc调用转换为符合相关数据库系统规范的请求.
由于4型驱动写的应用可 以直接和数据库服务器通讯.
这种类型的驱动完全由java实现,因此实现了平台独立性.
--
JDBC是由SUN公司制定的一组标准数据库访问接口和类所组成,
它收录于JAVASE的API中,但是,JDBC规则却是属性JAVAEE范畴的。
它由两个包组成:
标准包:java.sql
定义了JDBC最核心的规范(interfaces)
扩展包:javax.sql
定义了JDBC2.0扩展的功能。【目前JDBC为4.0,基于JDK6.0】
--
JDBC 核心API
java.sql.Driver [I] 数据库驱动接口,由数据库厂商负责实现。
java.sql.DriverManger [C] SUN实现的数据库驱动管理类。
负责注册、删除驱动程序,并提供获取连接的方法。
java.sql.Connection [I] 代表数据库连接的接口
java.sql.Statement [I] 负责发送和执行SQL命令。
\- PreparedStatement [I] 支持预编译的SQL命令
\- CallableStatement[I] 可以调用存储过程
方法:
boolean execute(String sql); //执行任意SQL命令
ResultSet executeQuery(String selectSQL);
int executeUpdate(String dmlSQL);
java.sql.ResultSet [I] 如果执行的select命令,则会有结果集。
以上所有的接口都将由数据库厂商提供的驱动实现。
如果你安装了MySql数据库,
则在如下目录下可以找到MySql的驱动jar包。
com.mysql.jdbc.Driver
--
JDBC编程的6大步:
1.注册驱动
Code:
Class.forName("数据库驱动类全限定名");
//本质就是把驱动类加载进 JVM中。
注:不同的数据库,驱动类名不一样,比如:
Oracle -》 oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@localhost:1521:orcl
mysql -> com.mysql.jdbc.Driver
jdbc:mysql://127.0.0.1:3306/ja0218
DB2 -> xxx
Sql Server -> xxx
2.创建数据库连接
Code:
String url = "jdbc:mysql://127.0.0.1:3308/rj14?useUnicode=true&characterEncoding=UTF8";
String user = "jsd1211";
String pwd = "jsd1211";
Connection conn =
DriverManager.getConnection(url,user,pwd);
MySql数据库连接URL的格式是:
驱动类型:数据库类型:@主机地址:端口:数据库名
注:MySql默认连接端口是:3306
Oracle数据库连接URL的格式是:
主协议:次协议:驱动类型:@主机地址:端口:数据库名
注:ORACLE默认连接端口是:1521
3.创建Statement 对象.
Code:
Statement stmt = conn.createStatement();
//Statement是专门用来发送SQL命令的
4.执行sql命令 / 发送sql命令
Code:
String sql = "select id,name from s_dept";
//String sql2 =
"update s_emp set salary = salary+100 where id= 1";
ResultSet rs = stmt.executeQuery(sql); //查询
//int count = stmt.executeUpdate(sql2); //插入、更新、删除
//返回值 count:代表操作了几条数据 ,
//执行查询语句,会返回一个结果集
5.如果是查询语句,则处理结果集。
while(rs.next()){
//表示还有结果集,则取值
int id = rs.getInt(1); //写列的序号
//或:int id = rs.getInt("id"); //写 列名
}
6.释放资源
//如果有结果集,先关结果集
rs.close();
//再关 Statement
stmt.close();
//最后,关Connection
conn.close();
-- 6步精简如下:
//step1, register driver
//step2, Create Connection
//step3, Create Statement
//step4, execute SQL Command
//step5, if Select Statement, handler ResultSet
//step6, release Resources.