如何处理ResultSet,你知道它只有一个记录

时间:2011-11-27 05:11:50

标签: java sql

我正在努力完成一项家庭作业,并且在一些SQL查询上陷入困境。

我的查询是询问库存数据库中某个项目的数量。在给定主键的情况下,查询从表中请求名为quantity_in_stock的列。

我已经初步化了一些准备好的陈述。这是我在这里使用的那个:

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

现在调用一个单独的方法。我传递一个静态const 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()并得到相同的错误。当你知道只返回一条记录时,我找不到任何正确获取结果的例子。

帮助!

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

更新:我已经测试了我的代码,使用了一个花园变量语句和一个普通的字符串查询,它运行得很好。所以问题在于我使用了准备好的声明。有人可以检查我是否正在使用?通配符正确吗?谢谢!

2 个答案:

答案 0 :(得分:3)

据我所知,列名可能不是参数......

答案 1 :(得分:2)

DarkSquirrel42是对的 - 您无法使用?替换select的列列表?参数标记。相反,您也可以将String.format格式化到位,例如。

坏:

*select ? from INVENTORY_TABLE_NAME where SKU = ?

好:

select QUANTITY_IN_STOCK from INVENTORY_TABLE_NAME where SKU = ?