我试图使用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");
}
}
这是应该的吗?或者我错过了什么,或者误用了它?
答案 0 :(得分:1)
CallableStatement
用于调用存储过程。
来自javadoc:
用于执行SQL存储过程的接口
使用PreparedStament
代替正常选择。
作为附加说明,不要将表的名称作为参数传递。 使用串联创建查询。
而不是
String query = "SELECT * FROM ?";
使用
String query = "SELECT * FROM " + Config.DATATABLE_NAME;
答案 1 :(得分:0)
您应该使用PreparedStatement而不是CallableStatement。 CallableStatement是一个用于调用存储过程的接口。