layout: post

title: 概念学习 - JNDI, JDBC, ODBC, DataSource

最近在学习Java Hibernate,对数据库资源访问这块好多概念模糊,所以在此记录一下, 如有错误 盼指正。

Data Source

It is

physically a set of data stored somewhere like a database;

abstractly it is DataSource object used to get connection to a database;

访问这些数据需要什么?

Give the Data Source a NAME i.e. DSN (Data Source Name) which describes informations to access it:

  • location
  • access right
  • driver
  • name
  • ...

都有哪些DSN?

  • User DSN
  • System DSN
  • File DSN

如何访问Data Source呢?

Data Source是存在数据库中的,访问这些数据要用到sql 语句。

应用程序呢,是用特定编程语言比如Java, C#等写的,程序中需要使用Data Source。

这就存在一个问题,这些编程语言和sql语言之间如何talk呢?

显然需要一个翻译机制来实现。

于是便有了ODBC and JDBC...

ODBC

ODBC is

Open Database Connectivity
它统一了对各种不同类型数据库的访问接口
是应用程序和数据库之间的中间件
Language Indepenent (适用any application to access any database)

类比:JVM 使java 可以跨平台使用,ODBC使应用程序可以跨数据库使用(移植数据库方便)

配置ODBC数据源

ODBC 数据源得配置是OS level的,是不依赖任何数据库系统的,不直接与数据库打交道,与数据库实际操作都是通过各数据库的ODBC Driver来实现的。

如上面三种DSN的配置,在windows中直接到Control Panel -> Administrator -> ODBC 中配置即可。

JDBC

 Java Database Connectivity
纯Java接口规范
Java Language specific

why jdbc when there is already ODBC?

最简单的一句话是,ODBC是使用C语言接口的,java直接调C...sounds not very good.

连接数据库

Java 程序员可以使用:

  • JDBC-to-ODBC bridge to talk to any ODBC compliant database.
  • JDBC driver directly to talk to database

JNDI

Why?

既然有了ODBC, JDBC, 那为什么还要JNDI?

一个简单的原因是,程序员需要在程序中使用odbc, jdbc 连接配置信息来访问数据库。这些信息直接写在程序中好吗?如果要用到多个连接信息呢?

是什么?

Java naming and directory Interface (JAVA API)

Java 接口规范。

从根本上讲,JNDI是一个目录服务。比如你在手机里查询某人的电话,输入名字手机返回你这个人的电话。这里的手机就相当于JNDI的作用。

在java中可以这么理解:

首先给出一个Name(比如Data source name),
java 返回你一个Object对象(比如DataSource object)。
然后你可以通过这个DataSource object 来获取与数据库的连接,
进而作各种数据库的操作。
最后关闭数据库连接等。

Sample Code: ([参考][1])

`private static void ConnectDBWithJNDI(String jndiName) throws 	NamingException, SQLException {
Context ctx=new InitialContext();
Object obj=ctx.lookup(jndiName);
DataSource ds=(DataSource)obj;
conn=ds.getConnection();
conn.setAutoCommit(false);
conn.commit();
conn.close();
} private static void ConnectDBWithoutJNDI(String driverName, String jdbcLink) throws ClassNotFoundException, SQLException {
Class.forName(driverName, true, Thread.currentThread().getContextClassLoader());
conn = DriverManager.getConnection(jdbcLink);
conn.setAutoCommit(false);
conn.commit();
conn.close();
}`

Extension:

当然JNDI不仅限于数据库目录服务,很多诸如LDAP,文件系统等都支持。

类似的目录服务还有 WebService 中的 UDDI (Universal Description, Discovery and Integration)

概念学习 - JNDI, JDBC, ODBC, DataSource的更多相关文章

  1. Atitit.跨语言数据库db  api兼容性 jdbc odbc ado oledb 增强方案

    Atitit.跨语言数据库db  api兼容性 jdbc odbc ado oledb 增强方案 1. 跨语言db api兼容性..1 2. 目前访问数据库的接口很多.比较常用的jdbc odbc 以 ...

  2. JDBC数据源(DataSource)数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用。

    JDBC数据源(DataSource)的简单实现   数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用. 2.数据源提供了一种简单获取数据库连接的方式,并能在内部通 ...

  3. JDBC ODBC区别

    一.JDBC(Java DataBase Connectivity standard) 1.JDBC,它是一个面向对象的应用程序接口(API), 通过它可访问各类关系数据库. 2. 驱动程序(JDBC ...

  4. JSP使用JDBC ODBC 实例

    1.JDBC ODBC Brige driver是JSP连接数据库的驱动,只要安装了JDK这个驱动就默认安装了 2. 配置JDBC ODBC数据源的步骤:http://blog.csdn.net/li ...

  5. 大数据技术之_19_Spark学习_03_Spark SQL 应用解析 + Spark SQL 概述、解析 、数据源、实战 + 执行 Spark SQL 查询 + JDBC/ODBC 服务器

    第1章 Spark SQL 概述1.1 什么是 Spark SQL1.2 RDD vs DataFrames vs DataSet1.2.1 RDD1.2.2 DataFrame1.2.3 DataS ...

  6. java 8: ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver

    转眼之间, java 11都快要推出了. 而我一直都在 java 7环境下写代码,真的不想升级,不想改变什么,可世界每天都在变化. 最近因为服务端需要SNI,而 java 7 只支持客户端的SNI,只 ...

  7. Connection conn = DriverManager.getConnection("jdbc:odbc:bbs");

    Connection conn = DriverManager.getConnection("jdbc:odbc:bbs"); 这是JDBC连接数据库的时候用的一句话,,Conne ...

  8. 第5章 JDBC/ODBC服务器

    第5章 JDBC/ODBC服务器 Spark SQL也提供JDBC连接支持,这对于让商业智能(BI)工具连接到Spark集群上以 及在多用户间共享一个集群的场景都非常有用.JDBC 服务器作为一个独立 ...

  9. Java使用JNDI技术获取DataSource对象

    package common; import java.sql.Connection; import java.sql.SQLException; import javax.naming.Contex ...

随机推荐

  1. Oracle Jdbc驱动下载及安装本地maven仓库

    由于二进制许可 binary license的限制,oracle jdbc驱动不能通过共有仓库来获取,所以你可以下载下来添加到自己的本地仓库或私有仓库中. 添加到本地仓库步骤如下: 下载Oracle ...

  2. abstract和interface的区别

    abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和inte ...

  3. java 制作QQ登录界面

    package org.eclipse.wb.swing; import java.awt.BorderLayout;import java.awt.EventQueue; import javax. ...

  4. 去掉标题栏的方法(使用requestWindowFeature(Window.FEATURE_NO_TITLE);为什么失效)

    使用requestWindowFeature(Window.FEATURE_NO_TITLE)隐藏标题栏失效的原因,可能是activity继承的是AppCompatActivity.下面详细介绍了使用 ...

  5. Xamarin自定义布局系列——ListView的一个自定义实现ItemsControl(横向列表)

    在以前写UWP程序的时候,了解到在ListView或者ListBox这类的列表空间中,有一个叫做ItemsPannel的属性,它是所有列表中子元素实际的容器,如果要让列表进行横向排列,只需要在Xaml ...

  6. Azure Messaging-ServiceBus Messaging消息队列技术系列5-重复消息:at-least-once at-most-once

    上篇博客中,我们用实际的业务场景和代码示例了Azure Messaging-ServiceBus Messaging对复杂对象消息的支持和消息的持久化: Azure Messaging-Service ...

  7. dreamweaver破解版下载地址

    dreamweaver CC 2015可以在可视化环境中设计的你网页,非常方便高效完成网页设计.Adobe Dreamweaver CC 2015支持CSS编辑器.和jQuery库代码自动完成功能等等 ...

  8. 2015.07.12hadoop伪分布安装

    hadoop伪分布安装   Hadoop2的伪分布安装步骤[使用root用户用户登陆]other进去超级用户拥有最高的权限 1.1(桥接模式)设置静态IP ,,修改配置文件,虚拟机IP192.168. ...

  9. span 右浮动折行 解决ie6/7中span右浮动折行问题

    A floated box is shifted to the left or right until its outer edge touches the containing block edge ...

  10. iOS开发--Runtime的简单使用之关联对象

    一.Runtime关联对象的方法简介: 在<objc/runtime.h>中,有三个关联的方法,分别是: objc_setAssociatedObject objc_getAssociat ...