[英]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.