程序员开发时,知道要开发访问MySQL数据库的应用,于是将一个对 MySQL JDBC 驱动程序类的引用进行了编码,并通过使用适当的 JDBC URL 连接到数据库。

就像以下代码这样:

Connection conn=null;

try ...{

Class.forName("com.mysql.jdbc.Driver", true, Thread.currentThread().getContextClassLoader());

conn=DriverManager.getConnection("jdbc:mysql://MyDBServer?user=qingfeng&password=mingyue");

......

conn.close();

} catch(Exception e) ...{

e.printStackTrace();

} finally ...{

if(conn!=null) ...{

try ...{

conn.close();

} catch(SQLException e) ...{}

}

}

这是传统的做法,也是以前非Java程序员(如Delphi、VB等)常见的做法。这种做法一般在小规模的开发过程中不会产生问题,只要程序员熟悉Java语言、了解JDBC技术和MySQL,可以很快开发出相应的应用程序。

没有JNDI的做法存在的问题:1、

数据库服务器名称MyDBServer 、用户名和口令都可能需要改变,由此引发JDBC

URL需要修改;2、数据库可能改用别的产品,如改用DB2或者Oracle,引发JDBC驱动程序包和类名需要修改;3、随着实际使用终端的增加,原配

置的连接池参数可能需要调整;4、……

解决办法:程序员应该不需

要关心“具体的数据库后台是什么?JDBC驱动程序是什么?JDBC

URL格式是什么?访问数据库的用户名和口令是什么?”等等这些问题,程序员编写的程序应该没有对 JDBC

驱动程序的引用,没有服务器名称,没有用户名称或口令 ——

甚至没有数据库池或连接管理。而是把这些问题交给J2EE容器来配置和管理,程序员只需要对这些配置和管理进行引用即可。

由此,就有了JNDI.

用了JNDI之后的做法:首先,在在J2EE容器中配置JNDI参数,定义一个数据源,也就是JDBC引用参数,给这个数据源设置一个名称;然后,在程序中,通过数据源名称引用数据源从而访问后台数据库。

具体操作如下(以JBoss为例):

1、配置数据源

在JBoss

的 D:\jboss420GA\docs\examples\jca 文件夹下面,有很多不同数据库引用的数据源定义模板。将其中的

mysql-ds.xml 文件Copy到你使用的服务器下,如 D:\jboss420GA\server\default\deploy。

修改 mysql-ds.xml 文件的内容,使之能通过JDBC正确访问你的MySQL数据库,

如下:

Connection conn=null;

try ...{

Class.forName("com.mysql.jdbc.Driver", true, Thread.currentThread().getContextClassLoader());

conn=DriverManager.getConnection("jdbc:mysql://MyDBServer?user=qingfeng&password=mingyue");

......

conn.close();

} catch(Exception e) ...{

e.printStackTrace();

} finally ...{

if(conn!=null) ...{

try ...{

conn.close();

} catch(SQLException e) ...{}

}

}

MySqlDS

jdbc:mysql://localhost:3306/lw

com.mysql.jdbc.Driver

root

rootpassword

org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter

mySQL

这里,定义了一个名为MySqlDS的数据源,其参数包括JDBC的URL,驱动类名,用户名及密码等。

2、在程序中引用数据源:

Connection conn=null;try ...{

Context ctx=new InitialContext();

Object datasourceRef=ctx.lookup("java:MySqlDS"); //引用数据源  DataSource ds=(Datasource)datasourceRef;  conn=ds.getConnection();

......

c.close();

} catch(Exception e) ...{

e.printStackTrace();

} finally ...{

if(conn!=null) ...{

try ...{

conn.close();

} catch(SQLException e) ...{ }

}

}

直接使用JDBC或者通过JNDI引用数据源的编程代码量相差无几,但是现在的程序可以不用关心具体JDBC参数了。

在系统部署后,如果数据库的相关参数变更,只需要重新配置 mysql-ds.xml 修改其中的JDBC参数,只要保证数据源的名称不变,那么程序源代码就无需修改。

由此可见,JNDI避免了程序与数据库之间的紧耦合,使应用更加易于配置、易于部署。

我的总结:jndi就是将jdbc中所要用到的数据库类型,驱动程序,连接字符串,连接命令等交给交给J2EE容器来配置和管理,程序员只需要对这些配置和管理进行引用即可。

比如,jdbc要把数据库配置文件写在应用里面

jndi的话(假如tomcat就在conf文件夹下配置)

jnid中mysql的驱动类_JDBC与JNDI的区别相关推荐

  1. 数据库中的字段varchar类型和char类型的区别?

    数据库中的字段varchar类型和char类型的区别? 目录 数据库中的字段varchar类型和char类型的区别?

  2. PHP中MySQL、MySQLi和PDO的用法和区别

    MySQL 是 PHP 操作 MySQL 数据库最原始的 Extension.MySQLi 的 i 代表 Improvement ,提供了相对进阶的功能,就 Extension 而言,本身也增加了安全 ...

  3. MySql数据库驱动类

    当我们和数据库进行交互的时候都需要一个与数据库相对应的驱动类来进行数据库的连接,无论是SQLServer数据库还是MySql数据库,对应的驱动类是必不可少的,下面就给大家讲一下连接MySql数据库的驱 ...

  4. php中Mysql常用操作类收集

    1 <?php 2 /* 3 * mysql数据库 DB类 4 * @package db 5 * @author yytcpt(无影) 6 * @version 2008-03-27 7 * ...

  5. centos mysql jar 驱动包_JDBC连接MySQL的数据库

    JDBC连接MySQL的数据库 开发工具:eclipes 数据库:mysql 5.6 jdk:1.8 目的:通过简单示例,教会大家如何通过java的代码实现的MySQL的数据库访问. 访问数据库:首先 ...

  6. pdo mysql 和 mysqli_PHP中MySQL、MySQLi和PDO的用法和区别

    设计开发允许PHP应用与MySQL数据库交互的早期扩展.mysql扩展提供了一个面向过程的接口: 并且是针对MySQL4.1.3或更早版本设计的.因此,这个扩展虽然可以与MySQL4.1.3或更新的数 ...

  7. mysqli mysql pdo_PHP中MySQL、MySQLi和PDO的用法和区别

    PHP的MySQL扩展(优缺点) 设计开发允许PHP应用与MySQL数据库交互的早期扩展.mysql扩展提供了一个面向过程 的接口: 并且是针对MySQL4.1.3或更早版本设计的.因此,这个扩展虽然 ...

  8. mysql驱动为什么自动加载_为什么JDBC中加载驱动要使用反射?

    原文链接:https://www.cnblogs.com/homejim/p/8076481.html 在JDBC详解系列(一)之流程中,我将数据库的连接分解成了六个步骤. JDBC流程: 第一步:加 ...

  9. 用于连接mysql的java类_【考试】列举Java连接数据库用到的类有哪些。

    好吧,说明一下JDBC连接数据库的步骤. 创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 例如: try{ //加载MySql的驱动类 Class.forName(&q ...

  10. Kinect+OpenNI学习笔记之13(Kinect驱动类,OpenCV显示类和手部预分割类的设计)

    前言 为了减小以后项目的开发效率,本次实验将OpenNI底层驱动Kinect,OpenCV初步处理OpenNI获得的原始数据,以及手势识别中的分割(因为本系统最后是开发手势识别的)这3个部分的功能单独 ...

最新文章

  1. python note
  2. my_free mysql源代码_MySQL源代码管中窥豹(一)_MySQL
  3. 步步为营-20-XML
  4. 台式电脑键盘f1是计算机怎么取消,开机F1怎么取消,教您开机F1怎么取消
  5. 3.2 进阶-好多鱼
  6. eclipse的jsp第一行代码报错_机器学习之AdaBoost算法及纯python代码手工实现
  7. 网站搭建从零开始(二)服务器空间
  8. 腾讯云连续四年排名中国音视频解决市场第一,头部厂商中RTC增速第一
  9. 拜托!代码有BUG不一定都是程序员的锅
  10. OK335xS dhcpcd porting
  11. 暑假周进度总结报告3
  12. 一款C++ 可视化调试工具增强插件
  13. PHP经常用到的方法,[PHP]经常用到的实用函数集合第1/2页
  14. Php与Mysql关系揭秘
  15. unable to save settings.xml error 拒绝访问
  16. 2020,网络安全领域有什么新趋势
  17. If-else与三目运算符的区别
  18. 三维点云处理-chap1
  19. basic计算机编程基础,QBASIC编程语言基础
  20. 重装系统后通过修改注册表实现记录还原

热门文章

  1. Docker容器化部署及应用实战
  2. SpringCloud + RocketMQ实现最大努力通知型事务
  3. Redis分布式锁零散知识
  4. Spring中的@Autowired,@Qualifier和@Primary注解
  5. servlet之监听器
  6. 【译】给小白准备的Web架构基础知识
  7. leetcode 两数之和 java版本
  8. ARM汇编初探---汇编代码中都有哪几类指令---ARM伪指令介绍
  9. 转载的关于pthread_cond_wait的文章,写的比较详细
  10. 判断Exe文件是否正在运行的函数