2011-11-27 43 views
1

我正在努力完成一项家庭作业,并且正在挂上一些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()并得到相同的错误。当你知道只有一条记录被返回时,我找不到任何如何正确得到结果的例子。

帮助!

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

更新:我已经测试了我的代码,使用花园多种语句和普通字符串查询来代替,它工作得很好。所以问题在于我使用准备好的陈述。有人可以检查我是否使用?通配符正确吗?谢谢!

回答

2

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

不好:

*select ? from INVENTORY_TABLE_NAME where SKU = ? 

好:

select QUANTITY_IN_STOCK from INVENTORY_TABLE_NAME where SKU = ? 
+0

啊哈。让我尝试一下,我会回来......' – deanTheBean

+0

就是这样!你们真棒。周六晚上10点我还能在哪里得到这个问题的答案! – deanTheBean

3

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

+0

+1为察觉的是..... – Jomoos

+0

相信我,我已经检查了好几次!查看信息更新。 – deanTheBean

相关问题