概念学习 - 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 ...
随机推荐
- Java代码块详解
Java中代码块指的是用 {} 包围的代码集合,分为4种:普通代码块,静态代码块,同步代码块,构造代码块 普通代码块: 定义:在方法.循环.判断等语句中出现的代码块 修饰:只能用标签修饰 位置:普通代 ...
- Extjs中grid前端分页使用PagingMemoryProxy【二】
在项目中遇到Grid前端分页,本人也是刚接触extjs没多久,为了实现效果,一直找了很久才实现出来,对于代码中的一些也不能详细的说明出来, 不知道能不能帮助到遇到同样问题的朋友,所以将例子代码 ...
- CSS揭秘 技巧(五):条纹背景
条纹背景 https://github.com/FannieGirl/ifannie/问题:条纹背景 在设觉设计中无处不在,我们真的可以用css 创建图案吗? 这一章相对还是比较复杂的哦!一起get. ...
- (五)CSS和JavaScript基础
DHTML :制作动态HTML页面的技术 DHTML=HTML+层叠样式表CSS+脚本语言javascript 一.CSS 1.1 CSS样式的分类: 行内样式:只影响一行,其他相同标签也不影响.如下 ...
- Palindrome Linked List leetcode
Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it in O(n) time ...
- 每天一个Linux命令 8
yum 光盘yum源搭建好处:不需要上网,省去许多网络yum源下载所需的时间,安装速度会大大增加.缺点:yum源不一定是最新的 1.打开虚拟机,加载光盘镜像,进入Linux系统,挂载光盘.2. 让网络 ...
- 【原创】Ionic单页应用跳转外链,构造路由返回的解决办法及代码
在开发广汽菲克微信企业号的填单审批webApp的时候出现了一个问题: 单据是带有附件的,而且存在各种不同的格式,需要后台处理后给前台链接地址,点击预览,微信浏览器的特性就是只能存在一个浏览器窗口, 这 ...
- Java反射机制深度剖析
版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! Java反射机制是Java语言中一种很重要的机制,可能在工作中用到的机会不多,但是在很多框架中都有用到这种机制.我们知道Java是一门静态 ...
- ST 单元测试之maven安装
junit是用于单元测试的jar包,可以直接下载然后粘贴至lib目录,maven是专门的包管理工具,所以尝试安装maven. 安装maven之前需要先安装好java以及eclipse,在相应的官网下载 ...
- 今天给大家分享一下PS快捷键大全
一.工具箱(多种工具共用一个快捷键的可同时按[Shift]加此快捷键选取) 矩形.椭圆选框工具 [M] 移动工具 [V] 套索.多边形套索.磁性套索 [L] 魔棒工具 [W] 裁剪工具 [C] 切片工 ...