package com.database.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
/**
* jdbc连接数据库封装工具
*
* @auther zhuteng
* @time 2019年7月28日
*/
public class JdbcDataBaseUtils
{
private Connection connection = null;// 连接对象
private Statement pst = null;// 事务对象
private String drivername = null;// 驱动类型
private String url = null;// 请求地址
private String username = null;// 用户名
private String password = null;// 密码
private JSONObject commentMap = null;// 字段名注释
private JSONArray columnsInfosArray = null;// 字段名信息
private JSONObject tableCommentMap = null;// 表名注释
public JdbcDataBaseUtils()
{
super();
}
/**
* 连接初始化
*
* @throws Exception
*
* @auther zhuteng
* @time 2019年7月30日
*/
public JdbcDataBaseUtils(String drivername, String url, String username, String password)
throws Exception
{
this.drivername = drivername;
this.url = url;
this.username = username;
this.password = password;
}
public JSONArray getColumnsInfosArray()
throws Exception
{
if (this.columnsInfosArray == null)
throw new Exception("数据为空,请确认是否已执行查询数据函数");
return columnsInfosArray;
}
public JSONObject getTableCommentMap()
throws Exception
{
if (this.tableCommentMap == null)
throw new Exception("数据为空,请确认是否已执行查询数据函数");
return tableCommentMap;
}
/**
* 获取连接
*
* @throws Exception
*
* @auther zhuteng
* @time 2019年7月24日
*/
private void connection()
throws Exception
{
try
{
Class.forName(this.drivername);// 加载驱动
if (this.username == null)
this.connection = DriverManager.getConnection(this.url);
else
this.connection = DriverManager.getConnection(this.url, this.username, this.password);
}
catch (Exception e)
{
throw e;
}
}
/**
* 加载数据库字段注释
*
* @auther zhuteng
* @time 2019年7月26日
*/
public void getColumnCommentInfo(boolean isQueryAll)
throws Exception
{
JSONObject jsonObject = new JSONObject();// 保存至JSON对象中
JSONArray columnsJsonArray = new JSONArray();// 保存至JSON对象中
try
{
StringBuffer sql = new StringBuffer();// sql
sql.append("select a.table_name,a.column_name,b.comments,a.data_type,a.data_length,");
sql.append("a.nullable,a.data_default,a.low_value,a.high_value ");
sql.append("from cols a ");
sql.append("left join user_col_comments b ");
sql.append("on (a.TABLE_NAME = b.table_name and a.COLUMN_NAME=b.column_name) ");
sql.append("left join user_tab_comments c ");
sql.append("on (a.TABLE_NAME=c.table_name) ");
sql.append(!isQueryAll ? "where b.comments is not null " : "");
sql.append("order by a.TABLE_NAME,a.COLUMN_ID");
ResultSet result = getResultSet(sql.toString());// 查询结果
//遍历取数据
while (result.next())
{
//字段需要临时取出放入数据栈中,数据取值只能按顺序依次取出,且只能取一次,否则将会抛出【java.sql.SQLException: 流已被关闭】
String table_name = result.getString(1);//表格名称
String column_name = result.getString(2);//列名
String comments = result.getString(3);//列注释
String data_type = result.getString(4);//数据类型
String data_length = result.getString(5);//字段长度
String nullable = result.getString(6);//是否为空
String data_default = result.getString(7);//默认值
String low_value = result.getString(8);//最低值
String high_value = result.getString(9);//最高值
jsonObject.put(column_name, comments);//字段注释Map
JSONObject columnInfoObject = new JSONObject();//保存字段信息
columnInfoObject.put("table_name", table_name);
columnInfoObject.put("column_name", column_name);
columnInfoObject.put("comments", comments == null ? "" : comments);
columnInfoObject.put("data_type", data_type == null ? "" : data_type);
columnInfoObject.put("data_length", data_length == null ? "" : data_length);
columnInfoObject.put("nullable", nullable == null ? "" : nullable);
columnInfoObject.put("data_default", data_default == null ? "" : data_default);
columnInfoObject.put("low_value", low_value == null ? "" : low_value);
columnInfoObject.put("high_value", high_value == null ? "" : high_value);
columnsJsonArray.add(columnInfoObject);//保存
}
}
catch (Exception e)
{
throw e;
}
finally
{
//关闭数据源
close();
}
this.commentMap = jsonObject;
this.columnsInfosArray = columnsJsonArray;
}
/**
* 加载数据表名注释
* @author ZhuTeng
* @Time 2019年11月7日
*/
public void getTableCommentInfo()
throws Exception
{
JSONObject jsonObject = new JSONObject();// 保存至JSON对象中
try
{
StringBuffer sql = new StringBuffer();// sql
sql.append("SELECT A.TABLE_NAME, B.COMMENTS ");
sql.append("FROM USER_TABLES A, USER_TAB_COMMENTS B ");
sql.append("WHERE A.TABLE_NAME = B.TABLE_NAME ");
sql.append("ORDER BY TABLE_NAME ");
ResultSet result = getResultSet(sql.toString());// 查询结果
while (result.next())
{
jsonObject.put(result.getString(1), result.getString(2) == null ? "" : result.getString(2));
}
}
catch (Exception e)
{
throw e;
}
finally
{
//关闭数据源
close();
}
this.tableCommentMap = jsonObject;
}
/**
* 根据对象信息获取DDL信息
* @author ZhuTeng
* @Time 2019年12月8日
*/
public String executeQueryTableDDLSqlForOracle(String object, String tablename)
throws Exception
{
String ddlsql = "";
try
{
if (StringUtils.isEmpty(tablename))
{
throw new Exception("数据表名为空!");
}
StringBuffer sql = new StringBuffer();
sql.append("SELECT DBMS_METADATA.GET_DDL('").append(object).append("',");
sql.append("'").append(tablename.toUpperCase()).append("') AS ddlsql ");
sql.append(" FROM DUAL ");
// 执行查询
ResultSet result = getResultSet(sql.toString());// 查询结果;
没有合适的资源?快使用搜索试试~ 我知道了~
基于JDBC同步Oracle到MySQL
共33个文件
class:14个
java:10个
jar:4个
需积分: 50 38 下载量 22 浏览量
2020-10-18
17:57:06
上传
评论 3
收藏 3.54MB RAR 举报
温馨提示
主程序位置:com.database.main.com.database.main 直接运行main方法即可,使用线程同步,间隔5分钟同步一次 分别有:数据源配置、数据表结构转换、字段更新、数据迁移、根据oracle SQL的UPDATE DELETE 事物执行记录转为Mysql可执行SQL,同步执行到MySql数据库,此项目为个人兴趣爱好练手项目,项目问题欢迎留言,共同进步成长。 说明文档:https://blog.csdn.net/u010636072/article/details/109147827
资源推荐
资源详情
资源评论
收起资源包目录
OracleDataSyncToMySqlData.rar (33个子文件)
OracleDataSyncToMySqlData
.project 401B
bin
com
database
utils
JdbcDataBaseUtils.class 13KB
PublicFun.class 2KB
test
FunTest.class 2KB
main
GenerateMysqlUpdateTabelSqlByOracleTableInfo.class 7KB
OracleToMysqlDataSynchro.class 3KB
OracleToMysqlDataSynchro$4.class 2KB
SyncMySqlInsertDataByOracleData.class 9KB
OracleToMysqlDataSynchro$2.class 2KB
OracleToMysqlDataSynchro$3.class 2KB
GenerateMySqlCreateTableSqlByOracleTableInfo.class 9KB
OracleSqlLogAnalysisSyncToMySql.class 5KB
OracleToMysqlDataSynchro$1.class 2KB
datasource
JDBC_DataSourceConfig.class 2KB
constant
Constants.class 463B
.settings
org.eclipse.core.runtime.prefs 52B
org.eclipse.core.resources.prefs 57B
org.eclipse.jdt.core.prefs 646B
src
com
database
utils
JdbcDataBaseUtils.java 20KB
PublicFun.java 2KB
test
FunTest.java 1KB
main
OracleSqlLogAnalysisSyncToMySql.java 5KB
GenerateMysqlUpdateTabelSqlByOracleTableInfo.java 9KB
GenerateMySqlCreateTableSqlByOracleTableInfo.java 12KB
OracleToMysqlDataSynchro.java 10KB
SyncMySqlInsertDataByOracleData.java 13KB
datasource
JDBC_DataSourceConfig.java 3KB
constant
Constants.java 291B
.classpath 489B
lib
commons-lang3-3.1.jar 308KB
fastjson-1.2.58.jar 625KB
mysql-connector-java-5.1.18-bin.jar 771KB
ojdbc6.jar 2.01MB
共 33 条
- 1
资源评论
TorZhu
- 粉丝: 9
- 资源: 55
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 没用333333333333333333333333333333
- 基于Vue和SpringBoot的企业员工管理系统2.0版本设计源码
- 【C++初级程序设计·配套源码】第2期-基本数据类型
- 基于Java和Vue的kopsoftKANBAN车间电子看板设计源码
- 影驰战将PS3111 东芝芯片TT18G23AIN开卡成功分享,图片里面画线的选项很重要
- 【C++初级程序设计·配套源码】第1期-语法基础
- 基于JavaScript、CSS、HTML的简易DOM版飞机游戏设计源码
- 基于Java开发的日程管理FlexTime应用设计源码
- SM2258XT-BGA144-4BGA180-6L-R1019 三星KLUCG4J1CB B0B1颗粒开盘工具 , EC, 3A, 94, 43, A4, CA 七彩虹SL300这个固件有用
- GJB 5236-2004 军用软件质量度量
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功