一)什么是JDBC
也许这个问题过于“入门级”。但由浅入深,咋们零基础开始~~
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java
API
换句话说,写java,当需要与数据库进行交互时,我们就需要用到JDBC来实现其交互功能。也许有些框架(比如hibernate)可以提供另外形式的数据库交互模式,但这些无非是在JDBC的基础上做了更有效的封装。归根结底,java都是通过JDBC与数据库进行交互的。
二)JDBC的使用
1)样例代码
典型的样例代码如下:
// 1.注册驱动
Class.forName("com.mysql.jdbc.Driver");// 推荐方式
// 2.建立连接
String url = "jdbc:mysql://localhost:3306/jdbc";
String user = "root";
String password = "";
Connection conn = DriverManager.getConnection(url, user, password);
// 3.创建语句
Statement st = conn.createStatement();
// 4.执行语句
ResultSet rs = st.executeQuery("select * from user");
// 5.处理结果
while (rs.next()) {
System.out.println(rs.getObject(1) + "/t" + rs.getObject(2) + "/t"
+ rs.getObject(3) + "/t" + rs.getObject(4));
}
// 6.释放资源
rs.close();
st.close();
conn.close();
2)Statement、PrepareStatement与CallableStatement
先说一下Statement,PreparedStatement和CallableStatement这三个接口的关系式PreparedStatemen继承了Statement,CallableStatement继承了PreparedStatement
上面的例子也是Statement的使用的例子,而PrepareStatement的例子如下:
stringsql = "select * from people p where p.id = ? and p.name = ?";
preparedstatement ps = connection.preparestatement(sql);
ps.setint(1,id);
ps.setstring(2,name);
resultset rs = ps.executequery();
首先是两者对比可以发现写法上的不同,其次是一个结论:
始终使用PreparedStatement代替Statement
原因如下:
1.PreparedStatement的代码的可读性和可维护性更好.
2.PreparedStatement尽最大可能提高性能.
3.最重要的一点是极大地提高了安全性(避免恶义SQL和木马注入).
至于CallableStatement,是用于调用存储过程的。以下是一个简单的例子:
CallableStatement cs=null;
//调用update存储过程
cs=conn.prepareCall("{call pro_update_age_by_birthday(?,?)}");
cs.setString(1, "1998-02-06");
cs.setInt(2, 16);
cs.execute();//将生日为1998-02-06的记录,年龄更新为16岁
三)JDBC详解——JDBC的四种类型
JDBC的代码一般都这么写,即使用方式相对固定。但其实现机制却种类繁多。归纳起来基本有四种:
1、jdbc-odbc桥
2、本地API部分java驱动
3、网络协议完全java驱动
4、本地协议完全java驱动
由于不同的实现机制对最终代码的性能影响明显。所以即使对于JDBC的使用者来说,理清这些实现机制的异同和优缺点还是十分有实际意义的。
1)jdbc-odbc桥
Jdbc-odbc 桥 是sun公司提供的,是jdk提供的的标准api. 这种类型的驱动实际是把所有 jdbc的调用传递给odbc ,再由odbc调用本地数据库驱动代码.( 本地数据库驱动代码是指 由数据库厂商提供的数据库操作二进制代码库,接触过C或者.net的朋友可能就会知道,二进制代码库就是那些dll文件。例如在oracle for windows中就是oci dll 文 件)
其调用顺序是:
jdbc-odbc桥 | odbc | 厂商DB代码---------------数据库Server
由于jdbc-odbc先调用 odbc再由odbc去调用本地数据库接口访问数据库.所以,执行效率比较低,对于那些大数据量 存取的应用是不适合的.而且,这种方法要求客户端必须安装odbc 驱动,所以对于基于 internet ,intranet的应用也是不合适的.因为,你不可能要求所有客户都能找到odbc driver。所以一般是练习时使用,实际项目是不用的。
样例代码如下:
Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
Connection cn = DriverManager.getConnection( "jdbc:odbc:数据源名", "用户名", "口令" );
2)本地API部分java驱动
本地api驱动直接把jdbc调用转变为数据库的标准调用再去访问数据库.
其调用顺序是:
本地api驱动 | 厂商DB代码---------------数据库Server
这种驱动比起jdbc-odbc桥执行效率大大提高了.但是,它仍然需要在客户端加载数据库厂商 提供的代码库.这样就不适合基于internet的应用.
其样例代码如下:
class.forname("com.ibm.db2.jdbc.app.db2driver").newinstance();
string url = "jdbc:db2:sample";
connection con = drivermanager.getconnection(url, user, password)
这样JDK就直接调用db2的db2jdbc.dll(厂商DB代码),而不再使用odbc了。
3)网络协议完全java驱动
这种驱动实际上是根据我们熟悉的三层结构建立的. jdbc先把对数局库的访问请求传递给网 络上的中间件服务器. 中间件服务器再把请求翻译为符合数据库规范的调用,再把这种调用 传给数据库服务器.如果中间件服务器也是用java开法的,那么在在中间层也可以使用1,2型 jdbc驱动程序作为访问数据库的方法.
其调用顺序是:
网络协议驱动---------中间件服务器------------数据库Server
由于这种驱动是基于server的.所以,它不需要在客户端加载数据库厂商提供的代码库.而且 他在执行效率和可升级性方面是比较好的.因为大部分功能实现都在server端,所以这种驱动 可以设计的很小,可以非常快速的加载到内存中. 但是,这种驱动在中间件层仍然需要有配置 其它数据库驱动程序,并且由于多了一个中间层传递数据,它的执行效率还不是最好.
其样例代码如下:
class.forname("com.ibm.db2.jdbc.net.db2driver").newinstance();
//目标连接db2系统侦听该服务于默认端口6789,需要在数据库教程服务器端启动db2jstrt命令,来开启网络端口。
string url = "jdbc:db2://host:6789:sample";
connection con = drivermanager.getconnection(url, user, password);
4)本地协议完全java驱动
这种驱动直接把jdbc调用转换为符合相关数据库系统规范的请求.由于4型驱动写的应用可以直接和数据库服务器通讯.这种类型的驱动完全由java实现,因此实现了平台独立性.
其调用顺序是:
本地协议驱动---------数据库Server
其样例代码如下:
class.forname("com.ibm.db2.jcc.db2driver").newinstance();
string url = "jdbc:db2://host:50000/sample";
connection con = drivermanager.getconnection(url, user, password);
最后对这4种类型做个总结:Jdbc-odbc桥由于它的执行效率不高,更适合做为开发应用时的一种过度方案,或着对于初学 者了解jdbc编程也较适用. 对于那些需要大数据量操作的应用程序则应该考虑2,3,4型驱动.在intranet方面的应用可以 考虑2型驱动,但是由于3,4型驱动在执行效率上比2型驱动有着明显的优势,而且目前开发 的趋势是使用纯java.所以3,4型驱动也可以作为考虑对象. 至于基于internet方面的应用就只有考虑3,4型驱动了. 因为3型驱动可以把多种数据库驱 动都配置在中间层服务器.所以3型驱动最适合那种需要同时连接多个不同种类的数据库, 并且对并发连接要求高的应用. 4型驱动则适合那些连接单一数据库的工作组应用。
分享到:
相关推荐
《深入理解JDBC Driver 3.0:聚焦SQL Server JDBC》 在IT行业中,数据库连接是应用程序与数据存储之间的桥梁,而JDBC(Java Database Connectivity)则是Java平台中用于访问数据库的标准API。JDBC Driver 3.0是针对...
SQL Server驱动包是用于Java应用程序通过JDBC(Java Database Connectivity)接口与Microsoft SQL Server数据库进行交互的必备组件。本文将详细介绍这两个重要的驱动文件——sqljdbc.jar和sqljdbc4.jar,以及如何...
SQLJDBC和SQLJDBC4是Microsoft为Java应用程序提供的用于连接SQL Server数据库的驱动程序。这两个版本都是JDBC(Java Database Connectivity)驱动,允许Java开发者在应用程序中与SQL Server进行交互。下面将详细介绍...
Spring Data JDBC与JDBC是两种不同的数据库访问方式,它们在Java开发中有着广泛的应用。JDBC(Java Database Connectivity)是Java平台的标准API,用于与各种数据库进行交互。它提供了低级别的数据库操作,如建立...
mysql jdbc 驱动 适用于5.6版本及以下数据库 mysql jdbc 驱动 适用于5.6版本及以下数据库 mysql jdbc 驱动 适用于5.6版本及以下数据库 mysql jdbc 驱动 适用于5.6版本及以下数据库 mysql jdbc 驱动 适用于5.6版本及...
mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上...
在Java编程语言中,JDBC(Java Database Connectivity)是一个核心的API,用于连接Java应用程序与各种类型的数据库。这里我们关注的是两个特定版本的Microsoft SQL Server的JDBC驱动:sqljdbc41.jar和sqljdbc42.jar...
在给定的压缩包文件中,包含了三个不同版本的达梦JDBC驱动,分别是Dm7JdbcDriver16.jar、Dm7JdbcDriver17.jar和Dm7JdbcDriver18.jar。 1. **JDBC驱动介绍**: JDBC是Java中用于与各种数据库进行交互的标准接口,它...
sqljdbc.jar 类库提供对 JDBC 3.0 的支持。 sqljdbc.jar 类库要求使用 5.0 版的 Java 运行时环境 (JRE)。连接到数据库时,在 JRE 6.0 上使用 sqljdbc.jar 会引发异常。 注意: JDBC Driver 2.0 不支持 JRE 1.4。...
SQL Server 2000 JDBC 是Java编程语言与Microsoft SQL Server 2000数据库进行交互的一种重要方式。JDBC(Java Database Connectivity)是Java API,允许Java应用程序通过Java虚拟机(JVM)与各种数据库建立连接。在...
标题 "Access_JDBC30" 暗示了这是一个与Microsoft Access数据库相关的Java JDBC驱动程序。JDBC(Java Database Connectivity)是Java编程语言中用于连接和操作数据库的标准接口。这个jar包,"Access_JDBC30.jar",...
KingbaseV8 JDBC驱动是连接KingbaseV8数据库的重要组件,允许Java应用程序通过JDBC(Java Database Connectivity)接口与数据库进行交互。JDBC是Java语言中用来规范客户端程序如何访问数据库的应用程序接口,提供了...
在IT行业中,数据库是至关重要的组成部分,而SQL Server作为一款广泛应用的关系型数据库管理系统,它的连接与操作离不开JDBC(Java Database Connectivity)驱动。本篇将详细介绍如何下载和安装sqljdbc4,这是...
Java JDBC(Java Database Connectivity)是Java编程语言中用于与各种数据库进行交互的一组接口和类。它提供了一种标准化的方法,让程序员可以使用SQL语句访问数据库,而无需关心具体的数据库实现细节。在Java应用...
Access的JDBC驱动是Java数据库连接(Java Database Connectivity, JDBC)的一种实现,它允许Java程序与Microsoft Access数据库进行交互。在JDK 1.8之后,Oracle公司不再默认提供对ODBC(Open Database Connectivity...
标题中的"sqljdbc4.jar, sqljdbc41.jar, sqljdbc42.jar"是指Microsoft SQL Server为Java应用程序提供的Java Database Connectivity (JDBC)驱动程序。这些JAR文件是数据库连接的关键,允许Java代码与SQL Server进行...
`sqljdbc`是Microsoft提供的一个驱动程序,使得Java应用程序能够与SQL Server数据库进行交互。在这个场景中,我们关注的是`sqljdbc 3.0`和`4.0`版本,这两个版本都是专门为Java设计的,用于连接SQL Server 2000。 `...
标题中的"sqljdbc42.jar、sqljdbc41.jar 更新日期2017-12-21"指的是Microsoft SQL Server的Java Database Connectivity (JDBC) 驱动的两个不同版本,它们分别对应于Java SE 7和Java SE 8的兼容性。JDBC驱动是Java...