title: Logging PreparedStatements in Java
body: <p>One thing that always been a pain is to log SQL (JDBC) errors when you have a PreparedStatement instead of the query itself.</p>
  
  <p>You always end up with messages like:</p>
  
  <pre><code>2008-10-20 09:19:48,114 ERROR LoggingQueueConsumer-52 [Logger.error:168] Error 
  executing SQL: [INSERT INTO private_rooms_bans (room_id, name, user_id, msisdn, 
  nickname) VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE room_id = ?, name = ?, 
  user_id = ?, msisdn = ?, nickname = ?]
  </code></pre>
  
  <p>Of course I could write a helper method for retrieving the values and parsing/substitute the question marks with real values (and probably will go down that path if I don't get an outcome of this question), but I just wanted to know if this problem was resolved before by someone else and/or if is there any generic logging helper that would do that automagically for me.</p>
  
  <p><strong>Edited after a few answers:</strong></p>
  
  <p>The libraries provided so far seems to be suitable to logging the statements for debugging, which no doubt is useful. However, I am looking to a way of taking a PreparedStatement itself (not some subclass) and logging its SQL statement whenever an error occur. I wouldn't like to deploy a production app with an alternate implementation of PreparedStatement. </p>
  
  <p>I guess what I am looking for an utility class, not a PreparedStatement specialization.</p>
  
  <p>Thanks!</p>