2011-11-27 22 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

相關問題