一、JDBC

1.1 JDBC简介

Java Database Connectivity (JDBC)是一个标准的Java API,它由一组类和接口组成,Java应用程序开发人员使用它来访问数据库和执行SQL语句。

简单解释就是JDBC用来连接数据库和执行SQL语句,但是它最大的特点是通过java程序去找数据库驱动,然后来连接数据库

1.2 使用方式

        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) {
	        	  e.printStackTrace();
	          }  
	         }
        }

二、JNDI

2.1 JNDI简介

JNDI(Java Name Directory Interface,Java命名和目录接口),它不仅仅是进行数据库定位的,它是给当前应用服务器所管理的所有资源一个唯一的标识,包括数据库,网页,文件,连接池等等。

JNDI提供了一种统一的方式,可以用在网络上查找和访问服务。通过指定一个资源名称,该名称对应于数据库或命名服务中的一个记录,同时返回数据库连接建立所必须的信息。

JNDI主要有两部分组成:应用程序编程接口和服务供应商接口。应用程序编程接口提供了Java应用程序访问各种命名和目录服务的功能,服务供应商接口提供了任意一种服务的供应商使用的功能。

JNDI不单单是用来连接数据库的,它是通过命名服务来找到数据库并返回数据库连接,当然JNDI还可以管理当前应用服务器上的其他资源,如网页,文件等,它用来连接数据库时和JDBC最大的区别就是它是通过应用服务器配置(如Tomcat)的配置文件context.xml来找数据库驱动的,其次就是JDBC连接能承受的同时请求数太低了,JNDI连接池连接与之相比会好很多。

2.2 使用方式

首先,在在J2EE容器中配置JNDI参数,定义一个数据源,也就是JDBC引用参数,给这个数据源设置一个名称;然后,在程序中,通过数据源名称引用数据源从而访问后台数据库。
具体操作如下(以JBoss为例):
mysql-ds.xml

<? xml version="1.0" encoding="UTF-8" ?>
 < datasources >
 < local-tx-datasource >
     < jndi-name > MySqlDS </ jndi-name >
     < connection-url > jdbc:mysql://localhost:3306/lw </ connection-url >
     < driver-class > com.mysql.jdbc.Driver </ driver-class >
     < user-name > root </ user-name >
     < password > rootpassword </ password >
 < exception-sorter-class-name > org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter </ exception-sorter-class-name >
     < metadata >
        < type-mapping > mySQL </ type-mapping >
     </ metadata >
 </ local-tx-datasource >
 </ datasources >

然后在程序中引用数据源

            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) {
		        		e.printStackTrace();
		        	}  
	        	}
        	}

直接使用JDBC或者通过JNDI引用数据源的编程代码量相差无几,但是现在的程序可以不用关心具体JDBC参数了。
在系统部署后,如果数据库的相关参数变更,只需要重新配置 mysql-ds.xml 修改其中的JDBC参数,只要保证数据源的名称不变,那么程序源代码就无需修改。

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

原文链接
https://blog.csdn.net/cchheennhhaaoo119/article/details/2234554
参考文章
https://blog.csdn.net/ibigboy/article/details/84309064

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐