转移sqlServer数据库数据到mongodb的简单实现
- 准备:
1. 数据库SqlServer2008,mongodb;eclipse-3.6.5
2. 首先安装sqlServer客户端【SQLFULL_CHS.iso】 和 Mongdb客户端【robomongo-0.9.0-windows-x86_64-0786489】
3. 连接两个数据库要用的jar包如图:
4.代码如下:
`
package transferSqlServerToMongDB;
import java.net.UnknownHostException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
public class TranslateSqlServerToMongoDB extends Thread {
public static void main(String[] args) {
while (true) {
new TranslateSqlServerToMongoDB().start();
try {
Thread.sleep(1 * 6 * 1000);// 6秒钟读取一次
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// 重写run方法,线程执行体
public void run() {
// 调用读取sqlserver数据库方法
readSqlServer();
// //调用向Mongodb插入数据方法
// ConnectMgDB();
}
public ResultSet resultSet = null;
/**
* 连接sqlServer和读取sqlServer的方法
*/
private void readSqlServer() {
// 1、sqlserver服务url 、用户名、密码、sqlserver驱动
// 本地测试数据库
String url = "jdbc:sqlserver://localhost:1433; DatabaseName=attendance";
String userName = "sa";
String password = "123456";
String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
// 2、声明sql语句执行器、连接对象
Statement statement;
Connection con;
try {
// 3、加载驱动
Class.forName(driver);
} catch (ClassNotFoundException event) {
System.out.print("无法创建驱动程式实体!");
}
try {
// 4、使用驱动管理器 获取指定用户名 密码 和服务器的sqlserver连接对象
con = DriverManager.getConnection(url, userName, password);
con.setAutoCommit(true);// 设置自动提交,不能实现多个数据库操作原子性提交
System.out.println("已经连接到sqlServer数据库...");
statement = con.createStatement();
// resultSet = statement.executeQuery("SELECT * from Report24");//
// 商基
resultSet = statement.executeQuery("SELECT * from attendance_3");
// //本地测试数据库
// ---连接mongodb---
this.ConnectMgDB();
// ---做数据转移---
int i = 0;
while (resultSet.next()) {
i++;
// 本地sqlserver数据
String name = resultSet.getString("name");
System.out.println("sqlServer读取的name:" + name + "----------i=" + i);
// 写入mongodb
insertIntoMgDB(name);
}
// 删除已经插入mongodb的n条数据
/*System.out.println("i=" + i);
if(i<50){
statement.executeQuery("delete from attendance_3 where id in (select top 50 id from attendance_3)");
}else if(i<100){
statement.executeQuery("delete from attendance_3 where id in (select top 100 id from attendance_3)");
}else if(i<200){
statement.executeQuery("delete from attendance_3 where id in (select top 200 id from attendance_3)");
}else if(i<1000){
statement.executeQuery("delete from attendance_3 where id in (select top 1000 id from attendance_3)");
}*/
// 5、关闭sql语句执行器、关闭连接
resultSet.close();
statement.close();
con.close();
} catch (SQLException e1) {
System.out.println("异常" + e1);
}
}
//全局变量(声明数据库表)
public DBCollection dbCollection = null;
/**
* 连接mongodb
*/
public void ConnectMgDB() {
// 初始化连接mongodb
Mongo mongo = null;
try {
mongo = new Mongo("192.168.0.104");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (MongoException e) {
e.printStackTrace();
}
DB db = mongo.getDB("weijian");// 获取weijian Mongodb数据库
db.authenticate("root", "admin".toCharArray()); // 验证数据库 用户名和密码
// 获取一个AttendanceInfo表
dbCollection = db.getCollection("AttendanceInfo");
System.out.println("已经连接到MongoDB数据库...");
}
/**
* 向mongodb的AttendanceInfo表 写入条互数据
* @param name
*/
private void insertIntoMgDB(String name) {
BasicDBObject basicDBObject = new BasicDBObject(10);
basicDBObject.put("name", name);
dbCollection.insert(basicDBObject);
}
}
`
5.数据库内容:
MongoDb数据库客户端以及连接信息:
6.实现功能描述:
在一个线程中每隔6秒钟,连接一次sqlServer将attendance数据库中attendance_3表中的数据转移到Mongodb的AttendanceInfo表中,之后将已经转移过的sqlServer中的数据删除掉。
参考文章:
1:http://jingyan.baidu.com/article/a948d65114f6fe0a2dcd2eae.html
2:http://blog.sina.com.cn/s/blog_6c0541d50102vuqj.html