概念学习 - JNDI, JDBC, ODBC, DataSource
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的更多相关文章
- Atitit.跨语言数据库db api兼容性 jdbc odbc ado oledb 增强方案
Atitit.跨语言数据库db api兼容性 jdbc odbc ado oledb 增强方案 1. 跨语言db api兼容性..1 2. 目前访问数据库的接口很多.比较常用的jdbc odbc 以 ...
- JDBC数据源(DataSource)数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用。
JDBC数据源(DataSource)的简单实现 数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用. 2.数据源提供了一种简单获取数据库连接的方式,并能在内部通 ...
- JDBC ODBC区别
一.JDBC(Java DataBase Connectivity standard) 1.JDBC,它是一个面向对象的应用程序接口(API), 通过它可访问各类关系数据库. 2. 驱动程序(JDBC ...
- JSP使用JDBC ODBC 实例
1.JDBC ODBC Brige driver是JSP连接数据库的驱动,只要安装了JDK这个驱动就默认安装了 2. 配置JDBC ODBC数据源的步骤:http://blog.csdn.net/li ...
- 大数据技术之_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 ...
- java 8: ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver
转眼之间, java 11都快要推出了. 而我一直都在 java 7环境下写代码,真的不想升级,不想改变什么,可世界每天都在变化. 最近因为服务端需要SNI,而 java 7 只支持客户端的SNI,只 ...
- Connection conn = DriverManager.getConnection("jdbc:odbc:bbs");
Connection conn = DriverManager.getConnection("jdbc:odbc:bbs"); 这是JDBC连接数据库的时候用的一句话,,Conne ...
- 第5章 JDBC/ODBC服务器
第5章 JDBC/ODBC服务器 Spark SQL也提供JDBC连接支持,这对于让商业智能(BI)工具连接到Spark集群上以 及在多用户间共享一个集群的场景都非常有用.JDBC 服务器作为一个独立 ...
- Java使用JNDI技术获取DataSource对象
package common; import java.sql.Connection; import java.sql.SQLException; import javax.naming.Contex ...
随机推荐
- MySQL之乱码问题解决详解
今天在写一个项目的时候,在数据库中手动插入数据不会产生中文乱码,但是通过javaWeb却出现乱码,把提交表单和响应中的乱码问题解决后,还是乱码.所以我锁定一定是我的mysql数据库中出现了乱码的现象.
- 团队项目中js冲突
在我们平时的项目中,特别是模块化开发中.经常会遇到一些js冲突问题,特别是当项目复杂到一定程度的时候.比如项目中引入了相当多的类库,框架以后. 那么.我们如何去避免或者解决这类问题呢? 1.避免使用全 ...
- 算法模板——sap网络最大流 2(非递归+邻接表)
实现功能:同最大流 1 这里面主要是把前面的邻接矩阵改成了邻接表,相比之下速度大大提高——本人实测,当M=1000000 N=10000 时,暂且不考虑邻接矩阵会不会MLE,新的程序速度快了很多倍(我 ...
- html中submit和button的区别(总结) [ 转自欣步同学 ]
html中submit和button的区别(总结) submit是button的一个特例,也是button的一种,它把提交这个动作自动集成了. 如果表单在点击提交按钮后需要用JS进行处理(包括输入验证 ...
- HTML页面内容禁止选择、复制、右键
<body leftmargin=0 topmargin=0 oncontextmenu='return false' ondragstart='return false' onselectst ...
- spring-mvc-两个个小例子
1.用Eclipse创建一个工程,命名为spring2.0 并添加相应的jar包(我用的是4.0.5的版本)到 lib 包下: spring-webmvc-4.0.5.RELEASE.jar spri ...
- Ubuntu部署Jupyter
前言 Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言.在本文中,我们将介绍 Jupyter notebook 的主要特 ...
- 对于自定义标签类中JspBody类的invoke方法的理解
下面是javaeeAPI中对于invoke()方法的介绍: 其中的参数out是一个Writer类的对象,如果写null,就是将标签体内容写到了与此jsp相关联的JspWriter对象,也就是下面的w: ...
- CSS3的新特性
CSS3中增加的新特性: (1)选择器的种类 (2)字体 font (3)text-overflow (4)文本渲染 text-decoration (5)多列布局 column-count (6)R ...
- python大小写转换函数
1.全部转换成大写:upper() 用法: str = 'marsggbo' print str.upper() 结果:MARSGGBO 2.全部转换成小写:lower() 用法:str = ...