注册 登录
编程论坛 J2EE论坛

[求助]EJB连sqlserver的例子谁有啊?

小恶魔 发布于 2007-03-16 21:05, 1075 次点击
哪位大哥有EJB连数据库的例子,ODBC那种,不需要装驱动的!
我不是太懂,但是实在是急,说得对与错请您包含,只要点事例代码!
11 回复
#2
球球2007-03-17 11:58

虽然我还没学EJB,但我在网上搜索到一堆关于这方面的问题及答案.......

三、建立数据库连接

  EJB 容器维护数据库的连接池,这个连接池对 EJB 组件来说是透明的。当EJB 组件申请一个连接时,EJB 容器从连接池中提取一个连接并分配给组件。由于EJB 容器只是分配一个连接给 EJB 组件,所以组件很快就获得这个连接并连接数据库。数据库调用之后,组件就可以释放连接,这样它又可以快速申请到另一个连接。又因为一个组件只占用这个连接很短的时间,从而同一个连接可以被多个组件使用。
  组件不是通过数据库的绝对名来连接数据库,而是用逻辑名连接到数据库, 即用 JNDI lookup 来获得数据库连接,例如:在下面例子中的AccountEJB 类中,连接数据库有以下几个步骤:
  1、指定数据库的逻辑名:
  private String dbName = "java:comp/env/jdbc/AccountDB";
  2、获得数据源:
  InitialContext ic = new InitialContext();
  DataSource ds = (DataSource) ic.lookup(dbName);
  3、从数据源得到数据库连接:
  Connection con = ds.getConnection();

  这种间接的连接数据库有以下几个优点:
  · 可以在具有不同的数据库名的不同环境中部署相同的 EJB 组件。
  · 可以在多个应用中重用EJB 组件。
  · 可以集成 EJB 组件到运行在分布环境的应用系统中。

  另外,EJB 规范没有要求 J2EE的实现支持某一个特别类型的数据库系统,因此EJB 组件可以连接到不同的数据库系统。

#3
风月_无边2007-03-17 15:01
1、指定数据库的逻辑名:
  private String dbName = "java:comp/env/jdbc/AccountDB";
";

这个数据库的逻辑名什么意思?
#4
球球2007-03-17 20:33
数据库名
#5
风月_无边2007-03-17 21:12

是数据库的路径吗?

#6
千里冰封2007-03-18 10:34

我这里用JBOSS的EJB容易做一个例子

你得做一个XML文档,里面声明了数据源的一些配置

[CODE]
<!--文件名:mssql-ds.xml-->
<datasources>
<local-tx-datasource>
<jndi-name>MSSQLDS</jndi-name>
<connection-url>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=testEJB</connection-url>
<driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class>
<user-name>sa</user-name>
<password>123456</password>
<!-- sql to call when connection is created
<new-connection-sql>some arbitrary sql</new-connection-sql>
-->
<!-- sql to call on an existing pooled connection when it is obtained from pool
<check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
-->
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
<metadata>
<type-mapping>MS SQLSERVER2000</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>[/CODE]

以上的一些参数,你可以换成你自己想要的参数,比如connection-url,我这里用的是直连,如果你的JDBC:ODBC的话,也可以换成你自己的URL,用户名密码,你自己填 ,如果密码为空,就留空,关键的一点,jndi-name是EJB找到这个数据源的标志,这个名字你要记住,你可以换成任何你自己喜欢的名字

然后就可以用实体BEAN来访问它了
实体BEAN的配置文件如下
persistence.xml
[CODE]<persistence>
<persistence-unit name="hadeslee">
<jta-data-source>java:/MSSQLDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
</properties>
</persistence-unit>
</persistence> [/CODE]

然后你可以用JNDI获得DataSource
不过既然你都用了EJB了,就干脆把你的表映射成一个个EntityBean多好

如果你是初学者的话,建议先把JAVA SE的一些基础学好再来搞EJB

#7
神vLinux飘飘2007-03-18 10:48
老千那样弄是需要安装驱动的~~人家要求是ODBC
#8
风月_无边2007-03-18 10:48
,看来 这里除了冰封搞过EJB。   
#9
千里冰封2007-03-18 10:51
以下是引用神vLinux飘飘在2007-3-18 10:48:00的发言:
老千那样弄是需要安装驱动的~~人家要求是ODBC

我不是叫他把URL改为jdbc:odbc的格式吗

#10
神vLinux飘飘2007-03-18 10:53
哦,没仔细看
#11
千里冰封2007-03-18 10:54
你的那个工程的地址呢(SVN)
#12
小恶魔2007-03-18 21:16
谢谢大家了,我自己搞定了,网络真是好东西。
原先说冰峰大哥“自私鬼”,只是一急之下 有点激动,
谢谢了,我虽然最上说你不是,但是说实话我很敬佩你的!
ASP论坛的人都知道的!
1