本文讲述了在Jboss 5中配置DataSource,连接到oracle11g数据库,通过jndi访问DataSource,使用Databasemetadata获取数据库信息(所有的表名,指定表中的字段等)
1下载jboss,然后解压到某个目录,博主放在了D:\jboss-5.1.0.GA这个目录
2将oracle jdbc驱动包拷贝到 ${jbosshome}(jboss根目录)下的server\default\lib目录下(因为jboss没有自带oracle的驱动包)
3拷贝${jbosshome}/jboss-5.0.1.GA/docs/examples/jca/oracle-ds.xml文件(jboss将一些示例的配置文件放在了/docs/example目录下)到${Jboss根目录}/server/default/deploy目录下,并做以下修改:
<?xml version="1.0" encoding="UTF-8"?> <datasources> <local-tx-datasource> <jndi-name>oracleDs</jndi-name> <use-java-context>false</use-java-context> <connection-url>jdbc:oracle:thin:@${ip}:1521:orcl</connection-url> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <user-name>${userName}</user-name> <password>${password}</password> <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name> <metadata> <type-mapping>Oracle11g</type-mapping> </metadata> </local-tx-datasource> </datasources>
关于jboss数据源配置文件中use-java-context的说明(这个是比较复杂的), 请参照博主转载的另一篇文章,文章里面介绍的比较清晰(链接:http://my.oschina.net/u/1427420/blog/336896)
4编写一个web项目并部署到jboss目录下(要介绍使用jboss客户端连接jndi数据源的话,相对比较复杂,本文简单一点,就介绍一个简单的方式)。 下面是一个有关在jsp中获取jboss数据源的:
<%@page import="java.sql.*"%> <%@page import="javax.sql.DataSource"%> <%@page import="javax.naming.*"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% try { Context ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("oracleDs"); Connection conn = ds.getConnection(); DatabaseMetaData dbmd = conn.getMetaData(); /** 获得所有表 第二个参数是一定要的,代笔用户名,且必须为大写 **/ ResultSet rs = dbmd.getTables(null,"SCOTT", "%", new String[]{ "table"}); while(rs.next()){ String tableName = rs.getString("TABLE_NAME"); //do someing tableName } //获得一个表的所有列,相当于desc ${tableName} ResultSet columnRs = dbmd.getColumns(null,null,”emp”,”%”); while(columnRs.next()){ String columnName = rs.getString("COLUMN_NAME"); //do someing columnName } /** 一定要关闭Connection,要不然jboss会报错 **/ conn.close(); } catch (Exception e) { response.getWriter().println(e.getMessage()); } %>
在这个程序中,使用了jndi获取jboss定义的oracle数据源,并使用DatabaseMetaData进行了数据库信息的相关解析。使用DatabaseMetaData获取所有表名、一个表的所有列名的好处就是跨数据库通用(博主最近项目就需要做这方面的事,如果使用数据库专用的一些sql来解决的话,就不够通用了)