Я потратил впустую часы, пытаясь найти решение для этого, но я не мог.Я получил 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...
Таким образом, один простой объект базы данных должен содержать эти вещи.Может кто-нибудь помочь мне, пожалуйста.Заранее спасибо