我正忙于一项家庭作业,并且挂断了一些SQL查询。

我的查询正在询问库存数据库中某些物品的数量。在给定主键的情况下,查询从表中请求名称为quantity_in_stock的列。

我已经初始化了一些准备好的语句。这是我在这里使用的那个:

stmtFindColumn = Database.getConnection().prepareStatement(String.format("select ? from %s where %s = ?",
            INVENTORY_TABLE_NAME, SKU) );


现在调用一个单独的方法。我给它传递了一个静态常量QTY_IN_STOCK,它被定义为“ quantity_in_stock”,并且该项目的SKU编号是表中的主键。

private int getIntegerFromTable(String column, String key) {

    int toReturn = 0;

    try {
        // Complete the prepared statement
        stmtFindColumn.setString(1, column);
        stmtFindColumn.setString(2, key);

        ResultSet result = stmtFindColumn.executeQuery();
        toReturn = result.getInt(column);

    } catch (SQLException e) {
        LOG.error(e.getMessage());
        e.printStackTrace();
    }
    return toReturn;
}


当我运行查询时,我得到一个SQL异常,告诉我:无效的列名称quantity_in_stock。

我尝试使用while循环处理result.next()并得到相同的错误。当您只知道返回一条记录时,我找不到任何有关如何正确获取结果的示例。

救命!

编辑:好的,我发现我的问题的一部分是我没有得到一个结果集,我应该期待一个结果集。有任何想法吗?

更新:我已经测试了我的代码,改用了花园变种语句和纯字符串查询,它工作得很好。所以问题出在我对预备语句的使用上。有人可以检查我是否正在使用?通配符正确吗?谢谢!

最佳答案

DarkSquirrel42是正确的-您不能使用?替换选择的列列表。参数标记。相反,例如,您也可以将String.format设置到位。

坏:

*select ? from INVENTORY_TABLE_NAME where SKU = ?


好:

select QUANTITY_IN_STOCK from INVENTORY_TABLE_NAME where SKU = ?

09-27 20:30