JDBC简介
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,它是Java十三个规范之一。可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。
ODBC简介
开放数据库互连(Open Database Connectivity,ODBC)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。开放数据库互连(ODBC)是Microsoft提出的数据库访问接口标准。开放数据库互连定义了访问数据库API的一个规范,这些API独立于不同厂商的DBMS,也独立于具体的编程语言(但是Microsoft的ODBC文档是用C语言描述的,许多实际的ODBC驱动程序也是用C语言写的。)ODBC规范后来被X/OPEN和ISO/IEC采纳,作为SQL标准的一部分,具体内容可以参看《ISO/IEC 9075-3:1995 (E) Call-Level Interface (SQL/CLI)》等相关的标准文件。
两者之间的联系
JDBC和ODBC都是用来连接数据库的启动程序,JDBC和ODBC由于具有数据库独立性甚至平台无关性,因而对Internet上异构数据库的访问提供了很好的支持。
两者之间的区别
1.JDBC比ODBC更容易理解
从事编程工作的朋友都知道Java比C语言更好学,主要是因为Java语言是面向对象的更接近人的思维认识,更容易被人接受。而C语言就较为抽象,跟人的认识思维相差较大,其开发出来的产品也具有类似特点。在ODBC中一个的简单的查询,也需求分为好几块内容;而在ODBC驱动程序内部再去整合,做一些复杂的操作。这不仅降低了数据库启动程序的性能,而且也给程序开发者开发实际运用程序带来了确定的负面效果。而JDBC数据库启动程序在设计的时间就包含了大部份基本数据操作功能,为此在编写一些常规的数据库操作语句时,如查询、更新等等,其所需求的源代码比 ODBC要少的多。故从这方面来说,JDBC数据库启动程序要比ODBC简易理解。
2.JDBC数据库驱动程序是面向对象的
JDBC完全遵循Java语言的优良特性。通常情况下,只要有Java功能需设计基础的用户都能在最短时间内了解JDBC驱动程序的架构,较量简易上手,能轻而易举的开发出强悍的数据库实际运用程序。而ODBC的话,由于其内部功能复杂,源代码编写要求高。为此即使是一个的C语言的高手,仍然需求花费不少的时间去了解那个数据库启动程序;在编写源代码的时间,还离不开有关的参考书本。
3.JDBC的移植性要比ODBC要好。
通常情况下,安装完ODBC驱动程序之后,还需求经过确定的配置才能够应用。而不相同的配置在不相同数据库服务器之间不能够通用。也那是说,装一次需求配置一次。但是JDBC数据库驱动程序则不相同。假如采用JDBC数据库驱动程序的话,则只需要选取适当的 JDBC数据库驱动程序,就不需要额外的配置。在安装过程中,JDBC数据库驱动程序会自己完成有关的配置。为此JDBC的移植性要比ODBC要好。
从ODBC向JDBC过度
也许数据库编程以前采用的是ODBC驱动程序,而假如数据库编程目前需要采用JDBC驱动程序,那么能否出现顺利过渡呢?答案是肯定的。在JDBC驱动程序中有一类叫作JDBC-ODBC桥接启动程序。这种类别的JDBC数据库驱动程序其底层是经过ODBC驱动程序来连接数据库的。假如原先的实际运用程序是基于ODBC数据库驱动程序的,或者数据库没有帮助对应的JDBC驱动程序,则数据库编程能利用JDBC-ODBC桥接驱动程序来实现。也那是说,桥接驱动程序能利用现有的ODBC驱动程序来存取联系型数据库。为此者不仅能保留先前的开发架构(经过ODBC来存取数据),还能立即应用Java作为新的开发环境,从而出现ODBC数据库驱动程序到JDBC的顺利转型。
不过在采用这种桥接驱动程序的时间,需求留意几个难点。一是那个桥接驱动程序仍然需要用到ODBC数据库驱动程序。由于桥接驱动程序直接联系的对象是ODBC驱动程序,然后再经过ODBC驱动程序去访问数据库。为此在客户端必需先安装并配置好ODBC驱动程序。假如采用的是三层式的开发框架,也需求安装ODBC驱动程序。其次,在这种模式下,实际运用程序先调用JDBC,然后再经过JDBC调用ODBC,最后再跟数据库通信。显然其中间多了几个环节。由于其中间环节较量多,但数据访问出现难点的时候,就不太好查难点。这就好像一道水管,假如中间的接口多了的话,则除了漏水的几率就较量高。假如真的除了漏水的话,则查询漏水点的时间也会较量困难。为此笔者以为,采用桥接类别的JDBC驱动程序只是权宜之计。在适当的时间,数据库开发还是需要调整原先的开发架构,全部都转到JDBC驱动程序上来。桥接程序只是为数据库开发争取确定的时间。虽然那个转型过程中的阵痛是较痛的,但确是不可避免的。长痛不如短痛,笔者意见数据库开发还是及早停止过渡为好。并在估计的情况下,把以前的开发架构也停止调整,以采用真正意义上的JDBC驱动程序。
JDBC虽然在一定程度上比ODBC操作简单,容易理解。但是世间万物存在即有道理,并不是说JDBC好就所有的情况下都能使用JDBC,两者之间没有好坏之分,只是在特定的情况下能够选取合适的实现方式即可。
JDBC连接数据库
jdbc:使用Java代码发送sql语句的技术就是jdbc技术。即jdbc是一个接口,用于不同的数据库(oracle、mysql、sqlserver。。)的操作。使用jdbc发送sql语句的前提:
登录数据库服务器(连接数据库服务器)
(数据库的)IP地址
端口
(数据库)用户名
密码
JDBC的URL=协议名+子协议名+数据源名。
a 协议名总是“jdbc”。
b 子协议名由JDBC驱动程序的编写者决定。
c 数据源名也可能包含用户与口令等信息;这些信息也可单独提供。
几种常见的数据库连接
——————————-oracle——————
驱动:oracle.jdbc.driver.OracleDriver
URL:jdbc:oracle:thin:@machine_name:port:dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1521
——————————-mysql——————-
驱动:com.mysql.jdbc.Driver
URL:jdbc:mysql://machine_name:port/dbname
注:machine_name:数据库所在的机器的名称(本机一般默认为localhost);
port:端口号,默认3306
—————————SQL Server——————
驱动:com.microsoft.jdbc.sqlserver.SQLServerDriver
URL:jdbc:microsoft:sqlserver://<:port>;DatabaseName=
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1433
————————–DB2————————–
驱动:com.ibm.db2.jdbc.app.DB2Driver
URL:jdbc:db2://<:port>/dbname
注:machine_name:数据库所在的机器的名称;(port默认5000)
这里以Mysql为例。
所需jar包:mysql-connector-java-5.1.7-bin.jar
代码如下:
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.util.Properties;
import org.junit.Test;
public class Demo1{
//首先连接到数据库的URL
private String url = "jbdc:mysql://localhost:3306/demo";/*jdbc协议:数据库子协议:主机:端口/连接的数据库*/
private String user = "root";//数据库用户名
private String password = "root";//数据库密码
/*
第一种方法
*/
@Test
public void test1() throws Exception{
//1.创建驱动程序类对象
Driver driver = new com.mysql.jdbc.Driver();//需要导入上面提到的jar包
//设置用户名和密码
Properties pro = new Properties();
pro.setProperty("user",user);
pro.setProperty("password",password);
//2.连接数据库
Connection conn = driver.connect(url,pro);
//测试是否连接成功
System.out.println(conn);
}
/*
第二种方法(使用驱动管理器类连接数据库)
*/
@Test
public void test2() throws Exception{
//创建驱动程序类对象
Dirver dirver = new com.mysql.jdbc.Dirver();
/*Mysql*/
//Driver driver2 = new com.oracle.jdbc.Driver();/*oracle*/
//1.注册驱动程序(可以注册多个)
DirverManager.registerDirver(dirver);
//2.建立连接到数据库
Connection conn = DriverManager.getConnection(url, user, password);
//测试是否连接成功
System.out.println(conn);
}
}
运行后,成功结果应该会显示类似信息:
分析:在test2方法中,创建驱动程序类对象new com.mysql.jdbc.Dirver(); 后在进行注册驱动程序DirverManager.registerDirver(dirver); 实际上已经注册了两次。因为在Driver.class文件中有如下一段静态代码块:
// ---------------------------------------------
//
// Register ourselves with the DriverManager
//
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
即在进行创建驱动程序类对象Driver的时候就执行了registerDriver(new Driver());,所以第二种方法中省略DirverManager.registerDirver(dirver);语句也正确。
基于以上分析,可以采用 通过得到字节码对象的方式加载静态代码块,从而注册驱动程序,即把创建驱动类对象语句换成Class.forName(“com.mysql.jdbc.Driver”);括号内双引号语句为Dirver.Class文件所在的包名(上面所提到的jar包里面)即可。完整代码如下:
@Test
public void test3() throws Exception{
//通过得到字节码对象的方式加载静态代码块,从而注册驱动程序
Class.forName("com.mysql.jdbc.Driver");
//2.连接到具体的数据库
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
}
据此,这部分的连接已经成功了。对代码进行简单的分析有助于理解记忆而不是死记硬背达到活学活用。本例以Mysql数据库进行,其他数据库类似。
jdbc和odbc的更多相关文章
-
关于JDBC和ODBC的区别
转载..... JDBC与ODBC都可以实现类似的功能,但JDBC与ODBC的区别是他们的开发架构不同,其实现细节上也有所差异. 谈到JDBC与ODBC的区别,JDBC和ODBC其实都是用来连接数据库 ...
-
JDBC 与ODBC的区别
一.ODBC(Open DataBase Connectivity : 开放数据库连接) ODBC 总体结构 应用程序 执行处理并调用odbc函数,提交sql语 ...
-
Java系列之JDBC和ODBC之间的差别与联系
JDBC简单介绍 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于运行SQL语句的Java API,它是Java十三个规范之中的一个.能够为多种关系数据 ...
-
JDBC与ODBC
ODBC(Open Database Connectivity)是一组对数据库访问的标准API,这些API通过SQL来完成大部分任务,而且它本身也支持SQL语言,支持用户发来的SQL.ODBC定义了 ...
-
JDBC与ODBC的区别与应用
jdbc是使用通过JAVA的数据库驱动直接和数据库相连,而jdbc-odbc连接的是ODBC的数据源,真正与数据库建立连接的是ODBC! 建议使用JDBC直接连接,同时最好使用连接池! JDBC 是 ...
-
JDBC、ODBC、OLE DB、ADO、ADOMD区别与联系
ODBC: (Open Database Connectivity,开放数据库互连),它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口).这些API利用SQL来完成其大部分任务 ...
-
DOMINO的JDBC和ODBC连接方法
利用ODBC实现Domino和关系数据库的互操作 Lotus Domino是当今办公自动化系统的主流开发平台之一,Domino自带一个非关系型数据库–文档型数据库,而目前大部分企业的信息都储存在 ...
-
jdbc与odbc的差别,感悟,学习。。。
什么是JDBC? JDBC, 全称为Java DataBase Connectivity standard, 它是一个面向对象的应用程序接口(API), 通过它可訪问各类关系数据库.JDBC也是jav ...
-
java jdbc与odbc数据库的连接mysql数据库
1.jdbc连接数据库要添加mysql-connector-java-5.1.38-bin.jar库 2.odbc连接数据库要添加odbc数据源 3.测试代码 DBHelper.java代码jdbc连 ...
随机推荐
-
Fis3前端工程化之项目实战
Fis3项目 项目目录结构: E:. │ .gitignore │ fis-conf.js │ index.html │ package.json │ README.md │ ├─material │ ...
-
Eclipse中文语言包安装和设置中文Doc
1.安装中文语言包 Eclipse所有的扩展功能都是以插件的形式添加上去的,安装插件时有多种形式,下面是比较常用的两种: 直接将插件中的文件复制到Eclipse对于的目录中.优点是安装时很方便,缺点是 ...
-
菜鸟类库诞生记二:通过反射转换DataRow为对象
虽然大数据量的环境下,通过反射转换DataRow为对象性能会很低,但是在数据量适中的时候,这样能够减少很多的代码量,性能也确实不错. 所以在数据量不是很大的情况下,推荐使用. 如果数据量很大,可以使用 ...
-
STL——sort函数简介
参考:http://blog.csdn.net/s030501408/article/details/5329477 0)与C标准库qsort的比较:http://bbs.csdn.net/topic ...
-
Myeclipse 配置多个tomcat
1.首先准备多个tomcat 命名为: tomcat-8087 tomcat-8088 tomcat-8089 2.修改对应的server.xml ①:修改关闭时端口,分别设为 8005 8 ...
-
kubernetes入门(03)kubernetes的基本概念
一.Pod 在Kubernetes集群中,Pod是创建.部署和调度的基本单位.一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个应用的容器.在同一个Pod内部,多个容器共享存储.网络IP,以 ...
-
Cron表达式范例
每隔5秒执行一次:*/5 * * * * ? 每隔1分钟执行一次:0 */1 * * * ? 每天23点执行一次:0 0 23 * * ? 每天凌晨1点执行一次:0 0 1 * * ? 每月1号凌晨1 ...
-
jsp弹窗并跳转
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcepti ...
-
Android之使用传感器获取相应数据
Android的大部分手机中都有传感器,传感器类型有方向.加速度(重力).光线.磁场.距离(临近性).温度等. 方向传感器: Sensor.TYPE_ORIENTATION 加速度(重力)传感器: ...
-
JEECG 3.7.3 新春版本发布,企业级JAVA快速开发平台
JEECG 3.7.3新春版本发布 - 微云快速开发平台 导读 ⊙精美Echart报表 ⊙二维码生成功能 ⊙Online接口改造采用JWT机制 ⊙智能菜单搜索 ⊙代码生成器模板优 ...