簡體   English   中英

如何使用 Java 從數據庫中檢索所有表

[英]How to retrieve all the tables from database using Java

我正在使用 JDBC 和 PostgreSQL 作為數據庫,我試圖以這樣一種方式創建一個邏輯,即我們可以從一個表中獲取所有數據,無論用戶在輸入中提供什么表名,它都應該被獲取,但這里的問題是,我不知道該怎么做。

每當我們過去從數據庫中獲取表數據時,我們都需要指定我們在使用 ResultSet 時在每個索引上獲取的數據類型。

如何克服提供此元數據的這種硬編碼需求,並使我們的代碼對具有任意數量的列和任何類型的任何表更通用

我的代碼:

Statement sttm = con1.createStatement();
System.out.println("Enter table name (usertable)");
String name = sc.next();
String tableData="";

String qu = "select * from "+name;
ResultSet rs =sttm.executeQuery(qu);
while(rs.next()) {
    // here we need to define the type by writing .getInt or getString
    tableData = rs.getInt(1)+":"+rs.getString(2)+":"+rs.getInt(3);
    System.out.println(tableData);
}
System.out.println("*********---------***********-----------**********");
sttm.close();

任何人都請建議我一些方法來做到這一點。

如果您想打印數據庫中任何表格的數據,請通過 CRUD 檢查我的 github 項目 java MySQL

https://github.com/gptshubham595/jdbc_mysql_CRUD-JAVA-

這些是實現的

在此處輸入圖像描述

您可以使用ResultSet.getObject(int) getObject將自動檢索最適合列的 SQL 數據類型的 Java 類型的數據。

要檢索列數,您可以使用ResultSet.getMetaData() ,然后使用ResultSetMetaData.getColumnCount()檢索列數。

簡而言之,要打印所有行的所有列,您可以執行以下操作:

try (ResultSet rs = stmt.executeQuery(qu)) {
    ResultSetMetaData rsmd = rs.getMetaData();
    int columnCount = rsmd.getColumnCount();
    while (rs.next()) {
        StringBuilder tableData = new StringBuilder();
        for (int colIdx = 1; colIdx <= columnCount; colIdx++) {
            tableData.append(rs.getObject(colIdx));
            if (colIdx != columnCount) {
                tableData.append(':');
            }
        }
        System.out.println(TableData);
    }
}

您還可以使用ResultSetMetaData獲取有關結果集列的更多信息,例如,如果您需要對某些類型的列進行特定處理。 您可以使用getColumnType獲取列的java.sql.Types值,或getColumnTypeName獲取數據庫中的類型名稱,或getColumnClassName獲取ResultSet.getObject(int/String)返回的類的名稱等。

但是,正如 Sorin 在評論中指出的那樣,接受用戶輸入並將其連接到查詢字符串中,就像您當前所做的那樣,會使您容易受到 SQL 注入的攻擊。 不幸的是,無法參數化對象名稱,但您可以通過 1)根據數據庫元數據(例如DatabaseMetaData.getTables )檢查表,以及 2)使用Statement.enquoteIdentifier (盡管這不一定會保護你反對所有形式的注射)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM