
java开发的时候,数据库连接方式除了jdbc,jndi,还有JDBC-ODBC桥的方式、JDBC+厂商Database Connection Server+DataBase的形式和纯JDBC+DATABASE的连接方式。推荐选择千锋教育,千锋教育服务面对企业建立全方位、立体化、遍布全国的企业合作网络,覆盖全国一线二线城市大中小型公司。
Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。例如,Java不支持go to语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的 *** 作符过载(overload)和多继承特征,并且不使用主文件,免去了预处理程序。因为Java没有结构,数组和串都是对象,所以不需要指针。Java能够自动处理对象的引用和间接引用,实现自动的无用单元收集,使用户不必为存储管理问题烦恼,能更多的时间和精力花在研发上。
想要了解更多Java培训的相关信息,推荐咨询千锋教育。千锋教育成立教研学科中心,推出贴近企业需求的线下技能培训课程。采用全程面授高品质、高体验培养模式,学科大纲紧跟企业需求,拥有国内一体化教学管理及学员服务,在职业教育发展道路上不断探索前行。
你是使用JNDI获得数据源对象的吗?如果是:
1,、配置contextxml文件
<Context>
<Resource name="jdbc/news"
auth="Container"
type="javaxsqlDataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="jbit"
password="dbqn"'
driverClassName="OraclejdbcdriverOracleDriver"
url="jdbc:oracle:thin:@localhost:1521:daataName"
</Context>
以上用的是Oracle数据库的驱动和url
你可以换成SQL的
2、配置webxml文件
<resource-ref>
<res-auth>Container</res-auth>
<res-type>javaxsqlDataSource</res-type>
<res-ref-name>jdbc/news</res-ref-name>
</resource-ref>
3、添加数据库驱动
4、在javaBean中编写代码,使用lookup()方法获得数据源对象
public class BaseDAO {
private static Connection conn = null;
public static Connection getConnection() {
try {
Context context = new InitialContext();
DataSource ds = (DataSource) context
lookup("java:comp/env/jdbc/news");
conn = dsgetConnection();
} catch (Exception e) {
eprintStackTrace();
}
return conn;
}
}
注:lookup("java:comp/env/jdbc/news");
中的参数"java:comp/env/"+数据源名称的形式
如果你要的话我正好有这Struts2的项目我可以给你看看
使用JTA事务,jboss,weblogic,websphere 等等ejb容器都自带了jta事务的支持,如果你使用tomcat,jetty或者其他web容器,则需要安装第三方的jta插件,假定这里使用jboss容器,则需要在jboss中配置JNDI数据源,比如有两个mysql的数据源需要被JTA管理,则需要在jboss的server/default/deploy目录下新建两个数据源文件app1-dsxml和app2-dsxml,这里只拿一个文件做例子,内容如下所示:
<datasources>
<xa-datasource>
<jndi-name>MySqlDS1</jndi-name>
<xa-datasource-class>
commysqljdbcjdbc2optionalMysqlXADataSource
</xa-datasource-class>
<xa-datasource-property name="URL">
jdbc:mysql://localhost:3306/test
</xa-datasource-property>
<user-name>root</user-name>
<password>root</password>
<use-java-context>false</use-java-context>
<track-connection-by-tx>true</track-connection-by-tx>
<exception-sorter-class-name>
orgjbossresourceadapterjdbcvendorMySQLExceptionSorter
</exception-sorter-class-name>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</xa-datasource>
</datasources>
完成JNDI数据源配置后,需要在spring中获取JNDI数据源,配置如下:
<bean id="dataSource1" class="orgspringframeworkjndiJndiObjectFactoryBean">
<property name="jndiName" value="MySqlDS1" />
<property name="lookupOnStartup" value="true" />
</bean>
<bean id="dataSource2" class="orgspringframeworkjndiJndiObjectFactoryBean">
<property name="jndiName" value="MySqlDS2" />
<property name="lookupOnStartup" value="true" />
</bean>
然后定义JTA事务如下:
<bean id="transactionManager-xa"
class="orgspringframeworktransactionjtaJtaTransactionManager">
<property name="transactionManagerName" value="java:/TransactionManager" />
</bean>
通过声明式事务模板(代理),指定目标类的特定方法采用JTA事务:
<bean
class="orgspringframeworktransactioninterceptorTransactionProxyFactoryBean">
<property >
<ref bean="transactionManager-xa" />
</property>
<property >
<ref local="accountsInfoDAO" /> <!-- 目标类 -->
</property>
<property >
<props>
<prop key="insert">PROPAGATION_REQUIRED</prop>
<prop key="update">PROPAGATION_REQUIRED</prop>
<prop key="delete">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
tomcat的话,serverxml中配置!
<Context docBase="super" path="/super" reloadable="true" source="orgeclipsejstj2eeserver:super">
<Resource auth="Container" driverClassName="oraclejdbcdriverOracleDriver" maxActive="5" maxIdle="100" maxWait="10000" name="jdbc/??" password="??" type="javaxsqlDataSource" url="jdbc:oracle:thin:@localhost:1521:orcl" username="??"/>
</Context>
一般小系统用JDBC来连接数据库,
比较大的项目,肯定使用连接池。
在使用tomcat服务器时,必然要用它的连接池
我们调用依靠JNDI(Java命名服务)
需要配置,和调用的代码吗?
JNDI的全称是java命名与目录接口(Java Naming and Directory
Interface),是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口。我们可以把JNDI简单地理解为是一种将对象和名字绑定的技术,即指定一个资源名称,将该名称与某一资源或服务相关联,当需要访问其他组件和资源时,就需要使用JNDI服务进行定位,应用程序可以通过名字获取对应的对象或服务。
1contextxml文件设置
数据源:Tomcat根目录\conf\contextxml文件(没有直接创建也可以)或者在JSP项目WebRoot目录下的META-INF目录中创建一个contextxml文件,添加Context节点,如下:
1 <Context>
2 <Resource name="jdbc/test" auth="Application" type="javaxsqlDataSource"
3 maxActive="100" maxIdle="30" maxWait="10000" username="sa" password="1234"
4 driverClassName="commicrosoftsqlserverjdbcSQLServerDriver" url="jdbc:sqlserver://1921682254:1433;DatabaseName=test" />
5 </Context>
name:指定Resource的JNDI名字。
auth:可以写成Container和Application。Container表示由容器创建Resource,Application表示由Web应用创建和管理Resource。
type:指定Resource所属的Java类名。
maxActive:指定数据库连接池中处于活动状态的数据库连接的最大数目。
maxIdle:指定数据库连接池中处于空闲状态的数据库连接的最大数目,取值为0表示不受限制。
maxWait:指定数据库连接池中数据库连接处于空闲状态的最长时间(以毫秒为单位),超出这时间将会抛出异常。
username:指定连接数据库的用户名。
password:指定连接数据库的口令。
driverClassName:指定连接数据库的JDBC驱动程序。
url:指定连接数据库的URL。
2webxml文件的配置
在Web应用程序的WEB-INF/webxml文件中的<web-app>节点下添加<resource-ref>元素,内容如下:
1 <web-app>
2
3 <resource-ref>
4 <description>news DataSource</description>
5 <res-ref-name>jdbc/test</res-ref-name>
6 <res-type>javaxsqlDataSource</res-type>
7 <res-auth>Container</res-auth>
8 </resource-ref>
9 </web-app>
description:对所引用资源的说明。
res-ref-name:指定所引用资源的JNDI名字,与<Resource>元素中的name属性对应。
res-type:指定所引用资源的类名字,与<Resource>元素中的type属性对应。
res-auth:指定管理所引用资源的Manager,与<Resource>元素中的auth属性对应。
3在Web应用中添加数据库连接jar文件。
4编写使用数据源和JNDI资源,创建采用数据库连接池Connection对象的SqlHelperjava文件(在helper包中创建的),代码如下:
1 package helper;
2 import javalangreflect;
3 import javasql;
4 import javautil;
5
6 import javaxnamingContext;
7 import javaxnamingInitialContext;
8 import javaxnamingNamingException;
9 import javaxsqlDataSource;
10
11 public class SqlHelper {
12
13 private static Connection getConnection() throws ClassNotFoundException,
14 SQLException {
15 Connection conn = null;
16 try {
17 Context ctx = new InitialContext();
18 // 获取与逻辑名相关联的数据源对象
19 DataSource ds = (DataSource) ctxlookup("java:comp/env/jdbc/test");
20 conn = dsgetConnection();
21 } catch (NamingException e) {
22 // TODO Auto-generated catch block
23 eprintStackTrace();
24 } catch (SQLException e) {
25 // TODO Auto-generated catch block
26 eprintStackTrace();
27 }
28 return conn;
29 }
30
31 public static int executeNonQuery(String cmdText)
32 throws ClassNotFoundException, SQLException {
33 int result = -1;
34 Connection con = null;
35 PreparedStatement ps = null;
36 try {
37 con = getConnection();
38 ps = conprepareStatement(cmdText);
39 result = psexecuteUpdate();
40 }catch (Exception e) {
41 Systemoutprintln(e);
42 } finally {
43 close(con, ps, null);
44 }
45 return result;
46 }
47
48 public static int executeScalar(String cmdText) throws SQLException,
49 ClassNotFoundException {
50 int result = -1;
51 Connection con = null;
52 PreparedStatement ps = null;
53 ResultSet rs = null;
54 try {
55 con = getConnection();
56 ps = conprepareStatement(cmdText);
57 rs = psexecuteQuery();
58 if (rsnext()) {
59 result = rsgetInt(1);
60 }
61 }catch (Exception e) {
62 Systemoutprintln(e);
63 } finally {
64 close(con, ps, rs);
65 }
66 return result;
67 }
68
69 public static <T> List<T> executeList(Class<T> cls, String cmdText)
70 throws ClassNotFoundException, SQLException,
71 InstantiationException, IllegalAccessException {
72 List<T> list = new ArrayList<T>();
73 Connection con = null;
74 PreparedStatement ps = null;
75 ResultSet rs = null;
76 try {
77 con = getConnection();
78 ps = conprepareStatement(cmdText);
79 rs = psexecuteQuery();
80 while (rsnext()) {
81 T obj = executeResultSet(cls, rs);
82 listadd(obj);
83 }
84 } catch (Exception e) {
85 Systemoutprintln(e);
86 }finally {
87 close(con, ps, rs);
88 }
89 return list;
90 }
91
92 public static <T> T executeEntity(Class<T> cls, String cmdText)
93 throws SQLException, ClassNotFoundException,
94 InstantiationException, IllegalAccessException {
95 T obj = null;
96 Connection con = null;
97 PreparedStatement ps = null;
98 ResultSet rs = null;
99 try {
100 con = getConnection();
101 ps = conprepareStatement(cmdText);
102 rs = psexecuteQuery();
103 while (rsnext()) {
104 obj = executeResultSet(cls, rs);
105 break;
106 }
107 } catch (Exception e) {
108 Systemoutprintln(e);
109 }finally {
110 close(con, ps, rs);
111 }
112 return obj;
113 }
114
115 private static <T> T executeResultSet(Class<T> cls, ResultSet rs)
116 throws InstantiationException, IllegalAccessException, SQLException {
117 T obj = clsnewInstance();
118 ResultSetMetaData rsm = rsgetMetaData();
119 int columnCount = rsmgetColumnCount();
120 // Field[] fields = clsgetFields();
121 Field[] fields = clsgetDeclaredFields();
122 for (int i = 0; i < fieldslength; i++) {
123 Field field = fields[i];
124 String fieldName = fieldgetName();
125 for (int j = 1; j <= columnCount; j++) {
126 String columnName = rsmgetColumnName(j);
127 if (fieldNameequalsIgnoreCase(columnName)) {
128 Object value = rsgetObject(j);
129 fieldsetAccessible(true);
130 fieldset(obj, value);
131 break;
132 }
133 }
134 }
135 return obj;
136 }
137
138 private static void close(Connection con, PreparedStatement ps, ResultSet rs)
139 throws SQLException {
140 if (rs != null) {
141 rsclose();
142 rs = null;
143 }
144 if (ps != null ) {
145 psclose();
146 ps = null;
147 }
148 if (con != null) {
149 conclose();
150 con = null;
151 }
152 }
153 }
View Code
5搭建entity,dal,bll包。(三层是从net开发转过来的,也可以使用do包,dao包)。
6JSP页面使用代码如下:
1 <%@ page language="java" import="javautil,bll,entity" pageEncoding="UTF-8"%>
2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 401 Transitional//EN">
3 <html>
4 <head>
5 <title>采用数据源和JNDI资源方式,创建并使用数据库连接池对象访问数据库实例。</title>
6 </head>
7 <body>
8 <div>
9 <h1>采用数据源和JNDI资源方式,创建并使用数据库连接池对象访问数据库实例。</h1>
10 <%
11 List<Student> list = StudentBLLSelect();
12 for (Student student : list) {
13 outprintln(Stringformat(
14 "<ol><li>StudentId:%d</li><li>StudentName:%s</li><li>Phone:%s</li><li>Email:%s</li><li>Address:%s</li></ol>",
15 studentgetStudentId(), studentgetStudentName(),
16 studentgetPhone(), studentgetEmail(),
17 studentgetAddress()));
18 }
19 %>
20 </div>
21 </body>
22 </html>
View Code
7如果Context文件中auth属性设置为:Container,需要将数据库连接的jar文件复制到Tomcat的lib目录下。如果auth属性设置为:Application,则不需要复制到Tomcat的lib目录下。
8部署运行界面大功告成。
以上就是关于java开发的时候,数据库连接方式除了jdbc,jndi,还有有哪几种全部的内容,包括:java开发的时候,数据库连接方式除了jdbc,jndi,还有有哪几种、如何java类中如何取得在xml文件查询数据库的结果、关于spring中的配置怎么解决等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)