[英]MySQL prepared statement not returning results java
我在 mysql 中有一個簡單的存儲過程,我試圖從 jdbc 調用它。 我不斷得到一個空的結果集。 我已經在類似的線程上搜索並嘗試了幾種解決方案,但均無濟於事。 請注意,table.quantity 不是固定小數,這就是我使用 double/BigDecimal 的原因。
我表中的相關列是:
quantity DOUBLE UNSIGNED
orderTime TIMESTAMP
這是存儲過程:
CREATE DEFINER=`root`@`localhost` PROCEDURE `getTotal`( IN pSince TIMESTAMP, OUT pVolume DOUBLE UNSIGNED )
BEGIN
SET pVolume = ( SELECT SUM( quantity ) FROM db.table WHERE orderTime > pSince );
END
我也試過這樣:
BEGIN
SELECT SUM( quantity ) INTO pVolume FROM db.table WHERE orderTime > pSince;
END
當我這樣稱呼它時,似乎都不起作用:
CallableStatement lCall = getConnection().prepareCall( "{call getTotal(?,?)}" );
lCall.setTimestamp( 1, new Timestamp( System.currentTimeMillis() - 600000 ));
lCall.registerOutParameter( 2, Types.DOUBLE );
lCall.execute();
ResultSet lResults = lCall.getResultSet();
lResults.next();
return lResults.getBigDecimal( 1 );
這將返回一個空結果集。
添加lResults.beforeFirst()
會引發 null 指針異常,因為lResults.rowData
是 null。 我也試過lResults.getBigDecimal( "pVolume" )
得到相同的結果。
我也試過:
ResultSet lResults = lCall.executeQuery();
lResults.next();
return lResults.getBigDecimal( 1 );
它會在lResults.next()
上引發 SQLException,因為它說調用是 UPDATE,因此沒有任何結果。
我懷疑我的存儲過程中遺漏了一些東西。 有任何想法嗎?? 哦,我正在以 dev 身份登錄,而不是 root。 我檢查了權限,我可以執行。
CallableStatement
的結果通過其(自己的)聲明的方法直接檢索:
lCall.execute();
return lCall.getBigDecimal( 2 );
// do not forget to close the statement - try-with-resource
無需調用getResultSet()
(來自Statement
)。
文檔:
所有 OUT 參數的類型必須在執行存儲過程之前注冊; 它們的值在執行后通過此處提供的 get 方法檢索。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.