1

特定のスキーマのすべての 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;
    }
}

GetAllDataDB1()throughを実行するpublic static void main classと、得られる結果は、特定のスキーマに存在するすべてのテーブルからのすべての行データを含むリストです。私の目的は、すべてのテーブルのすべての行レコードを(1つずつ)別のスキーマに属するすべてのテーブルのすべてのレコードと比較することです。arraylistすべてのテーブルを参照するmy からすべてのレコードを指定するにはどうすればよいですか? お気づきのように、すべてのテーブルのすべてのレコードが 1 つarraylistにまとめられており、検索をより簡単にするためにそれらを分離したいと考えています。

親愛なるロビン・グリーン、私はあなたの答えであなたがアドバイスするように、私はすでに「4つのレベル」を持っています. 私が成功したい比較はもっと複雑ですが。実際には、最初のデータベースの列 X のすべての行を、列 X と列 Z のデータ型が同じである 2 番目のデータベースの列 Z のすべての行と比較したいと考えています。int 型の列の行と varchar 列のすべての行を比較しても意味がありません。さらに、行の単純な等号以上のものを特定したいと考えています。行が同じオブジェクトを記述し、別の行が別のデータベースのテーブルに属しており、おそらく両方の行が完全に等しくない場合を判断したいと考えています。たとえば、「ロビン」(名前)、「220000」(id)、「99800000」(電話) の値を持つ行と、「ロビン」(名前)、「220000」(id)、「 97677999" (電話)。名前も電話番号も違いますが、同一人物です。説明の後、ご意見やアドバイスをお願いします。

少し早いですがお礼を。

4

1 に答える 1