SQL功能不支持的Excpetion

时间:2017-03-18 16:01:23

标签: java mysql exception prepared-statement

我通过以下代码继续获取功能不受支持的异常:

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有关。非常感谢任何帮助

2 个答案:

答案 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();