jdbc备份mysql_通过jdbc实现Oracle备份到Mysql

一直用的系统是 Oracle的数据库,现在一个客户比较小,不想投入钱购买数据库软件,所以只能使用Mysql,需要将框架中的一些表结构、记录从Oracle导入到Mysql中去。网上没找到好用的软件,所以决定自己弄一个小程序实现异构库备份:

思路比较简单, 先生成建表语句并在mysql库中执行,在生成insert语句在mysql中执行。

一:生成建表语句重点是需要获取表的字段,默认值,是否为空, 字段类型、字段长度等, 万幸的是这些jdbc都有实现,通过Connect获取数据库的DatabaseMetaData--dmd,

System.out.println("加载Oracle链接0...");

connect = connect(0);

System.out.println("加载Mysql链接1...");

insertConnect = connect(1);

System.out.println("获取dmd...");

dmd = connect.getMetaData();

ResultSet colrs = dmd.getColumns("%", dmd.getUserName(),table.toUpperCase(), "%");

然后解析获取到的ResultSet信息后即可获取到字段的全部信息,生成建表语句:

二:取生成insert语句类似,需要适用select语句查询表的信息,然后循环解析每一行的记录,生成insert插入,此处执行sql的是PreparedStatement,可以循环适用insert语句,仅需要改变每一次动态设置的值属性即可。

全部代码比较简单,直接上代码:

有两个类:jdbc工具类:JDBCUtil.java

import java.sql.Connection;

import java.sql.DatabaseMetaData;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

public class JDBCUtil {

public static Connection connect(int type) {

Connection conn;

if (type == 0) {//oracle

conn = connectOracle();

} else {//Mysql

conn = connectMysql();

}

return conn;

}

/**

* 连接Oracle

*

* @return

*/

public static Connection connectMysql() {

// 连接MySql数据库,用户名和密码

String username = "111212";

String password = "2121";

String url = "jdbc:mysql://192.168.1.1/training?user=" + username+ "&password=" + password + "";

Connection conn = null;

try {

// 加载MySql的驱动类

Class.forName("com.mysql.jdbc.Driver");

conn = DriverManager.getConnection(url);

} catch (ClassNotFoundException e) {

System.out.println("找不到驱动程序类 ,加载驱动失败!");

e.printStackTrace();

} catch (SQLException se) {

System.out.println("数据库连接失败!");

se.printStackTrace();

}

return conn;

}

/**

* 连接Oracle

*

* @return

*/

public static Connection connectOracle() {

String url = "jdbc:oracle:thin:@192.168.1.1:1521:orcl";

// 连接MySql数据库,用户名和密码都是root

String username = "abcaf";

String password = "syjgagagac";

Connection conn = null;

try {

// 加载MySql的驱动类

Class.forName("oracle.jdbc.OracleDriver");

conn = DriverManager.getConnection(url, username, password);

} catch (ClassNotFoundException e) {

System.out.println("找不到驱动程序类 ,加载驱动失败!");

e.printStackTrace();

} catch (SQLException se) {

System.out.println("数据库连接失败!");

se.printStackTrace();

}

return conn;

}

public static List getColumnNames(ResultSetMetaData meta) throws SQLException{

List list = new ArrayList();

for (int i = 1; i <= meta.getColumnCount(); i++) {

list.add(meta.getColumnName(i));

}

return list;

}

// ResultSetMetaData 使用示例

// 此方法参考 http://blog.csdn.net/yirentianran/article/details/2950321

public static void demoResultSetMetaData(ResultSetMetaData data)

throws SQLException {

for (int i = 1; i <= data.getColumnCount(); i++) {

// 获得所有列的数目及实际列数

int columnCount = data.getColumnCount();

// 获得指定列的列名

String columnName = data.getColumnName(i);

// 获得指定列的列值

// String columnValue = rs.getString(i);

// 获得指定列的数据类型

int columnType = data.getColumnType(i);

// 获得指定列的数据类型名

String columnTypeName = data.getColumnTypeName(i);

// 所在的Catalog名字

String catalogName = data.getCa

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值