gpt4 book ai didi

java - 如何我离散arraylist元素

转载 作者:行者123 更新时间:2023-11-29 00:24:25 24 4
gpt4 key购买 nike

我有以下类用于捕获特定模式的所有 MySQL 表中的所有行记录:

public void GetAllDataDB1() // Catching all the data from "bank1" database
{
try
{
MetaData1 = connection1.getMetaData();
catalogs1 = MetaData1.getCatalogs();
String[] types = {"TABLE"};
resTables1 = MetaData1.getTables(null,null,"%",types);

while (resTables1.next())
{
db1TableName = resTables1.getString("TABLE_NAME");
resTablesStr1 = statement1.executeQuery("SELECT * FROM "+db1TableName+";");
resColumns1 = resTablesStr1.getMetaData();
db1TotalColNum = resColumns1.getColumnCount();
db1FirstColName = resColumns1.getColumnName(1);
//Object k = resTablesStr1.getObject(db1FirstColName);
//System.out.println("| "+k.toString()+" |");

for (int i=1; i<=db1TotalColNum; i++)
{
db1CurColNum = i;
db1ColName = resColumns1.getColumnName(i);
db1ColDataType = resColumns1.getColumnTypeName(i);
resTablesData1 = statement1.executeQuery("SELECT "+db1ColName+" FROM "+db1TableName+" GROUP BY "+db1FirstColName+";");

resTablesData1.last();
db1TotalRowNum = resTablesData1.getRow();
resTablesData1.beforeFirst();

db1CurRowNum = 0;
while (resTablesData1.next())
{
db1CurRowNum++;
ObjRowValues = resTablesData1.getObject(db1ColName);
rows.add(new CellValue(db1TableName,db1ColName,db1CurColNum,db1CurRowNum,db1ColDataType,ObjRowValues.toString()));
}
//cells.add(row);
}
}
for (CellValue r : rows)
{
System.out.println("TABLE: " + r.getTable() +" "+"COLUMN: " + r.getColumn() +" "+"COLUMN_ID: " + r.getcolID() +" "+"ROWD_ID: " + r.getrowID() +" "+"COLUMN_TYPE: " + r.getcellType()+" "+"ROW_VALUE: " + r.getcellValue());
}
}
catch (SQLException e)
{
System.err.println("Connection Failed! Check output console " + e.getMessage());
System.exit(0);
}
}

CellValue 类如下:

public class CellValue
{
String tab;
String col;
int colID;
int rowID;
String cellType;
String cellValue;

public CellValue(String tab, String col, int colID, int rowID, String cellType, String cellValue)
{
this.tab = tab;
this.col = col;
this.colID = colID;
this.rowID = rowID;
this.cellType = cellType;
this.cellValue = cellValue;
}

public String getTable()
{
return this.tab;
}

public String getColumn()
{
return this.col;
}

public int getcolID()
{
return this.colID;
}

public int getrowID()
{
return this.rowID;
}

public String getcellType()
{
return this.cellType;
}

public String getcellValue()
{
return this.cellValue;
}
}

当我通过 public static void main class 执行 GetAllDataDB1() 时,我得到的结果是包含所有表中存在的所有行数据的列表具体架构。我的目的是比较每个表中的所有行记录(一个接一个)与每个表中属于另一个模式的所有记录。如何指定我的 arraylist 中引用每个表的所有记录?现在你意识到我在一个 arraylist 中拥有所有表中的所有记录,我想将它们分开以便我的搜索变得更容易。

亲爱的罗宾格林,正如您在回答时所建议的那样,我已经有了“四个级别”。虽然我想成功的比较比较复杂。实际上,我想将第一个数据库的 X 列的每一行与第二个数据库的 Z 列的每一行进行比较,其中 X 列和 Z 列具有相同的数据类型。将 int 类型列的行与 varchar 列的所有行进行比较是没有意义的。此外,我想确定的不仅仅是简单的行数。我想决定何时一行描述同一对象而另一行属于不同数据库的表并且可能两行并不完全相等。例如,我有一行值:“Robin”(name)、“220000”(id)、“99800000”(phone) 和一行值:“Robyn”(name)、“220000”(id)、“97677999”(电话)。我们说的是同一个人,连名字和电话都不一样。在我澄清之后,请给我您的想法和建议。

提前致谢。

最佳答案

正如您所认识到的,您的数据结构设计过于扁平 - 您有两个层次:

ArrayList -> CellValue

实际上你应该有四个级别

数组列表 -> 表格 -> 行 -> 单元格值

因此您应该创建一些类 Table 和 Row。

但是,重新设计您的应用程序可能会更有效,这样它就可以遍历两个查询的结果集,并逐行比较它们,这样您就不必存储所有的来自内存中两个完整模式的数据。

此外,已经有数据库差异工具;也许您应该只使用其中之一?

关于java - 如何我离散arraylist元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19618774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com