使用 PrepareStatement 获取具有可配置 table 名称的数据

Using PrepareStatement to get data with configurable table name

我正在尝试使用 java 和 jdbc 驱动程序从 Oracle 11.2 获取一些数据。

我的目标是使用 CallableStatement 从数据库中获取数据,但运气不佳 - 我无法将 table 名称作为参数。我想在查询中使用可配置的 table 名称。但是,最好保持清洁。

这是一个例子..

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:

The interface used to execute SQL stored procedures

使用 PreparedStament 代替正常的 select。

另外请注意,不要将 table 的名称作为参数传递。 使用串联创建查询。

而不是

String query = "SELECT * FROM ?";

使用

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

您应该使用 PreparedStatement 而不是 CallableStatement。 CallableStatement 是一个用于调用存储过程的接口。