数据库与数据库之间的数据交互
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的注入信息,代码如下:
com.mysql.jdbc.Driver
jdbc:mysql://127.0.0.1:3306/MYDB
root
157891
com.mysql.jdbc.Driver
jdbc:mysql://127.0.0.1:3306/MYTEMPDB
root
157891
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
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!