簡體   English   中英

Spring SimpleJdbcCall 返回錯誤值

[英]Spring SimpleJdbcCall returns wrong value

我使用 SimpleJdbcCall 調用存儲過程。

    public Map<String, Object> callStoredProcedure(SimpleJdbcCall jdbcCall, String procedureName, Map<String, Object> inParamMap) {
        log.info("Calling stored procedure with name : " + procedureName);
        SqlParameterSource in = new MapSqlParameterSource(inParamMap);
        Map<String, Object> out = jdbcCall.withProcedureName(procedureName).execute(in);
        return out;
}

其結果輸出為

鍵 = #result-set-1,值 = [{=17.00}]

當我像這樣獲得 Value 的類類型時,我感到困惑。

類 class1 = entry.getValue().getClass();

當我在數據庫上執行時,我的 sp 返回 17.00,但在 jdbcCall 代碼中得到=17.00

任何評論都會有所幫助。

這是我如何從以前的項目構建我的 SimpleJdbcCall....

createUpdateUsersSP = new SimpleJdbcCall(contactManagerJdbcT)
                .withProcedureName(pb.getCreateUpdateUsersSp())
                .declareParameters(
                        new SqlOutParameter("p_user_id", Types.NUMERIC),
                        new SqlOutParameter("p_update_stamp", Types.VARCHAR),
                        new SqlOutParameter("p_status", Types.VARCHAR),
                        new SqlOutParameter("p_failure_reason", Types.VARCHAR),
                        new SqlParameter("p_vonage_id", Types.VARCHAR),
                        new SqlParameter("p_mobile_did", Types.VARCHAR),
                        new SqlParameter("p_email_address", Types.VARCHAR),
                        new SqlParameter("p_name", Types.VARCHAR),
                        new SqlParameter("p_netname_id", Types.NUMERIC),
                        new SqlParameter("p_user_status", Types.VARCHAR),
                        new SqlParameter("p_image_update_stamp", Types.TIMESTAMP),
                        new SqlParameter("p_has_profile_image", Types.VARCHAR),
                        new SqlParameter("p_nick_name", Types.VARCHAR));
        createUpdateUsersSP.setAccessCallParameterMetaData(false);

你有類似的東西可以給我們看嗎?

顯然,您的存儲過程只返回一個結果,但JdbcCallexecute方法試圖返回輸出參數映射,如參數聲明中那樣按名稱鍵控 由於您沒有參數聲明,您將獲得一個只有行、沒有列名和單個值17.00ResultSet

我認為您應該改用executeObject將單出參數作為指定返回類型的對象返回。

String str = jdbcCall.withProcedureName(procedureName).executeObject(String.class, in);

或者

double val = jdbcCall.withProcedureName(procedureName).executeObject(Double.class, in);

這是我提取值的工作,因為我看不到該問題的任何可行答案。

((Map)((List)out.get("#result-set-1")).get(0)).get("");

這給出了 out 參數內的值。

這是我的工作。

Map<String,Object> simpleJdbcCallResult = simpleJdbcCall.execute(sqlParameterSource);

LinkedCaseInsensitiveMap<?> obj = 
(LinkedCaseInsensitiveMap<?>)((List<?>)simpleJdbcCallResult.get("#result-set-1")).get(0);

Array[] values = (Array[]) obj.values().toArray()[0];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM