JNDI(Java Naming and Directory Interface)是一种标准的Java API,它允许Java应用程序以通用的方式访问命名和目录服务,如DNS(域名系统),LDAP(轻量级目录访问协议)和NIS(网络信息服务)。在Java应用程序中,JNDI通常用于访问数据库,以便在运行时动态获取数据源的信息。本文将详细解释JNDI的基础知识和如何使用JNDI来访问数据库。
JNDI概述
JNDI是一种用于查找和访问Java对象的API,它提供了一个通用的命名系统,以便可以通过名称来访问对象。在Java应用程序中,JNDI的主要用途是访问命名服务和目录服务,以便在运行时动态获取服务的信息。例如,JNDI可用于访问文件系统中的文件,LDAP目录中的条目,Web服务中的servlet和P等。
JNDI的设计模式是责任链模式,该模式为请求定义了一系列的对象,将请求的发送和接收对象分开,并允许多个对象都有机会处理请求。在JNDI中,查找操作是由多个上下文(context)对象处理的,每个上下文对象都有一个称为绑定(binding)的队列,它存储了一组名称和对象之间的映射关系。当使用JNDI查找对象时,JNDI将从一个上下文对象开始,然后沿着命名层次结构依次访问每个上下文对象,直到找到要查找的对象或到达命名层次结构的末尾。
JNDI的核心接口是Context接口,它定义了一组方法,用于查找、绑定、解绑、重命名和列举绑定对象。Context接口的实现类包括InitialContext和DirContext,其中InitialContext用于访问命名服务,而DirContext用于访问目录服务。如果您只需要访问命名服务,则可以使用InitialContext,如果需要访问目录服务,则需要使用DirContext。
JNDI数据库访问
在Java应用程序中,JNDI通常用于访问数据库。通过JNDI访问数据库具有以下优点:
– 隐藏了数据库的连接细节和认证信息,使得数据库的配置和维护更加灵活和安全。
– 允许运行时动态获取数据源的信息,例如数据源的位置、用户名和密码,从而实现数据库访问的透明化。
在使用JNDI访问数据库之前,您需要在应用程序服务器中配置数据源,并将其在JNDI命名空间中进行绑定。数据源是一种连接池,它管理数据库连接的创建、使用和销毁,并在需要时提供连接,使得数据库连接变得更加高效和可靠。常用的Java应用程序服务器,如Tomcat、WebLogic、WebSphere和JBoss,都支持通过JNDI访问数据库。
下面是使用JNDI访问数据库的基本步骤:
1. 在应用程序服务器中配置数据源。这通常需要在应用程序服务器的管理界面中进行配置,包括配置数据源的名称、数据库的URL、用户名和密码等信息。
2. 在应用程序中获取JNDI上下文对象。这可以使用InitialContext类的无参构造函数来完成。例如,以下代码获取了默认的JNDI上下文对象:
“`
Context ctx = new InitialContext();
“`
3. 在JNDI命名空间中查找数据源。这可以使用Context的lookup方法来完成。例如,以下代码查找了名为jdbc/myDataSource的数据源:
“`
DataSource ds = (DataSource)ctx.lookup(“java:comp/env/jdbc/myDataSource”);
“`
4. 使用数据源创建数据库连接。这可以使用数据源的getConnection方法来完成。例如,以下代码使用数据源创建了数据库连接:
“`
Connection conn = ds.getConnection();
“`
5. 执行数据库操作。一旦获取了数据库连接,就可以使用Java的数据库接口(如JDBC)执行数据库操作,例如执行SQL查询、更新等操作。例如,以下代码使用JDBC执行了一个SELECT查询:
“`
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(“SELECT * FROM myTable”);
while (rs.next()) {
// handle result set
}
“`
6. 关闭连接和其他资源。在完成数据库操作后,您需要手动关闭连接和其他资源,以释放连接和资源。例如,以下代码关闭了连接、语句和结果集:
“`
rs.close();
stmt.close();
conn.close();
“`
本文介绍了JNDI的基础知识,以及如何使用JNDI来访问数据库。通过JNDI访问数据库可以实现数据库访问的透明化和管理的灵活性,并提高了数据库连接的效率和可靠性。本文希望为您提供了一些有用的指南和示例,帮助您更好地了解和使用JNDI。
相关问题拓展阅读:
java如何访问数据库
jdbc,连接池
Java可以使用JDBC访问数据库,也可以使用各类ORM框架访问数据库,但这些框架最终还是通过JDBC访问数据库,它们只是封装了数据库操作,而使得开发者可以减少这雀困部分消耗。因此,本文只讲解JDBC访问方式。
JDBC访问一般分为如下流程:
1、加载JDBC驱动程序:
在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),
这通过java.lang.Class类的静态方法forName(String className)实现嫌老。
例如:
try{
//加载MySql的驱动类
Class.forName(“com.mysql.jdbc.Driver”) ;
}catch(ClassNotFoundException e){
System.out.println(“找不到驱动程序类 ,加载驱动失败!”);
e.printStackTrace() ;
}
成功加载后,会将Driver类的实例注册到DriverManager类中。
2、提供JDBC连接的URL
•连接URL定义了连接数据库时的协议、子协议、数据源标识。
•书写形式:协议:子协议:数据源标识
协议:在JDBC中总是以jdbc开始
子协议:是桥连接的驱动程序或是数据库管理系统名称。
数据源标识:标记找到数据库来源的地址与连接端口。
例如:(MySql的连接URL)
jdbc: ;
useUnicode=true:表示使用Unicode字符集。如果characterEncoding设置为
gb2312或GBK,本参数必须设置为true 。characterEncoding=gbk:字符编码方式。
3、创建数据库的连接
•要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象就代表一个数据库的连接。
•使用DriverManager的getConnectin(String url,String username,String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和密码来获得。
例如:
//连接MySql数据库,用户名和密码都是root
String url = “jdbc: ;
String username = “root” ;
String password = “root” ;
try{
Connection con =
DriverManager.getConnection(url , username , password ) ;
}catch(SQLException se){
System.out.println(“数据库连接失败!”);
se.printStackTrace() ;
}
4、创建一个Statement
•要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3种类型:
1、执行静态SQL语句。通常通过Statement实例实现。
2、执行动态SQL语句。通常通过PreparedStatement实例实现。
3、执行数据库存芹岁升储过程。通常通过CallableStatement实例实现。
具体的实现方式:
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ;
CallableStatement cstmt = con.prepareCall(“{CALL demoSp(? , ?)}”) ;
5、执行SQL语句
Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate和execute
1、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。
2、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。
具体实现的代码:
ResultSet rs = stmt.executeQuery(“SELECT * FROM …”) ;
int rows = stmt.executeUpdate(“INSERT INTO …”) ;
boolean flag = stmt.execute(String sql) ;
6、处理结果
两种情况:
1、执行更新返回的是本次操作影响到的记录数。
2、执行查询返回的结果是一个ResultSet对象。
•ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些行中数据的访问。
•使用结果集(ResultSet)对象的访问方法获取数据:
while(rs.next()){
String name = rs.getString(“name”) ;
String pass = rs.getString(1); // 此方法比较高效(列是从左到右编号的,并且从列1开始)
}
7、关闭JDBC对象
操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:
1、关闭记录集
2、关闭声明
3、关闭连接对象
if(rs != null){ // 关闭记录集
try{
rs.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(stmt != null){ // 关闭声明
try{
stmt.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(conn != null){ // 关闭连接对象
try{
conn.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
JAVA连接数据库的方式有多种:
根据所需要的不同数据库驱动分,分为四种:
1:1类驱动。这就是JDBC-ODBC桥的方式。但这种方式不适合程序的重用与维护,不推荐使用。需要数据库的ODBC驱动。
2:2类驱动。这就是JDBC+厂商API的形式。厂商API一般使用C编写,所以,这种方式也不长使用。
3:3类驱动。这就是JDBC+厂商Database Connection Server+DataBase的形式。
这种方法就是在JAVA 与 DATABASE之间价起了一台专门用与数据库连接的服务器(一般由数据库厂商提供)。他的好处在于能优化连接。
4:4类驱动。这就是纯JDBC+DATABASE的连接方式。也是推荐的连接方式。这使衡芹枣得APPLICATION与数据库分开,开发者只需关心内部逻辑的实现而不需注重数咐拆据库连接的具体实现。在这其中有两种连接的方式:
硬编码方式,就是在程序中硬性编入数据库连接的所须参数。
JNDI DataSource方式。就是在程序运行的外布环境中又称(Context)设置一个datasource数据源,有一个jndi 名称,程序只须查找此名称就首薯可得到一个数据库连接的对象。
jdbc如何通过代理服务器访问数据库?
B服务器部署数中毁据访问层的程序,可以用Web Service或可以用JNDI访问到的组件如EJB等
C服务器上宏兄面的程序调用蔽培袭Web Service发布的功能,或通过JNDI访问EJB上的Remote接口来获取数据
关于怎么使用jndi访问数据库的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
来源地址:简明易懂的JNDI数据库访问指南 (怎么使用jndi访问数据库)
转载声明:本站文章若无特别说明,皆为原创,转载请注明来源:www.88531.cn资享网,谢谢!^^