捕获并存储所有mysql数据库数据(表行)以使用它们进行比较和匹配

时间:2013-10-23 18:27:23

标签: java mysql

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

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

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

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]等等......如何用优化方式做到这一点?

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

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......));
}

我为此项目处理动态值的所有工作,因为我事先不知道架构/表格/列等的名称。请特别要求一些指导方针,因为我很困惑。我的主要问题是如何编写适当的类并使用实例创建我们提供的代码中的对象。

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

class CellValue
{
    int cellTye;
    String cellValue;

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

使用rsmd.getColumnType()o.toString()

创建每个新对象

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

我实际上没有测试过这个,但是有点像:

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);
}

比较两个ArrayLists的结果时,可以比较cellType以确保比较相同数据类型的单元格。如果您想获得幻想,可以覆盖CellValue()中的.equals()来比较cellTypecellValue;然后,您可以使用cellValue1.equals(cellValue2)查看是否匹配。