从java中的查询结果创建类对象

从java中的查询结果创建类对象,java,oracle,Java,Oracle,我浪费了很多时间试图找到解决办法,但我做不到。我上了3节课: 数据库、表和列: public class Database { private List<Table> table; private String name; ... public class Table { private String name; private List<Column> column; ... public class Column { pr

我浪费了很多时间试图找到解决办法,但我做不到。我上了3节课:

数据库、表和列:

public class Database {
    private List<Table> table;
    private String name; ...

public class Table {
    private String name;
    private List<Column> column; ...


public class Column {
    private String columnName;
    private String dataType;
    private int data_length; ...
我使用以下代码获取并执行查询:

    public Database getTargetDbStructure(String username, String password, String url, String dbName) {
        Database db = new Database();
        db.setName(dbName);
        List<Table> tableStructureList = new ArrayList<Table>();
        try (Connection con = super.getConnectionTargetDb(username, password, url)) {
            String query = "SELECT DISTINCT(TABLE_NAME) FROM USER_TAB_COLUMNS";
            PreparedStatement pstmt = con.prepareStatement(query);
            ResultSet rs = pstmt.executeQuery();


            while (rs.next()){
                String query2 = "SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH FROM USER_TAB_COLUMNS WHERE TABLE_NAME = ?";
                PreparedStatement pstmt2 = con.prepareStatement(query2);
                String tableName = rs.getString("TABLE_NAME");
                pstmt2.setString(1, tableName);
                ResultSet rs2 = pstmt.executeQuery();
                Table t = new Table();
                t.setName(tableName);

                System.out.println("1");
                while (rs2.next()){
                    System.out.println("2");
                    String column_name = rs2.getString("COLUMN_NAAM");
                    String data_type = rs2.getString("DATA_TYPE");
                    int data_length = rs2.getInt("DATA_LENGTH");
                    Column column = new Column();
                    column.setColumnName(column_name);
                    column.setDataType(data_type);
                    column.setData_length(data_length);
                    t.addColumn(column);
                }
                db.addTable(t);
                tableStructureList.add(t);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return db;
    }

因此,一个简单的数据库对象应该包含这些内容。谁能帮帮我吗。提前感谢

我不会让两个ResultSet对象在您观察自己时同时打开,我在这里看到了两种备选解决方案

  • 保留两个查询,但完全循环第一个查询,将所有表添加到
    tableStructureList
    中,然后在完成第一个查询后,可以继续执行第二个查询,而是循环执行
    tableStructureList
    以获得要使用的表

  • 第二种方法是将两个查询合并为一个查询,并在结果集上循环,比较当前行和前一行的表名,如果不相同,则创建一个新的表对象,并将该行中的列添加到该表中,然后继续执行该查询,直到表名再次更改。 为此,您需要修改第二个查询,使其在SELECT子句中包含
    TABLE\u NAME
    ,并在
    TABLE\u NAME
    so
    SELECT TABLE\u NAME,…(与之前相同)。。。按表格名称排序_名称


  • 代码snipper是针对JS/HTML等web元素的,而不是JavaAzro,我看到只有3个选项:HTML、CSS和JS。我在哪里可以选择java?你不需要,因为java需要一个jvm来运行,你不能在这里运行它,所以只需将它显示为代码,HTML/CSS/JS可以在web浏览器中运行,这就是为什么你可以在这里运行tooThanks Azro,不会再犯这个错误。
        public Database getTargetDbStructure(String username, String password, String url, String dbName) {
            Database db = new Database();
            db.setName(dbName);
            List<Table> tableStructureList = new ArrayList<Table>();
            try (Connection con = super.getConnectionTargetDb(username, password, url)) {
                String query = "SELECT DISTINCT(TABLE_NAME) FROM USER_TAB_COLUMNS";
                PreparedStatement pstmt = con.prepareStatement(query);
                ResultSet rs = pstmt.executeQuery();
    
    
                while (rs.next()){
                    String query2 = "SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH FROM USER_TAB_COLUMNS WHERE TABLE_NAME = ?";
                    PreparedStatement pstmt2 = con.prepareStatement(query2);
                    String tableName = rs.getString("TABLE_NAME");
                    pstmt2.setString(1, tableName);
                    ResultSet rs2 = pstmt.executeQuery();
                    Table t = new Table();
                    t.setName(tableName);
    
                    System.out.println("1");
                    while (rs2.next()){
                        System.out.println("2");
                        String column_name = rs2.getString("COLUMN_NAAM");
                        String data_type = rs2.getString("DATA_TYPE");
                        int data_length = rs2.getInt("DATA_LENGTH");
                        Column column = new Column();
                        column.setColumnName(column_name);
                        column.setDataType(data_type);
                        column.setData_length(data_length);
                        t.addColumn(column);
                    }
                    db.addTable(t);
                    tableStructureList.add(t);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
            return db;
        }
    
    DATABASE
        DONATIE
            PROJECTID
            KLANTID
            DONATIEDATUM
            BEDRAGDONATIEID
        KLANT
            ROL
            WACHTWOORD
            GEBRUIKERSNAAM
            ETC..
        TABLE3
            ETC...