JDBC学习之基本概念
2009-03-01 09:57
162 查看
一、第一章 基本概念
1、JDBC是什么?能做什么?
JDBC是java访问数据库的基本接口(底层接口);包括 j2se, j2ee
高级的框架或手段 Hibernate,EJB 也是基于jdbc的。
JDBC的功能:
1)可以连接数据库;(服务器) 提供java到数据库的连接;
2)通过SQL命令来操作数据库;JDBC 借助于标准查询语言对数据库进行增删改查;
3)JDBC提供对结果集的封装和处理;
4)支持事务的操作;
2、JDBC产生的背景和基本结构(工作原理):
1)背景:
JDBC应该算是企业的特性,但是放在j2se文档里;
JDBC应该算是java最早的企业级的应用;但是当时还没有j2ee,就放在j2se里了;
因为作为通用的语言必须具有访问数据库的能力,所以在java推出时就有了JDBC;
2)原理:
JDBC仿照ODBC写的;ODBC用类C(C,C++)语言写的;
两层结构:
一层是面向java程序员;
一层是面向驱动程序/driver开发人员:
3)什么是驱动程序?
驱动程序就是将 接口的一致性,实现的多样性 结合起来;
例 :
显卡的驱动,主板上有一个显卡的插槽(公共接口,针脚排列);
操作系统来调用显卡时,只需通过驱动程序来操作那块显卡;
各个厂商的显卡是不同的,但是驱动程序都实现了这个接口;
JDBC是插槽,数据库就是显卡;
驱动程序代表实现;特点是多样性;不同的驱动就是将JDBC和不同的数据库结合起来;
JDBC是一套规范/协议;物理上是JAVA接口集;突出的特点是一致性;
4) 协议:
体现的是sun公司(java程序员)和数据库厂商(驱动的开发者)的协议;
是调用者和实现者的协议;前者是按照规范去调用;后者是按照规范实现;
sun公司定义规范;java程序员写代码调用,数据库厂商实现规范;
为什么JDBC具有一致性?
接口就是实现者和调用者之间的协议,保证一致性;接口不能修改原来的定义,只能增加;
5) 总结:
JDBC是一个由java接口组成的接口集,代表了实现者(数据库厂商)和调用者(java程序员)之间的协议;
只能让操作看起来一致,并没有实现;真正去工作的是驱动;
接口例子:
螺钉、螺母,有工业规范规定的,也是接口;
遥控器,使用者和实现者的分离;实现者工作比使用者相对复杂;
程序、驱动、jdbc接口一起才能有效的工作;
人、电视、遥控器 一起才是看电视;
3、JDBC Driver的四种类型:(不管是哪个厂商的,按照历史发展顺序)
1) JDBC-ODBC桥 驱动:
由ODBC驱动提供JDBC访问;
每年都有很多计算机语言诞生,但是不久就灭亡了;
刚开始,数据库厂商也不是很看好java这门语言;不是很想写驱动;
但是j2se中有jdbc的规范;必须得实现,sun公司很巧妙的利用了ODBC(c 访问数据库的驱动),
当时ODBC所有的数据库都能访问;将JDBC翻译成了ODBC;
应用程序--> JDBC--> 桥--> ODBC-->数据库
安全性不是很好(java的安全性建立在jvm上), 效率也不高(翻译);
2) 本地API 部分java驱动:
部分Java driver把JDBC调用转化成本地的客户端API
如果代码调用了windows的系统调用,就是windows本地调用;
应用程序--> JDBC -->JVM/OS --> 数据库
速度还可以,但是不是纯java的;
3) JDBC-net :纯java驱动;
纯的Java driver,将JDBC调用转入DBMS,与网络协议无关。然后通过服务器将调用转为DBMS协议。
没有直接访问数据库,访问了中间服务器;
应用程序--> JDBC--> 驱动--> 访问中间服务器--> 数据库
本地协议,数据库服务器的应用层协议;
中间协议,中间服务器的协议;
安全性还可以,但是协议,网络造成了效率的降低;
4) 纯 java 本地协议:
纯的java driver,将JDBC调用直接转为DBMS使用的网络协议
应用程序--> JDBC--> 驱动-(本地协议)-->数据库(内置对jvm的支持)
安全性没有问题,效率也高了;数据库厂商作出了努力;
现在我们用的就是这种驱动;
4、开发者接口的内容:
驱动程序, 有很多类,但有一个主类,实现java.sql.Driver接口,手动加载这个类;
两个包:java.sql.*;//主要接口包;
javax.sql.*;//扩展功能包;j2ee版
JDBC 贯穿课程,以后Hibernate, EJB,Spring 都要用;
Driver :接口,代表驱动程序;
DriverManager:工具类,辅助管理驱动程序的;并不是规范里的内容;规范里只有接口;
Connection:接口,连接数据库,代表和数据库的物理连接;某种意义上代表数据库本身;事务也由它代表;
Statement:接口,操作数据库的对象,发送 sql语句
PreparedStatement:Statement子接口,预编译Statement,开发中主要用这个;
CallableStatement:Statement子接口,调用数据库的存储过程,用的比较少;数据库之间的存储过程是不通用的;
ResultSet:接口,结果集,代表对数据库的查询结果,并且提供处理结果的方法;
DataBaseMetadata:接口,代表原数据,数据库原数据
ResultMetadata:接口,代表原数据,结果集原数据
Types:类,辅助的类,代表JDBC类型,定义了很多整数类型的常量;是标准SQL类型的子集;
数据库:例 :vachar=12,number=2
5、访问数据库:
0) 加载驱动; 反射的方法;
1) 连接数据库;
2) 操作数据库;
3) 返回结果集:ResultSet
4) 关闭数据库连接;
Oracle的Driver的全名oracle.jdbc.driver.OracleDriver
mysql的Driver的全名com.mysql.jdbc.Driver
SQLServer的Driver的全名com.microsoft.jdbc.sqlserver.SQLServerDriver
Class.forName("oracle.jdbc.driver.OracleDriver");//Oracle的驱动,实现了Driver接口;
DriverManager.getConnection(url:String,username:String,passwd:String);
没有用驱动直接去要连接,而是用了一个驱动管理员,是为了更灵活,以后会细讲,这里先知道;
url:协议,ip地址,端口号; jdbc:oracle:thin:@192.168.0.201:tarena
Statement 从Connection 来的; stmt = con.createStatement();
例子:
public static void main(String[] args)
{
Connection con = null;// 接口不能直接new
Statement st = null;
ResultSet rs = null;
try
{
//1、 加载驱动;
Class.forName("oracle.jdbc.driver.OracleDriver");
//2、获取连接;实现类在驱动程序里;
con = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.201:1521:tarena",
"xjh0704", "xjh0704");
//3、操作数据库;插入一条记录
stmt = con.createStatement();
stmt.executeUpdate("insert into ln_student values(4,'langna','shanghai')");
}catch(Exception e){
e.printStackTrace();
}finally{
//4、关闭连接;判断是否为空,然后关闭;
try{
if(con!=null) con.close();
}catch(SQLException ex){
ex.printStackTrace();
}
}
}
DriverManager 可以得到多个连接对象 Connection ,一个连接对象可以获取Statement对象;
DriverManager --Driver--Connection--Statement --ResultSet
类比: 经理 --工程师-- 连线-- -- 电话---- 电话记录
1、JDBC是什么?能做什么?
JDBC是java访问数据库的基本接口(底层接口);包括 j2se, j2ee
高级的框架或手段 Hibernate,EJB 也是基于jdbc的。
JDBC的功能:
1)可以连接数据库;(服务器) 提供java到数据库的连接;
2)通过SQL命令来操作数据库;JDBC 借助于标准查询语言对数据库进行增删改查;
3)JDBC提供对结果集的封装和处理;
4)支持事务的操作;
2、JDBC产生的背景和基本结构(工作原理):
1)背景:
JDBC应该算是企业的特性,但是放在j2se文档里;
JDBC应该算是java最早的企业级的应用;但是当时还没有j2ee,就放在j2se里了;
因为作为通用的语言必须具有访问数据库的能力,所以在java推出时就有了JDBC;
2)原理:
JDBC仿照ODBC写的;ODBC用类C(C,C++)语言写的;
两层结构:
一层是面向java程序员;
一层是面向驱动程序/driver开发人员:
3)什么是驱动程序?
驱动程序就是将 接口的一致性,实现的多样性 结合起来;
例 :
显卡的驱动,主板上有一个显卡的插槽(公共接口,针脚排列);
操作系统来调用显卡时,只需通过驱动程序来操作那块显卡;
各个厂商的显卡是不同的,但是驱动程序都实现了这个接口;
JDBC是插槽,数据库就是显卡;
驱动程序代表实现;特点是多样性;不同的驱动就是将JDBC和不同的数据库结合起来;
JDBC是一套规范/协议;物理上是JAVA接口集;突出的特点是一致性;
4) 协议:
体现的是sun公司(java程序员)和数据库厂商(驱动的开发者)的协议;
是调用者和实现者的协议;前者是按照规范去调用;后者是按照规范实现;
sun公司定义规范;java程序员写代码调用,数据库厂商实现规范;
为什么JDBC具有一致性?
接口就是实现者和调用者之间的协议,保证一致性;接口不能修改原来的定义,只能增加;
5) 总结:
JDBC是一个由java接口组成的接口集,代表了实现者(数据库厂商)和调用者(java程序员)之间的协议;
只能让操作看起来一致,并没有实现;真正去工作的是驱动;
接口例子:
螺钉、螺母,有工业规范规定的,也是接口;
遥控器,使用者和实现者的分离;实现者工作比使用者相对复杂;
程序、驱动、jdbc接口一起才能有效的工作;
人、电视、遥控器 一起才是看电视;
3、JDBC Driver的四种类型:(不管是哪个厂商的,按照历史发展顺序)
1) JDBC-ODBC桥 驱动:
由ODBC驱动提供JDBC访问;
每年都有很多计算机语言诞生,但是不久就灭亡了;
刚开始,数据库厂商也不是很看好java这门语言;不是很想写驱动;
但是j2se中有jdbc的规范;必须得实现,sun公司很巧妙的利用了ODBC(c 访问数据库的驱动),
当时ODBC所有的数据库都能访问;将JDBC翻译成了ODBC;
应用程序--> JDBC--> 桥--> ODBC-->数据库
安全性不是很好(java的安全性建立在jvm上), 效率也不高(翻译);
2) 本地API 部分java驱动:
部分Java driver把JDBC调用转化成本地的客户端API
如果代码调用了windows的系统调用,就是windows本地调用;
应用程序--> JDBC -->JVM/OS --> 数据库
速度还可以,但是不是纯java的;
3) JDBC-net :纯java驱动;
纯的Java driver,将JDBC调用转入DBMS,与网络协议无关。然后通过服务器将调用转为DBMS协议。
没有直接访问数据库,访问了中间服务器;
应用程序--> JDBC--> 驱动--> 访问中间服务器--> 数据库
本地协议,数据库服务器的应用层协议;
中间协议,中间服务器的协议;
安全性还可以,但是协议,网络造成了效率的降低;
4) 纯 java 本地协议:
纯的java driver,将JDBC调用直接转为DBMS使用的网络协议
应用程序--> JDBC--> 驱动-(本地协议)-->数据库(内置对jvm的支持)
安全性没有问题,效率也高了;数据库厂商作出了努力;
现在我们用的就是这种驱动;
4、开发者接口的内容:
驱动程序, 有很多类,但有一个主类,实现java.sql.Driver接口,手动加载这个类;
两个包:java.sql.*;//主要接口包;
javax.sql.*;//扩展功能包;j2ee版
JDBC 贯穿课程,以后Hibernate, EJB,Spring 都要用;
Driver :接口,代表驱动程序;
DriverManager:工具类,辅助管理驱动程序的;并不是规范里的内容;规范里只有接口;
Connection:接口,连接数据库,代表和数据库的物理连接;某种意义上代表数据库本身;事务也由它代表;
Statement:接口,操作数据库的对象,发送 sql语句
PreparedStatement:Statement子接口,预编译Statement,开发中主要用这个;
CallableStatement:Statement子接口,调用数据库的存储过程,用的比较少;数据库之间的存储过程是不通用的;
ResultSet:接口,结果集,代表对数据库的查询结果,并且提供处理结果的方法;
DataBaseMetadata:接口,代表原数据,数据库原数据
ResultMetadata:接口,代表原数据,结果集原数据
Types:类,辅助的类,代表JDBC类型,定义了很多整数类型的常量;是标准SQL类型的子集;
数据库:例 :vachar=12,number=2
5、访问数据库:
0) 加载驱动; 反射的方法;
1) 连接数据库;
2) 操作数据库;
3) 返回结果集:ResultSet
4) 关闭数据库连接;
Oracle的Driver的全名oracle.jdbc.driver.OracleDriver
mysql的Driver的全名com.mysql.jdbc.Driver
SQLServer的Driver的全名com.microsoft.jdbc.sqlserver.SQLServerDriver
Class.forName("oracle.jdbc.driver.OracleDriver");//Oracle的驱动,实现了Driver接口;
DriverManager.getConnection(url:String,username:String,passwd:String);
没有用驱动直接去要连接,而是用了一个驱动管理员,是为了更灵活,以后会细讲,这里先知道;
url:协议,ip地址,端口号; jdbc:oracle:thin:@192.168.0.201:tarena
Statement 从Connection 来的; stmt = con.createStatement();
例子:
public static void main(String[] args)
{
Connection con = null;// 接口不能直接new
Statement st = null;
ResultSet rs = null;
try
{
//1、 加载驱动;
Class.forName("oracle.jdbc.driver.OracleDriver");
//2、获取连接;实现类在驱动程序里;
con = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.201:1521:tarena",
"xjh0704", "xjh0704");
//3、操作数据库;插入一条记录
stmt = con.createStatement();
stmt.executeUpdate("insert into ln_student values(4,'langna','shanghai')");
}catch(Exception e){
e.printStackTrace();
}finally{
//4、关闭连接;判断是否为空,然后关闭;
try{
if(con!=null) con.close();
}catch(SQLException ex){
ex.printStackTrace();
}
}
}
DriverManager 可以得到多个连接对象 Connection ,一个连接对象可以获取Statement对象;
DriverManager --Driver--Connection--Statement --ResultSet
类比: 经理 --工程师-- 连线-- -- 电话---- 电话记录
相关文章推荐
- Java学习笔记-《Java程序员面试宝典》-第四章基础知识-4.1基本概念(4.1.2)
- Linux学习记录(12)ACL基本概念及基础操作
- JavaScript高级程序设计学习总结一(基本概念总结)
- 网络层概念学习之一(基本概念、路由器、选路算法)
- JAVA学习:第一阶段第一天(java基本概念和配置环境)
- java学习笔记(7)基本概念之IO
- java线程学习1——线程基本概念和操作
- Apache Flume学习笔记之一:基本概念和流程
- 【学习记录】面向对象的基本概念6
- Qt5学习-基本概念
- Java基础-学习Java的30个基本概念
- IOS GCD学习之 —— 基本概念 & Dispatch Queue & dispatch_once
- 学习J2SE过程中的30个基本概念
- Unity 2d 学习手札 (一) 基本概念
- QML学习--基本概念
- c#学习一:类的基本概念
- 基本概念学习(7001)---拓扑结构
- 网络流学习(一)基本概念
- jms学习-基本概念(一)
- C++ Primer 学习笔记--基本概念和数据类型