oracle
  • jdbc
  • spring-jdbc
  • 2013-05-04 68 views 0 likes 
    0

    我有一個奇怪的問題, 我的查詢如下所示。彈出jdbcTemplate執行查詢

    String tokenQuery = "select id from table 
             where current_timestamp between 
           creation_time and (creation_time + interval '10' minute) 
            and token = '"+Token+"'"; 
    

    但是當我運行,jdbcTemplate.queryForLong(tokenQuery),不管是什麼,它總是拋出EmptyDataAccessException。 我在Oracle中執行此操作 我們不能將動態值附加到字符串,然後將其作爲查詢傳遞並執行嗎? 可能是什麼問題?

    回答

    0

    我認爲你得到的實際上是一個EmptyResultDataAccessException。這個異常的javadoc如下所示:

    當預期結果至少有一行(或元素),但實際返回零行(或元素)時,會拋出數據訪問異常。

    這只是意味着查詢執行正常,應該返回一行,但不返回任何。所以沒有行滿足您的查詢條件。

    如果這是預期的,那麼捕捉異常,或使用返回列表而不是返回單個值的方法。這樣,您可以測試返回的列表是否爲空。

    也就是說,您應該使用參數化查詢,而不是像您所做的那樣連接令牌。這將防止SQL注入攻擊。例如,即使令牌包含報價,它也可以工作。

    +0

    感謝您的回覆。 Infact如果我直接使用sqldeveloper運行相同的查詢(我在調試時複製),它將返回一行和一列。這讓我感到困惑。是單引號還是queryForLong()以不同於預期的方式工作? – 2013-05-05 04:04:27

    +0

    我會先檢查令牌。你確定它是正確的大寫。你確定它沒有任何尾隨的空白空間等 – 2013-05-05 06:18:29

    相關問題