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

标签 java mysql

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

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

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

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

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

提前致谢。

最佳答案

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

class CellValue
{
    int cellTye;
    String cellValue;

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

使用 rsmd.getColumnType()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 以确保比较的是相同数据类型的单元格。如果你想变得更奇特,你可以重写 CellValue() 中的 .equals() 来比较 cellTypecellValue;然后,您可以使用 cellValue1.equals(cellValue2) 来查看是否匹配。

关于java - 捕获并存储所有 mysql 数据库数据(表行)以使用它们进行比较和匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19549562/

相关文章:

java - 如何更改 dist 文件夹路径而不覆盖输出文件夹中的现有文件

java - Windows 7 命令行 jps 不工作

mysql - 将 SQL Server 触发器转换为 MySQL

c# - DataGridView 不显示最近插入的行

mysql - 使用 MYSQL IF SELECT 2 个不同的数据集

java - 如何在java中异步解析HTTP(也许是http客户端)

java - 如何替换 android 4.0.3 的 type_orientation(已弃用)?

java - Vaadin 7.1.0 推送

php - Mysql,根据日期选择行

php - 左连接后无法在 for-each 循环中显示列