使用 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 是一个用于调用存储过程的接口。
我正在尝试使用 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 是一个用于调用存储过程的接口。