type 1:jdbc-odbc桥
type 2:本地api驱动
type 3:网络协议驱动
type 4:本地协议驱动
Type 1: jdbc-odbc桥
Jdbc-odbc 桥 是sun公司提供的,是jdk提供的的标准api 这种类型的驱动实际是把所有 jdbc的调用传递给odbc ,再由odbc调用本地数据库驱动代码( 本地数据库驱动代码是指 由数据库厂商提供的数据库 *** 作二进制代码库,例如在oracle for windows中就是oci dll 文 件)
jdbc-odbc桥 | odbc | 厂商DB代码---------------数据库Server
只要本地机装有相关的odbc驱动那么采用jdbc-odbc桥几乎可以访问所有的数据库,jdbc- odbc方法对于客户端已经具备odbc driver的应用还是可行的
但是,由于jdbc-odbc先调用 odbc再由odbc去调用本地数据库接口访问数据库所以,执行效率比较低,对于那些大数据量 存取的应用是不适合的而且,这种方法要求客户端必须安装odbc 驱动,所以对于基于 internet ,intranet的应用也是不合适的因为,你不可能要求所有客户都能找到odbc driver
=====一般ACCESS用到的比较多,初学者用。实际项目是不用的。
Type 2: 本地Api驱动
本地api驱动直接把jdbc调用转变为数据库的标准调用再去访问数据库
这种方法需要本地 数据库驱动代码 本地api驱动 | 厂商DB代码---------------数据库Server (图二) 这种驱动比起jdbc-odbc桥执行效率大大提高了但是,它仍然需要在客户端加载数据库厂商 提供的代码库这样就不适合基于internet的应用并且,他的执行效率比起3,4型的jdbc驱动 还是不够高
Type3:网络协议驱动 这种驱动实际上是根据我们熟悉的三层结构建立的 jdbc先把对数局库的访问请求传递给网 络上的中间件服务器 中间件服务器再把请求翻译为符合数据库规范的调用,再把这种调用 传给数据库服务器如果中间件服务器也是用java开法的,那么在在中间层也可以使用1,2型 jdbc驱动程序作为访问数据库的方法 网络协议驱动---------中间件服务器------------数据库Server
由于这种驱动是基于server的所以,它不需要在客户端加载数据库厂商提供的代码库而且 他在执行效率和可升级性方面是比较好的因为大部分功能实现都在server端,所以这种驱动 可以设计的很小,可以非常快速的加载到内存中 但是,这种驱动在中间件层仍然需要有配置 其它数据库驱动程序,并且由于多了一个中间层传递数据,它的执行效率还不是最好
Type4 本地协议驱动
这种驱动直接把jdbc调用转换为符合相关数据库系统规范的请求由于4型驱动写的应用可 以直接和数据库服务器通讯这种类型的驱动完全由java实现,因此实现了平台独立性 本地协议驱动---------数据库Server
由于这种驱动不需要先把jdbc的调用传给odbc或本地数据库接口或者是中间层服务器所 以它的执行效率是非常高的而且,它根本不需要在客户端或服务器端装载任何的软件或驱动 这种驱动程序可以动态的被下载但是对于不同的数据库需要下载不同的驱动程序
以上对四种类型的jdbc驱动做了一个说明那么它们适合那种类型的应用开发呢
Jdbc-odbc桥由于它的执行效率不高,更适合做为开发应用时的一种过度方案,或着对于初学 者了解jdbc编程也较适用 对于那些需要大数据量 *** 作的应用程序则应该考虑2,3,4型驱动在intranet方面的应用可以 考虑2型驱动,但是由于3,4型驱动在执行效率上比2型驱动有着明显的优势,而且目前开发 的趋势是使用纯java所以3,4型驱动也可以作为考虑对象 至于基于internet方面的应用就只有考虑3,4型驱动了 因为3型驱动可以把多种数据库驱 动都配置在中间层服务器所以3型驱动最适合那种需要同时连接多个不同种类的数据库, 并且对并发连接要求高的应用 4型驱动则适合那些连接单一数据库的工作组应用。
现在是纯java 开发,所以一般都用type4的jdbc driver。
JAVA连接数据库的方式有多种:
根据所需要的不同数据库驱动分,分为四种:
1:1类驱动。这就是JDBC-ODBC桥的方式。但这种方式不适合程序的重用与维护,不推荐使用。需要数据库的ODBC驱动。
2:2类驱动。这就是JDBC+厂商API的形式。厂商API一般使用C编写,所以,这种方式也不长使用。
3:3类驱动。这就是JDBC+厂商Database Connection Server+DataBase的形式。
这种方法就是在JAVA 与 DATABASE之间价起了一台专门用与数据库连接的服务器(一般由数据库厂商提供)。他的好处在于能优化连接。
4:4类驱动。这就是纯JDBC+DATABASE的连接方式。也是推荐的连接方式。这使得APPLICATION与数据库分开,开发者只需关心内部逻辑的实现而不需注重数据库连接的具体实现。在这其中有两种连接的方式:
硬编码方式,就是在程序中硬性编入数据库连接的所须参数。
JNDI DataSource方式。就是在程序运行的外布环境中又称(Context)设置一个datasource数据源,有一个jndi 名称,程序只须查找此名称就可得到一个数据库连接的对象。
JDBC是Sun公司制定的一个可以用Java语言连接数据库的技术。
JDBC工作原理主要分3个步骤:1、加载数据库驱动。2、获取数据库连接。3、发送sql语句访问数据库 。
1、加载数据驱动:使用ClassforName方法,调用这个方法会加载数据库驱动comMySQLjdbcdriver。
关于数据库驱动的理解,其实是sun公司给了一个Driver的接口,然后各个数据厂商根据自己的数据库
来实现这个接口。当要访问数据库的时候,需要引入这个第三方类库。类的加载主要分为5个部分,
加载、验证、准备、解析、初始化。在初始化的部分用到了DriverManagerregisterDriver()方法,将
自己注册给DriverManager的Driver接口。这个地方体现了多态。这个时候就可以使用Driver了。
2、获取数据库连接DriverManagergetConnection()。这个方法主要调用driver的connect()方法
返回一个实现了Connection接口的对象。
3、然后利用Connection对象创建Statement,发送sql语句访问数据库。
延伸:JDBC基础知识
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序,并且可跨平台运行,并且不受数据库供应商的限制。
1、跨平台运行:这是继承了Java语言的“一次编译,到处运行”的特点;
2、不受数据库供应商的限制:巧妙在于JDBC设有两种接口,一个是面向应用程序层,其作用是使得开发人员通过SQL调用数据库和处理结果,而不需要考虑数据库的提供商;另一个是驱动程序层,处理与具体驱动程序的交互,JDBC驱动程序可以利用JDBC API创建Java程序和数据源之间的桥梁。应用程序只需要编写一次,便可以移到各种驱动程序上运行。Sun提供了一个驱动管理器,数据库供应商——如MySQL、Oracle,提供的驱动程序满足驱动管理器的要求就可以被识别,就可以正常工作。所以JDBC不受数据库供应商的限制。
JDBC API可以作为连接Java应用程序与各种关系数据库的纽带,在带来方便的同时也有负面影响,以下是JDBC的优、缺点。优点如下:
· *** 作便捷:JDBC使得开发人员不需要再使用复杂的驱动器调用命令和函数;
· 可移植性强:JDBC支持不同的关系数据库,所以可以使同一个应用程序支持多个数据库的访问,只要加载相应的驱动程序即可;
· 通用性好:JDBC-ODBC桥接驱动器将JDBC函数换成ODBC;
· 面向对象:可以将常用的JDBC数据库连接封装成一个类,在使用的时候直接调用即可。
缺点如下:
· 访问数据记录的速度受到一定程度的影响;
· 更改数据源困难:JDBC可支持多种数据库,各种数据库之间的 *** 作必有不同,这就给更改数据源带来了很大的麻烦
private static final String DRIVER="oraclejdbcdriverOracleDriver";
private static final String URL="jdbc:oracle:thin:@d:1521:c";
private static final String USER="b";
private static final String PASSWORD="password";
public static void main(String [] arge){
Systemoutprintln(getCon());
}
public static Connection getCon(){
Connection con=null;
try {
ClassforName(DRIVER);
con=DriverManagergetConnection(URL,USER,PASSWORD);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
eprintStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
return con;
}
public static void closeAll(javasqlResultSet rs, javasqlPreparedStatement ps, javasqlConnection conn){
if(rs!=null){
try {
rsclose();
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
rs=null;
}
if(ps!=null){
try {
psclose();
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
ps=null;
}
try {
if(conn!=null&&!(connisClosed())){
connclose();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
这是老师发给我们的资料,共享给你:\x0d\Type 1: jdbc-odbc桥 \x0d\Jdbc-odbc 桥 是sun公司提供的,是jdk提供的的标准api 这种类型的驱动实际是把所有 jdbc的调用传递给odbc ,再由odbc调用本地数据库驱动代码( 本地数据库驱动代码是指 由数据库厂商提供的数据库 *** 作二进制代码库,例如在oracle for windows中就是oci dll 文 件) \x0d\\x0d\jdbc-odbc桥|odbc|厂商DB代码---数据库Server\x0d\\x0d\只要本地机装有相关的odbc驱动那么采用jdbc-odbc桥几乎可以访问所有的数据库,jdbc- odbc方法对于客户端已经具备odbc driver的应用还是可行的\x0d\\x0d\但是,由于jdbc-odbc先调用 odbc再由odbc去调用本地数据库接口访问数据库所以,执行效率比较低,对于那些大数据量 存取的应用是不适合的而且,这种方法要求客户端必须安装odbc 驱动,所以对于基于 internet ,intranet的应用也是不合适的因为,你不可能要求所有客户都能找到odbc driver \x0d\\x0d\=====一般ACCESS用到的比较多,初学者用。实际项目是不用的。\x0d\\x0d\Type 2: 本地Api驱动 \x0d\\x0d\本地api驱动直接把jdbc调用转变为数据库的标准调用再去访问数据库\x0d\\x0d\这种方法需要本地 数据库驱动代码 本地api驱动|厂商DB代码---数据库Server这种驱动比起jdbc-odbc桥执行效率大大提高了但是,它仍然需要在客户端加载数据库厂商 提供的代码库这样就不适合基于internet的应用并且,他的执行效率比起3,4型的jdbc驱动 还是不够高 \x0d\\x0d\Type3:网络协议驱动 这种驱动实际上是根据我们熟悉的三层结构建立的 jdbc先把对数局库的访问请求传递给网 络上的中间件服务器 中间件服务器再把请求翻译为符合数据库规范的调用,再把这种调用 传给数据库服务器如果中间件服务器也是用java开法的,那么在在中间层也可以使用1,2型 jdbc驱动程序作为访问数据库的方法 网络协议驱动--中间件服务器---数据库Server \x0d\\x0d\由于这种驱动是基于server的所以,它不需要在客户端加载数据库厂商提供的代码库而且 他在执行效率和可升级性方面是比较好的因为大部分功能实现都在server端,所以这种驱动 可以设计的很小,可以非常快速的加载到内存中 但是,这种驱动在中间件层仍然需要有配置 其它数据库驱动程序,并且由于多了一个中间层传递数据,它的执行效率还不是最好 \x0d\\x0d\Type4 纯JAVA驱动 \x0d\这种驱动直接把jdbc调用转换为符合相关数据库系统规范的请求由于4型驱动写的应用可 以直接和数据库服务器通讯这种类型的驱动完全由java实现,因此实现了平台独立性 本地协议驱动---------数据库Server \x0d\\x0d\由于这种驱动不需要先把jdbc的调用传给odbc或本地数据库接口或者是中间层服务器所 以它的执行效率是非常高的而且,它根本不需要在客户端或服务器端装载任何的软件或驱动 这种驱动程序可以动态的被下载但是对于不同的数据库需要下载不同的驱动程序 \x0d\\x0d\以上对四种类型的jdbc驱动做了一个说明那么它们适合那种类型的应用开发呢 \x0d\\x0d\Jdbc-odbc桥由于它的执行效率不高,更适合做为开发应用时的一种过度方案,或着对于初学 者了解jdbc编程也较适用 对于那些需要大数据量 *** 作的应用程序则应该考虑2,3,4型驱动在intranet方面的应用可以 考虑2型驱动,但是由于3,4型驱动在执行效率上比2型驱动有着明显的优势,而且目前开发 的趋势是使用纯java所以3,4型驱动也可以作为考虑对象 至于基于internet方面的应用就只有考虑3,4型驱动了 因为3型驱动可以把多种数据库驱 动都配置在中间层服务器所以3型驱动最适合那种需要同时连接多个不同种类的数据库, 并且对并发连接要求高的应用 4型驱动则适合那些连接单一数据库的工作组应用。\x0d\\x0d\现在是纯java 开发,所以一般都用type4的jdbc driver。
我刚写了一个只有插入的,望采纳
import javasql;
import javautil;
public class TestPre {
public static void main(String[] args) {
int i=0,deptno=0;//i只做while循环使用,deptno是表dept2中的一个属性,类型是int
String dname=null,loc=null;//dname和loc也是表dept2的属性,类型是String
Scanner s=new Scanner(Systemin);
Systemoutprintln("请输入3个参数");
while(i<3){
try{
deptno=snextInt();
i++;
dname=snext();
i++;
loc=snext();
i++;
}catch(InputMismatchException e){
Systemoutprintln("输入的类型不符,退出");
Systemexit(-1);
}
}
Connection conn=null;
PreparedStatement pstmt=null;
try {
ClassforName("commysqljdbcDriver");
conn = DriverManagergetConnection("jdbc:mysql://localhost/mydata"+ "user=root&password=root");
pstmt=connprepareStatement("insert into dept2 values(,,)");
pstmtsetInt(1, deptno);
pstmtsetString(2, dname);
pstmtsetString(3, loc);
pstmtexecuteUpdate();
Systemoutprintln("插入完成");
} catch (ClassNotFoundException e) {
Systemoutprintln("连接数据库不成功,程序退出");
Systemexit(-1);
} catch (SQLException e) {
Systemoutprintln("连接数据库不成功,程序退出");
Systemexit(-1);
}
finally{
try{
if(pstmt!=null){
pstmtclose();
pstmt=null;
}
if(conn!=null){
connclose();
conn=null;
}
}catch(SQLException e){
eprintStackTrace();
}
}
}
}
package learner;
import javasqlConnection;
import javasqlDriverManager;
import javasqlResultSet;
import javasqlSQLException;
import javasqlStatement;
public class JdbcDriver {
private String className;//驱动名
private String url;//数据库连接url
private String dbName;//要访问的数据库
private String username;//数据库的登录名
private String password;//数据库的登录密码
private Connection conn;
private Statement stmt;
private ResultSet rs;
public JdbcDriver() {
dbName = "pubs";
username = "pubs";
password = "pubs";
className = "commicrosoftjdbcsqlserverSQLServerDriver";
url = "jdbc:microsoft:sqlserver://127001:1433;DatabaseName=" + dbName;
try {
ClassforName(className);
try {
conn = DriverManagergetConnection(url, username, password);
} catch (SQLException e) {
eprintStackTrace();
}
} catch (ClassNotFoundException e) {
eprintStackTrace();
}
try {
stmt = conncreateStatement();
rs = stmtexecuteQuery("select from authors");
} catch (SQLException e) {
eprintStackTrace();
}
try {
while (rsnext()) {
Systemoutprintln(rsgetString(1));
}
} catch (SQLException e1) {
e1printStackTrace();
}
try {
rsclose();
stmtclose();
connclose();
} catch (SQLException e) {
eprintStackTrace();
}
}
public static void main(String[] args) {
new JdbcDriver();
}
}
1增加\x0d\String s1="insert into tableNames (id,name,password) values(myseqnextval,,);"\x0d\ClassforName(driver);\x0d\Connection conn = DriverManagergetConnection(url,dbUser,dbPwd);\x0d\PreparedStatement prepStmt = connprepareStatement(s1);\x0d\prepStmtsetString(1,name);\x0d\prepStmtsetString(2,password);\x0d\ResultSet rs=stmtexecuteUpdate();\x0d\2、删除\x0d\String s2="delete from tbNames where name=";\x0d\ClassforName(driver);\x0d\Connection conn = DriverManagergetConnection(url,dbUser,dbPwd);\x0d\PreparedStatement prepStmt = connprepareStatement(s2);\x0d\prepStmtsetString(1,name);\x0d\ResultSet rs=stmtexecuteUpdate();\x0d\3、修改\x0d\String s3=“update tbNames set name= where id=”;\x0d\ClassforName(driver);\x0d\Connection conn = DriverManagergetConnection(url,dbUser,dbPwd);\x0d\PreparedStatement prepStmt = connprepareStatement(s3);\x0d\prepStmtsetString(1,name);\x0d\prepStmtsetString(2,id);\x0d\ResultSet rs=stmtexecuteUpdate();\x0d\4、查询\x0d\String s4="select id,name,password from tbNames";\x0d\ClassforName(driver);\x0d\Connection conn = DriverManagergetConnection(url,dbUser,dbPwd);\x0d\Statement stmt=conncreateStatement();\x0d\ResultSet rs = stmtexecuteQuery(s4);\x0d\while(rsnext){\x0d\int id=rsgetInt(1);\x0d\String name = rsgetString(2);\x0d\String pwd=rsgetString(3);\x0d\Systemoutprintln(id+name+pwd); } \x0d\\x0d\以上四步必须都得关闭连接;!!!\x0d\rsclose();\x0d\stmtclose();\x0d\connclose();
以上就是关于java jdbc驱动的四种类型请问具体都是什么意思全部的内容,包括:java jdbc驱动的四种类型请问具体都是什么意思、在JAVA中,常用的两种jdbc的驱动方式是什么、JDBC的工作原理是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)