簡體   English   中英

使用PrepareStatement獲取具有可配置表名的數據

[英]Using PrepareStatement to get data with configurable table name

我正在嘗試使用java和jdbc驅動程序從Oracle 11.2獲取一些數據。

我的目標是使用CallableStatement從數據庫中獲取數據,但沒有運氣-我無法將表名作為參數。 我想在查詢中使用可配置的表名。 但是,最好保持消毒狀態。

這是一個例子。

public void getData() throws SQLException {

    Connection conn = Config.getSQLConnection();
    String query = "SELECT * FROM ?";
    PreparedStatement st = conn.prepareStatement(query);
    st.setString(1, Config.DATATABLE_NAME);
    ResultSet rs = st.executeQuery();

    if (rs.next()) {
        System.out.println("SUCCESS");
        System.out.println("ID:" + rs.getString("ID"));
    } else {
        System.out.println("FAILURE");
    }
}

這是應該起作用的方式嗎? 還是我遺漏了某些東西或濫用了它?

CallableStatement用於調用存儲過程。

javadoc

用於執行SQL存儲過程的接口

請使用PreparedStament進行常規選擇。

另外請注意,請勿將表名稱作為參數傳遞。 使用串聯創建查詢。

代替

String query = "SELECT * FROM ?";

采用

String query = "SELECT * FROM " + Config.DATATABLE_NAME;

您應該使用PreparedStatement而不是CallableStatement。 CallableStatement是用於調用存儲過程的接口。

暫無
暫無

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

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