我通过以下代码继续获取功能不受支持的异常:
public Collection<Product> getProds(String col, String prod) {
LinkedList<Product> list = new LinkedList<>();
try {
String query = "SELECT * FROM Product where ? LIKE ?";
PreparedStatement ps = con.prepareStatement(query);
ps.setString(1, col);
ps.setString(1, prod);
ResultSet rs = ps.executeQuery(query);
while ( rs.next() ) {
Product product = new Product(
rs.getString("PID"),
rs.getString("Artist"),
rs.getString("Title"),
rs.getString("Description"),
rs.getInt("price"),
rs.getString("thumbnail"),
rs.getString("fullimage")
);
list.add( product );
}
return list;
}
catch(Exception e) {
System.out.println( "Exception in getProducts(): " + e );
return null;
}
}
我猜它与executeQuery有关。非常感谢任何帮助
答案 0 :(得分:0)
我不熟悉PreparedStatements,但也许你必须这样做:
ps.setString(1, col);
ps.setString(2, prod);
这样您就可以定义要设置的参数。也许您此刻设置了第一个参数两次,并且不设置第二个参数。在这个示例http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html中,他们就是这样做的。
您也不需要将查询作为参数传递给方法executeQuery()
,因为它会覆盖已知的查询。
答案 1 :(得分:0)
您无法使用PreparedStatement&#39; setString
方法设置列名称,您只能设置参数。
如果您不知道列名,可以使用Java String的replace
方法在创建PreparedStatement之前指定列名,例如:
String query = "SELECT * FROM Product where <column> LIKE ?";
query = query.replaceAll("<column>", col);
PreparedStatement ps = con.prepareStatement(query);
ps.setString(1, prod);
ResultSet rs = ps.executeQuery();