如何在一个WEB程序里 同时连接多个数据库

馒头虫 2009-11-09 11:31:10
需求如下:
做一个中间服务器 对多个数据库的数据进行格式化 并以WEBSERVICE的方式提供给第三方使用

现在的问题是 可能同时需要对多个数据库进行访问 功能都是一样的 但是数据库类型、结构都有可能不同,用什么样的方式最好。数据量不大
框架是SSH。
...全文
840 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxh_722 2011-10-18
  • 打赏
  • 举报
回复
馒头虫 2009-11-11
  • 打赏
  • 举报
回复
感谢大家的帮助
xsm 2009-11-10
  • 打赏
  • 举报
回复
1、如果一个项目要从两个乃至多个数据库实例读取数据,该如何处理?
2、如果只有一个数据库oraA,为其建立建立oraA.hbm.xml以及hibernate.properties文件,该文件中的数据库连接部分写为:
## Oracle
hibernate.dialect net.sf.hibernate.dialect.OracleDialect
hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver
hibernate.connection.username username
hibernate.connection.password password
hibernate.connection.url jdbc:oracle:thin:@local:1521:ora

3、如有两个oracle数据库oraA和oraB,分别为其建立oraA.hbm.xml和oraB.hbm.xml映射文件,这样数据库中的各个表和实体持久化类就可以映射好,但是hibernate.properties中的数据库配置部分该如何处理呢,怎样才能同时连接上两个数据库实例呢?


如果用这个Configuration.configure(File configFile)
configFile可以是不同的配置。

通过配置configFile可以得到每个数据库的configuration, 也就是可以获得每个数据库实例的session;但是在hibernate.properties文件中怎么写数据库连接部分呢,一个数据库的时候写法是:hibernate.connection.url jdbc:oracle:thin:@local:1521:ora

那如果有两个数据库实例呢,在hibernate.properties文件中怎么处理,总不会是写成如下吧:
##oracle
hibernate.dialect net.sf.hibernate.dialect.OracleDialect
hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver
hibernate.connection.username username
hibernate.connection.password password
hibernate.connection.url jdbc:oracle:thin:@local:1521:oraA
hibernate.connection.username usernamet
hibernate.connection.password passwordt
hibernate.connection.url jdbc:oracle:thin:@local:1521:oraB


Answer:

写两个hibernate.properties,例如连接oraA的叫做hibernateA.properties,连接oraB的叫做hibernateB.properties。

hibernateA.properties内容如下:

引用:
hibernate.dialect net.sf.hibernate.dialect.OracleDialect
hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver
hibernate.connection.username username
hibernate.connection.password password
hibernate.connection.url jdbc:oracle:thin:@local:1521:oraA



hibernateB.properties内容如下:

引用:
hibernate.dialect net.sf.hibernate.dialect.OracleDialect
hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver
hibernate.connection.username usernamet
hibernate.connection.password passwordt
hibernate.connection.url jdbc:oracle:thin:@local:1521:oraB


程序里面:

代码:
java代码:

Configuration conf_oraA = new Configuration("/hibernateA.properties").addClass().......;

Configuration conf_oraB = new Configuration("/hibernateB.properties").addClass().......;

SessionFactory sf_oraA = conf_oraA.buildSessionFactory();
SessionFactory sf_oraB = conf_oraB.buildSessionFactory();

Session s_oraA = sf_oraA.openSession();
Session s_oraB = sf_oraB.openSession();

......


---------------------------------------------------------------

更正一下
方案一:
写两个hibernate.cfg.xml
使用数据库a的时候
Configuration cfg_a=new Configuration().configure(hibernate.cfg_a.xml);
使用数据库b的时候
Configuration cfg_b=new Configuration().configure(hibernate.cfg_b.xml);


方案二:
使用一个能操作两个数据库的账号,在?.hbm.xml映射文件中的class标签中指定catalog为数据库名


http://developer.51cto.com/art/200907/133239.htm
xsm 2009-11-10
  • 打赏
  • 举报
回复
http://developer.51cto.com/art/200907/133239.htm


http://www.51testing.com/html/20/1514.html
馒头虫 2009-11-09
  • 打赏
  • 举报
回复
对了 还用了连接池 proxool

如果用sessionFactory 如何去区别不同的数据库了

我的数据库连接信息是存在一个固定的数据库的 如何解决呢
huguang 2009-11-09
  • 打赏
  • 举报
回复
既然是Hibernate, 只要配置多个sessionFactory就可以
ctl_cug 2009-11-09
  • 打赏
  • 举报
回复
使用数据库连接池
馒头虫 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liua 的回复:]
<bean id="dataSource1"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="jdbcUrl">
<value>${datasource.url.base} </value>
</property>
<property name="user">
<value>${datasource.username} </value>
</property>
<property name="password">
<value>${datasource.password} </value>
</property>
              .... </bean>
<bean id="dataSource2"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">.... </bean>

有几个配几个就行
DAO中用到了那个数据库就设置那个dataSource就行了


[/Quote]

现在的问题是 我也不知道有多少个
需要动态决定有多少个数据库 这个是不一定的 有可能运行的时候还要添加删除
馒头虫 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 java2000_net 的回复:]
简单的做法,就是不同的库,提供不同的url
部署不同的应用

简单、有效、出问题的几率低
[/Quote]

您的意思 如果我下挂有100个客户 就部署100个应用 ?
紫炎圣骑 2009-11-09
  • 打赏
  • 举报
回复
就按照楼上的配置即可!
haha_king 2009-11-09
  • 打赏
  • 举报
回复
我这个事连接MYSQL和ORACLE的,看看对你有没有帮助:

<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<!-- <value>jdbc:mysql://193.168.4.2:3306/consumer?useUnicode=true&characterEncoding=utf-8&autoReconnect=true</value> -->
<value>jdbc:mysql://193.168.1.200:3306/consume?useUnicode=true&characterEncoding=utf-8&autoReconnect=true</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>1234</value>
</property>

</bean>
<bean id="oracleDataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@193.168.1.6:1521:oracle9</value>
</property>
<property name="username">
<value>username</value>
</property>
<property name="password">
<value>password</value>
</property>
</bean>
lzh_me 2009-11-09
  • 打赏
  • 举报
回复
mark
老紫竹 2009-11-09
  • 打赏
  • 举报
回复
简单的做法,就是不同的库,提供不同的url
部署不同的应用

简单、有效、出问题的几率低
luffyke 2009-11-09
  • 打赏
  • 举报
回复
用数据库连接池
jingshuaizhjason 2009-11-09
  • 打赏
  • 举报
回复
up
liua 2009-11-09
  • 打赏
  • 举报
回复
<bean id="dataSource1"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="jdbcUrl">
<value>${datasource.url.base}</value>
</property>
<property name="user">
<value>${datasource.username}</value>
</property>
<property name="password">
<value>${datasource.password}</value>
</property>
....</bean>
<bean id="dataSource2"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">....</bean>

有几个配几个就行
DAO中用到了那个数据库就设置那个dataSource就行了

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧