Hello all,
I'm attempting to use the SQL library (with the jTDS JDBC driver for
SQL Server) and am running into problem. Specifically, something as
innocuous as
(with-connection db
(insert-rows :my_table
["foo" "bar" "baz" "16" 0 10 0 "qux" ""]))
throws an exception, java.sql.BatchUpdateException: Parameter #2 has
not been set. (NO_SOURCE_FILE:0).
This is odd, because code that is very similar in the SQL test file
works fine with Derby (I haven't tried with SQL Server). I set some
breakpoints inside the JDBC driver with jswat and looked at calls to
PreparedStatement#setObject and could see that it was getting called
for each position in the prepared statement (internally the SQL
library is generating "insert into my_table values
(?,?,?,?,?,?,?,?,?)"). Then I set a breakpoint in executeBatch and was
surprised to see that the batch about to be executed contained 9
statements (which happens to be the number of parameters)! Looking at
the definition of doPrepared, I looks to me like the body of the doSeq
is calling both #setObject *and* #addBatch --- I think this is a bug.
(defn do-prepared
"Executes a prepared statement on the open database connection with
parameter sets"
[sql & sets]
(with-open [stmt (.prepareStatement (connection) sql)]
(doseq [set sets
[index value] (map vector (iterate inc 1) set)]
(.setObject stmt index value)
(.addBatch stmt))
(.executeBatch stmt)))
The problem, such as it is, is that the Derby embedded driver works
fine. I haven't looked at the Derby code, but I think this is an
accident.
Comments?
Thanks.
-tree
--
Tom Emerson
[EMAIL PROTECTED]
http://www.dreamersrealm.net/~tree
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---