gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:51:59 26 4
gpt4 key购买 nike

我浪费了很多时间试图找到解决方案,但我找不到。我上了 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; ...

以下查询为我提供了我想用来制作新对象的信息。

SELECT TABLE_NAME, COLUMN_NAAM, DATA_TYPE, DATA_LENGTH FROM USER_TAB_COLUMNS;

OUTPUT:

TABLE_NAME COLUMN_NAME DATA_TYPE DATA_LENGTH
------------------------------ ------------------------------ --------- -----------
DONATIE PROJECTID NUMBER 22
DONATIE KLANTID NUMBER 22
DONATIE DONATIEDATUM DATE 7
DONATIE BEDRAG NUMBER 22
DONATIE DONATIEID NUMBER 22
KLANT ROL VARCHAR2 10
KLANT WACHTWOORD VARCHAR2 30
KLANT GEBRUIKERSNAAM VARCHAR2 30
KLANT TELEFOONNUMMER NUMBER 22
KLANT EMAIL VARCHAR2 30
KLANT WOONPLAATS VARCHAR2 15
KLANT POSTCODE VARCHAR2 6
KLANT HUISNUMMER VARCHAR2 5
KLANT ADRES VARCHAR2 30
KLANT GESLACHT VARCHAR2 5

我使用以下代码来执行查询:

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

嗯,java 对我来说是新的,我正在努力学习,正如你所看到的。应该执行查询的代码不起作用。必须有一种更好的方法来代替在结果集中运行结果集。我尝试创建新的表对象并将它们直接添加到表列表中,但问题是每个表对象只有一列。我想实现以下结构:

DATABASE
DONATIE
PROJECTID
KLANTID
DONATIEDATUM
BEDRAGDONATIEID
KLANT
ROL
WACHTWOORD
GEBRUIKERSNAAM
ETC..
TABLE3
ETC...

因此,一个简单的数据库对象应该包含这些内容。任何人都可以帮助我吗?提前致谢

最佳答案

正如您所观察到的那样,我不会同时打开两个 ResultSet 对象,我在这里看到了 2 个替代解决方案。

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

  2. 第二种选择是将两个查询合并为一个,然后循环遍历结果集,将当前行的表名称与前一行的表名称进行比较,如果不相同,则创建一个新的 Table 对象并添加从该行到该表的列,然后继续执行该操作,直到表名称再次更改。为此,您需要修改第二个查询,使其在 SELECT 子句中包含 TABLE_NAME,并根据 TABLE_NAME 对其进行排序,因此 SELECT TABLE_NAME, ... (与之前相同)...按TABLE_NAME排序

关于java - 从java中的查询结果创建类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53750848/

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