java数据库的两个表_Java对⽐两个数据库中的表和字段,写
个冷门的东西
package test;
package test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import com.amarsoft.are.sql.ASResultSet;
import com.amarsoft.are.sql.Transaction;
import com.amarsoft.are.util.DataConvert;
public class CompareTable {
public static StringBuffer[] sb = { new StringBuffer(), new StringBuffer(),
new StringBuffer(), new StringBuffer(), new StringBuffer(),
new StringBuffer() };
public static Transaction getTransaction_product() throws Exception {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = Connection(
"jdbc:oracle:thin:@192.168.1.1:1621:orcl", "demo1", "demo1");
if (conn != null)System.out.println("数据库加载成功!");
Transaction transaction = new Transaction(conn);
return transaction;
}
public static Transaction getTransaction_develop() throws Exception {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = Connection(
"jdbc:oracle:thin:@192.168.1.2:1621:orcl", "demo2", "demo2");
if (conn != null)System.out.println("数据库加载成功!");
Transaction transaction = new Transaction(conn);
return transaction;
}
resultset 遍历public static void main(String[] args) throws Exception {
compareTables(); // ⽐较数据库
writeFile(); // 写⼊⽂件
}
public static void compareTables() throws Exception {
// ⽣产数据库连接
Transaction trans_product = getTransaction_product();
Map<String, Table> map_product = getTables(trans_product);
// 开发数据库连接
Transaction trans_develop = getTransaction_develop();
Map<String, Table> map_develop = getTables(trans_develop);
// 遍历开发库Map
for (Iterator iter_table = map_develop.keySet().iterator(); iter_table
.hasNext();) {
String key_table = (String) ();
Table table_develop = (key_table);// 获得开发库中的表
Table table_product = (key_table);// 尝试从⽣产库中获得同名表
if (table_product == null) { // 如果获得表为空,说明开发存在,⽣产不存在
append(table_develop, null, 2);
} else { // 表相同,判断字段、字段类型、字段长度
for (Iterator iter_column = lumns
.keySet().iterator(); iter_column.hasNext();) {
String key_column = (String) ();
Column column_develop = (key_column);// 获得开发库中的列
Column column_product = (key_column);// 尝试从⽣产库中获得同名列if (column_product == null) {// 如果列名为空,说明开发存在,⽣产不存在
append(table_develop, column_develop, 4);
} else {// 说明两者都存在
if (!column_develop.dataType.equals(column_product.dataType))// 字段类型不⼀致
append(table_develop, column_develop, 5);
if (column_develop.length != column_product.length)// 字段长度不⼀致
append(table_develop, column_develop, 6);
}
}
}
}
// 遍历⽣产库Map
for (Iterator iter_table = map_product.keySet().iterator(); iter_table
.hasNext();) {
String key_table = (String) ();
Table table_product = (key_table);// 尝试从⽣产库中获得同名表
Table table_develop = (key_table);// 获得开发库中的表
if (table_develop == null) { // 如果获得表为空,说明开发存在,⽣产不存在
append(table_product, null, 1);
} else { // 表相同,判断字段、字段类型、字段长度
for (Iterator iter_column = lumns
.keySet().iterator(); iter_column.hasNext();) {
String key_column = (String) ();
Column column_product = (key_column);// 获得⽣产库中的列Column column_develop = (key_column);// 尝试从开发库中获得同名列if (column_develop == null) {// 如果列名为空,说明⽣产存在,开发不存在
append(table_product, column_product, 3);
}
}
}
}
}
public static Map<String, Table> getTables(Transaction transaction)
throws Exception {
String sSql = " select table_name,Column_Name,Data_Type,"
+ " DECODE(DATA_TYPE,'NUMBER',DATA_PRECISION,'VARCHAR2',"
+ " DATA_LENGTH,'VARCHAR',DATA_LENGTH,'CHAR',DATA_LENGTH,0) Length,"
+ " NVL(DATA_SCALE, 0) SCALE,DECODE(NULLABLE, 'N', '1', '0') NULLABLE "
+ " from user_tab_columns where 1=1 Order By table_name,column_name";
ASResultSet rs = ASResultSet(sSql);
Map<String, Table> map = new HashMap<String, Table>();
String tableName = "";
Table table = null;
while (rs.next()) {
if (!tableName.String("table_name"))) {// ⼀张新表
tableName = rs.getString("table_name");
table = new Table(tableName);
Column column = new String("Column_Name"),
map.String("table_name"), table);
} else {// 已存在的表,增加字段
Column column = new String("Column_Name"),
}
}
if (null != rs)
rs.close();
transaction.finalize();
return map;
}
public static void append(Table table, Column column, int flag)
throws Exception {
switch (flag) {
case 1:
System.out.println("1、⽣产存在,开发不存在的表:" + TableName());// 跳过
sb[0].TableName() + "\n");
break;
case 2:
System.out.println("2、⽣产不存在,开发存在的表:" + TableName());// 需要⼈⼯判断脚本sb[1].TableName() + "\n");
break;
case 3:
System.out.println("3、⽣产存在,开发不存在的字段:" + TableName()
+ " | " + ColumnName());// 需⼈⼯判断如何处理
sb[2].TableName() + " | " + ColumnName()
+ "\n");
break;
case 4:
System.out.println("4、⽣产不存在,开发存在的字段:" + TableName()
+ " | " + ColumnName());// 需要⼈⼯判断脚本
sb[3].TableName() + " | " + ColumnName()
+ "\n");
break;
case 5:
System.out.println("5、表和字段都相同,但字段类型不同的内容:" + TableName() + " | " + ColumnName() + " | "
+ DataType());// 需要⼈⼯判断脚本
sb[4].TableName() + " | " + ColumnName()
+ " | " + DataType() + "\n");
break;
case 6:
System.out.println("6、表和字段、字段类型都相同,但字段长度不同的内容:"
+ TableName() + " | " + ColumnName()
+ " | " + Length());// 需要⼈⼯判断脚本
sb[5].TableName() + " | " + ColumnName()
+ " | " + Length() + "\n");
break;
}
}
public static void writeFile() throws Exception {
String[] fileName = { "D://table//⽣产存在,开发不存在的表.txt",
"D://table//⽣产不存在,开发存在的表.txt", "D://table//⽣产存在,开发不存在的字段.txt", "D://table//⽣产不存在,开发存在的字段.txt",
"D://table//表和字段都相同,但字段类型不同的内容.txt",
"D://table//表和字段、字段类型都相同,但字段长度不同的内容.txt" };
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论