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

时间:2015-09-28 14:48:24

标签: java sql prepared-statement

我试图使用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");
    }
}

这是应该的吗?或者我错过了什么,或者误用了它?

2 个答案:

答案 0 :(得分:1)

CallableStatement用于调用存储过程。

来自javadoc

  

用于执行SQL存储过程的接口

使用PreparedStament代替正常选择。

作为附加说明,不要将表的名称作为参数传递。 使用串联创建查询。

而不是

String query = "SELECT * FROM ?";

使用

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

答案 1 :(得分:0)

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