2012-04-13 18 views
6

मैं एक स्प्रिंग दाव में कोड जो सिर्फ ठीक काम करता है निम्नलिखित है -स्प्रिंग जेडीबीसी टेम्पलेट में एकाधिक नामित पैरामीटर कैसे पास करें?

Object args[] = { userId, restaurantId }; 
int userOrderCount = getJdbcTemplate() 
    .queryForInt(
     "SELECT COUNT(orderid) FROM orders WHERE useridfk_order = ? AND restaurantidfk_order = ?", 
     args 
    ); 

लेकिन अगर मैं इस प्रकार अपनी क्वेरी के लिए NamedParameters उपयोग करने का निर्णय -

int userOrderCount = getNamedParameterJdbcTemplate() 
    .queryForInt(
     "SELECT COUNT(orderid) FROM orders WHERE useridfk_order = :userId AND restaurantidfk_order = :restaurantId", 
     new MapSqlParameterSource(":restaurantId", restaurantId) 
      .addValue(":userId", userId) 
    ); 

मैं इस अपवाद हो रही है -

org.springframework.dao.InvalidDataAccessApiUsageException: No value supplied for the SQL parameter 'userId': No value registered for key 'userId'. 

मुझे सुनहरा कहा गया है "अगर इसे टूटा नहीं है तो इसे ठीक न करें"।

लेकिन फिर भी, मैं मदद नहीं कर सकता लेकिन आश्चर्य हो रहा है कि यह क्यों हो रहा है?

उत्तर

18

इसका उपयोग करें।

new MapSqlParameterSource("restaurantId", restaurantId) 
    .addValue("userId", userId); 

इसके बजाए।

new MapSqlParameterSource(":restaurantId", restaurantId) 
    .addValue(":userId", userId); 
+1

अरे अरे! इस तरह की मूर्खतापूर्ण गलती :-( –

+1

(+1) सही: पाठक के लिए इसे और अधिक स्पष्ट बनाने के लिए: आपके पास मानचित्र पैरामीटर – Ralph

+1

लोगों के लिए गलतियों के सामने ''' नहीं होना चाहिए। – erimerturk

संबंधित मुद्दे