数据库与数据库之间的数据交互

1. 背景

中间库主要用于解决一个大系统多个数据库,其中多个数据库作用是:用于备份数据或者用于存储业务数据等;中间库还可以用于解决两个系统间的接口问题,2个系统共同操作这个中间数据库进行数据的交互。

2. 环境

本实例使用的数据库都是MYSQL,还充分利用了Spring的IOC注入和JdbcTemplate技术。将以下Jar包导进java工程:commons-logging-1.0.4.jar、mysql-connector-java-5.0.3-bin.jar和spring.jar。MYDB数据库是应用系统的数据库,MYTEMPDB数据库是中间数据库;一个应用系统向这个中间库写数据,另一个系统从中间库获取数据。

3.新建数据库,在MySql中执行如下脚本:

#############################################################################################
CREATE DATABASE MYDB;
use MYDB;
Drop TABLE IF EXISTS `MYDB`.`student`;
Create TABLE `MYDB`.`student` (
`name` varchar(40) NOT NULL,
`psw` varchar(10) NOT NULL,
`enabled` boolean
);
insert into student values("lanp","lanpiao",true);
insert into student values("ph","ph",true);
insert into student values("wxh","wxh",true);
###############################################################
CREATE DATABASE MYTEMPDB;
use MYTEMPDB;
Drop TABLE IF EXISTS `MYTEMPDB`.`student`;
Create TABLE `MYTEMPDB`.`student` (
`name` varchar(40) NOT NULL,
`psw` varchar(10) NOT NULL,
`enabled` boolean
);
#############################################################################################

4.在Java工程的src下面新建beans.xml文件,用于配置Spring的注入信息,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- ================================MYDB数据源及DAO层配置===================================== -->
<bean id="dataSourceOfMyDb" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://127.0.0.1:3306/MYDB</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>157891</value>
</property>
</bean>
<bean id="jdbcTemplateOfMyDb" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource"><ref bean="dataSourceOfMyDb"/></property>
</bean>
<bean id="myDbStudentDao" class="com.lanp.dao.MyDbStudentDaoJdbc">
<property name="jdbcTemplate"><ref bean="jdbcTemplateOfMyDb"/></property>
</bean>
<!-- ================================MYTEMPDB数据源及DAO层配置===================================== -->
<bean id="dataSourceTempDb" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://127.0.0.1:3306/MYTEMPDB</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>157891</value>
</property>
</bean>
<bean id="jdbcTemplateTempDb" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource"><ref bean="dataSourceTempDb"/></property>
</bean>
<bean id="tempDbStudentDao" class="com.lanp.dao.TempDbStudentDaoJdbc">
<property name="jdbcTemplate"><ref bean="jdbcTemplateTempDb"/></property>
</bean>
</beans>

5.新建MyDbStudentDaoJdbc类,用于获取本系统中要写入中间库的数据,代码如下:

package com.lanp.dao;
import java.util.List;
import org.springframework.jdbc.core.JdbcTemplate;
/**
* 操作应用系统DAO层
* @author LanP
* @since 2011-11-04 15:00
* @version V1.0
*/
public class MyDbStudentDaoJdbc {
private JdbcTemplate jdbcTemplate;
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@SuppressWarnings("unchecked")
public List getAllStudents() {
String sql = "select * from student";
List students = jdbcTemplate.queryForList(sql);
return students;
}
}

6.新建TempDbStudentDaoJdbc类,用于向中间库写数据,代码如下:

package com.lanp.dao;
import java.util.Map;
import org.springframework.jdbc.core.JdbcTemplate;
/**
* 操作中间库DAO层
* @author LanP
* @since 2011-11-04 15:00
* @version V1.0
*/
public class TempDbStudentDaoJdbc {
private JdbcTemplate jdbcTemplate;
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@SuppressWarnings("unchecked")
public int setStudents(Map student) {
int result = 0;
if(null != student) {
if(null != student.get("name") && !"".equals(student.get("name"))
&& null != student.get("psw") && !"".equals(student.get("psw"))
&& null != student.get("enabled") && !"".equals(student.get("enabled"))) {
String sql = "insert into student values(?,?,?)";
result = jdbcTemplate.update(sql, new Object[]{student.get("name"),student.get("psw"),student.get("enabled")});
}
}
return result;
}
}

7.新建MyDbPutDataToTemp类,用于测试,代码如下:

package com.lanp;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.lanp.dao.MyDbStudentDaoJdbc;
import com.lanp.dao.TempDbStudentDaoJdbc;
/**
* 将MYDB数据库中的Student表的信息写进中间数据库MYTEMPDB表Student
* @author LanP
* @since 2011-11-04 15:00
* @version V1.0
*/
public class MyDbPutDataToTemp {
/**
* 入口
* @param args
* @throws SQLException
*/
@SuppressWarnings("unchecked")
public static void main(String[] args) throws SQLException {
//1.初始化beans.xml文件
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
//2.获取MYDB数据库Student表中的内容
MyDbStudentDaoJdbc myDbStudentDaoJdbc = (MyDbStudentDaoJdbc)ctx.getBean("myDbStudentDao");
//3.MYTEMPDB数据库表的DAO
TempDbStudentDaoJdbc tempDbStudentDaoJdbc = (TempDbStudentDaoJdbc)ctx.getBean("tempDbStudentDao");
//4.将MYDB数据库Student表中的内容插入MYTEMPDB数据库Student表
List students = myDbStudentDaoJdbc.getAllStudents();
if(null != students && students.size() > 0) {
for(int i=0;i<students.size();i++) {
Map student = (Map)students.get(i);
if(null != student) {
int result = tempDbStudentDaoJdbc.setStudents(student);
if(1 == result) {
System.out.println("成功向MYTEMPDB中间数据库Student表插入一条数据!");
} else {
System.out.println("向MYTEMPDB中间数据库Student表插入一条数据失败!");
}
}
}
}
}
}

OK,TKS!

Java实现的中间库相关推荐

  1. 细说Java主流日志工具库

    细说 Java 主流日志工具库 日志框架 java.util.logging (JUL) Log4j Logback Log4j2 Log4j vs Logback vs Log4j2 日志门面 co ...

  2. 25 个 Java 机器学习工具和库

    本列表总结了25个Java机器学习工具&库: Weka集成了数据挖掘工作的机器学习算法.这些算法可以直接应用于一个数据集上或者你可以自己编写代码来调用.Weka包括一系列的工具,如数据预处理. ...

  3. JAVA Java多线程与并发库

    Java多线程与并发库 同步方式 import javax.xml.stream.events.StartDocument;public class TestSynchronized {public ...

  4. Java日期及时间库插件 -- Joda Time.

    转载自   Java日期及时间库插件 -- Joda Time. 来到新公司工作也有一个多月了, 陆陆续续做了一些简单的项目. 今天做一个新东西的时候发现了 Joda Time的这个东西, 因为以前用 ...

  5. Java程序实现密钥库的维护

    1 Java程序列出密钥库所有条目 import java.util.*; import java.io.*; import java.security.*; public class ShowAli ...

  6. android studio秘钥库文件不存在,获得SHA1以及错误java.lang.Exception: 密钥库文件不存在: keystore...

    一:在Android studio中Terminal中切换到相应的盘符下,我的jks文件在D盘,输入keytool -v -list -keystore myfirst.jks   "myf ...

  7. 百度地图调用 keytool 错误:java.lang.Exception: 密钥库文件不存在、getLocType 167(4.9E-324)错误

    百度地图调用中遇到的坑 1. keytool 错误:java.lang.Exception: 密钥库文件不存在 2.getLocType:167 错误 获取坐标(4.9E-324) 3.getAddr ...

  8. mac下keytool 错误: java.lang.Exception: 密钥库文件不存在

    最近项目需要上线, 其中一个项目 用旧项目改成新的, 在生打包的时候, 我忽略了一个问题, 导致项目还是之前的应用,找了一下发现没有改module里的applicationId没有改, 一定一定要改 ...

  9. keytool 错误: java.lang.Exception: 密钥库文件不存在: keystore

    keytool 错误: java.lang.Exception: 密钥库文件不存在: keystore 通过Android Studio编译器获取SHA1 第一步.打开Android Studio的T ...

  10. Java高级阶段考试题库

    Java高级阶段考试题库 1.Maven中A依赖B,B依赖C,那么A可以使用C中的类吗? 答案: 此时要看B依赖C时的范围(scope),如果是compile范围则A可以使用C,如果test或prov ...

最新文章

  1. 论文阅读|How Does Batch Normalization Help Optimization
  2. php try报错程序中断,php7异常与错误处理和自定义异常
  3. OpenCV bgfg分割的实例(附完整代码)
  4. unity3d 鼠标事件穿透GUI的处理
  5. Hibernate的openSession和getCurrentSession区别
  6. C#调用Power Shell 管理Office365 执行脚本时遇到的问题
  7. 《Algorithms》—— Dijkstra 的双栈算术表达式求值算法
  8. 201671010128 2017-10-08《Java程序设计》之接口与内部类
  9. Assetbundle coustomerScripts
  10. 基本知识 100040
  11. 记一次系统蓝屏处理IRQL_NOT_LESS_OR_EQUAL
  12. 教程 | 10分钟入门数位板绘图,一张图足以说明方法!
  13. FOR ALL ENTRIES IN
  14. 深度学习(3):基于人脸的性别和年龄判断
  15. solr整合paoding分词注意的一些细节
  16. 7.Docker容器使用辅助工具汇总
  17. 药品名智能分类模型(化药_中成药_中药材)
  18. 10月1日 - 10月7日,国庆
  19. Pilotedit中文乱码解决办法
  20. 最近调试HEVC中码率控制, 发现HM里面一个重大bug

热门文章

  1. html水印生成pdf,如何在jsPDF中添加PDF生成水印?
  2. MATLAB对CT图读取,写入
  3. js声明变量过程,程序都做了什么?
  4. linux可运行的steam游戏吗,Steam现在可以在Linux上玩仅Windows游戏
  5. 一个词语解释了我万千的苦闷
  6. html显示tif图片,呈现HTML中的TIF文件
  7. sqlite库学习(7)sqlite读取
  8. 完美商业计划书全攻略
  9. java贪吃蛇设计答辩PPT_基于Java的贪吃蛇游戏答辩.ppt
  10. Opencascade TopoDS_Shape Orientation