我有以下類是使用了追趕從所有的MySQL表中的所有行記錄一個特定的模式:如何以離散的ArrayList元素
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;
}
}
當我執行GetAllDataDB1()
到public static void main class
時,我得到的結果是列表,其中包含來自特定模式中存在的所有表的所有行數據。我的目的是比較每個表(每個表中的所有行記錄)與每個表中的所有記錄屬於另一個模式。我如何指定我的arraylist
中引用每個表的所有記錄?現在你意識到我有一個arraylist
中的所有表中的所有記錄,我想將它們分開,這樣我的搜索變得更加容易。
尊敬的羅賓格林, 我已經有了「四個級別」的建議你的答案。雖然我想成功的比較更復雜。實際上,我想比較第一個數據庫的第X列的每一行與第二個數據庫的列Z的每一行,其中列X和列Z具有相同的數據類型。將int類型的列的行與varchar列的所有行進行比較沒有任何意義。更進一步,我想確定一些比行簡單的等於多。我想決定何時一行描述同一個對象,而另一行屬於另一個數據庫的表,並且可能兩行都不完全等於。例如,我有一個值爲「Robin」(名稱),「220000」(id),「99800000」(phone)和值爲「Robyn」(名稱),「220000」(id),「 97677999" (電話)。我們在談論同一個人,甚至名字和電話都不一樣。在我澄清之後,請給我你的想法和建議。
提前致謝。
你應該考慮重新設計你的搜索方法,因爲根據表的大小,你很可能會在某個時間點出現heappace問題 –