我与 Oracle 数据库的连接如下:
String selectSQL = "SELECT ?,supplier_name FROM supplier WHERE supplier_id = ?";
PreparedStatement preparedStatement = con.prepareStatement(selectSQL);
preparedStatement.setString(1, "supplier_id");
preparedStatement.setInt(2, 1);
ResultSet rs2 = preparedStatement.executeQuery();
while (rs2.next()) {
String userid = rs2.getString(1);
String username = rs2.getString(2);
System.out.println(userid);
System.out.println(username);
}
con.close();
};
问题是第二个参数按照我想要的方式传递,这意味着
supplier_id = 1
但是我对第一个参数有疑问。每次只传递字符串,所以我的查询看起来像
select "supplier_id", supplier_name FROM supplier WHERE supplier_id = ?
而不是
select supplier_id, supplier_name FROM supplier WHERE supplier_id = ?
因此,我没有从表中获取对应供应商 ID 的值,而是获取字符串“supplier_id”。 我究竟做错了什么?我应该改变什么来获取值而不是字符串?
最佳答案
无法以这种方式创建动态查询,您必须使用普通的字符串操作。参数只能用于值,如字符串、数字等,不能用于名称。
在你的情况下,可以做类似的事情
String sqlTemplate = "SELECT <id_column>,supplier_name FROM supplier WHERE supplier_id = ?";
String selectSQL = sqlTemplate.replace("<id_column>", "supplier_id");
关于java - 选择查询中的 JDBCPreparedStatement 和参数 (?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46016011/