我正忙于一项家庭作业,并且挂断了一些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 = ?