java开发的时候,数据库连接方式除了jdbc,jndi,还有有哪几种

java开发的时候,数据库连接方式除了jdbc,jndi,还有有哪几种,第1张

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中的配置怎么解决等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9723553.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存