0

我正在做一个项目,我必须比较两个大型数据库之间的所有表并匹配它们。实际上这个项目旨在实现一种数据库融合。更具体地说,如果 table1.database1 上的 row1 用 id、电话、地址等描述人“Michael”,而 table2.database2 上的特定 row2 用 id、电话、地址等描述人“Mike” ...我必须在比较后决定“迈克尔”和“迈克”是否是同一个人。

我为两个数据库做了连接,我已经赶上了表、列和行数据。由于我对java不太熟悉,我不知道如何使用提取数据并开始任何比较。存储和使用它们的最佳方式是什么?数组列表?数组?对象?载体?

例如,我有以下代码来捕获行数据:

int j = 0;
while(resTablesData1.next()) {
    ResultSetMetaData rsmd = resTablesData1.getMetaData();
    int colCount = rsmd.getColumnCount();
    System.out.println();
    for (int k=0; k<colCount ; k++) {
        String colName = rsmd.getColumnName(i);
        Object o = resTablesData1.getObject(colName);
        columnsArrayDB1[j][k] = o.toString();
        System.out.println("|-----------------------------------------------------|");
        System.out.print("| "+columnsArrayDB1[j][k]+" |"+"\t");
        System.out.println("|-----------------------------------------------------|");
    }
    j++;
}

我对两个数据库都有相同的代码。我必须将 columnsArrayDB1[0][0] 与 columnsArrayDB2[0][0] 等进行比较...如何通过优化方式做到这一点?

使用代表行数据的对象会更好吗?例如:

public class RowDataObject {
     public String col1;
     public String col2;
     // Etc
     public RowDataObject(String aCol1, String aCol2 /*.....etc */ ) {
         col1 = aCol1;
         col2 = aCol2;  //...etc
     }
}

然后读取数据

List<RowDataObject> allRows = new ArrayList<RowDataObject>();

ResultSet rs = //Your Query
while (rs.next())  {
     String c1 = rs.getString("A Column Name or Index");
     String c2 = rs.getString("A Column second Name or Index");
     //...etc
     allRows.add(new RowDataObject(c1,c2......));
}

我为这个项目处理动态值的所有工作,因为我事先不知道模式/表/列等的名称。由于我很困惑,所以请我开始一些指导方针。我的主要问题是如何编写适当的类并使用实例从它们创建对象到我提供的代码。

提前致谢。

4

1 回答 1

1

由于您o.toString()用于获取所有返回行的字符串值,因此您可以创建一个对象来保存每一列的值,例如:

class CellValue
{
    int cellTye;
    String cellValue;

    CellValue(int cellType,String cellValue) 
    {
        this.cellType=cellType;
        this.cellValue=cellValue;
    }
}

rsmd.getColumnType()使用and创建每个新对象o.toString()

将对象添加到ArrayList每一行,并将每一行添加到ArrayList每个数据源的一个。然后,您可以遍历两个 ArrayList 以比较列。

我还没有实际测试过,但类似:

ArrayList<ArrayList<CellValue>> cells = new ArrayList<>();

ResultSetMetaData rsmd = resTablesData1.getMetaData();
int colCount = rsmd.getColumnCount();

while(resTablesData1.next()) {
    ArrayList<CellValue> row = new ArrayList<>();
    for (int k=0; k<colCount ; k++) {
        String colName = rsmd.getColumnName(i);
        Object o = resTablesData1.getObject(colName);
        row.add(new CellValue(rsmd.getColumnType(),o.toString());
    }
    cells.add(row);
}

当您比较两个 ArrayList 的结果时,您可以进行比较cellType以确保您比较的是相同数据类型的单元格。如果你想变得花哨,你可以.equals()在 CellValue() 中重写来比较cellTypecellValue;然后,您可以使用cellValue1.equals(cellValue2)它来查看它是否匹配。

于 2013-10-24T00:23:34.207 回答