Как вставить строки, содержащие значения Timestamp, используя clojure.java.jdbc? - PullRequest
3 голосов
/ 23 июля 2011

Я пытаюсь использовать clojure.java.jdbc для вставки строк в базу данных.(База данных, о которой идет речь, - sqlite).

Я могу создать такую ​​таблицу:

(def db {:classname "org.sqlite.JDBC"
         :subprotocol "sqlite"
         :subname "/path/to/my/database"})

(with-connection db (create-table :foo [:bar :int] 
                                       [:baz :int] 
                                       [:timestamp :datetime]))

И это работает.Но если я попытаюсь вставить строку в базу данных, произойдет сбой:

(with-connection db (insert-rows :foo
          [1 2 (java.sql.Timestamp. (.getTime (java.util.Date.)))]))

Предоставление исключения: ошибка подтверждения: счетчик параметров (3)! = Счетчик значений (6).

Но если я опущу поле метки времени в определении таблицы и операции вставки строк, проблем не будет.Так что я делаю не так с отметкой времени?

1 Ответ

3 голосов
/ 25 июля 2011
 (def sqllite-settings
  {
   :classname   "org.sqlite.JDBC"
   :subprotocol "sqlite"
   :subname     "test.db"
  }
 )

(with-connection sqllite-settings 
  (create-table :foo 
        [:bar :int] 
        [:baz :int]  
        [:timestamp :datetime]))

(with-connection sqllite-settings (insert-rows :foo
       [1 2 (java.sql.Timestamp. (.getTime (java.util.Date.)))]))

(with-connection sqllite-settings 
       (with-query-results rs ["select * from foo"] (doall rs)))

вернул ожидаемое:

({: bar 1,: baz 2,: timestamp 1311565709390})

Я использую clojure.contrib.sql

(use 'clojure.contrib.sql)

И драйвер SQLLite отсюда: http://www.zentus.com/sqlitejdbc/

Можете ли вы попробовать, если contrib.sql работает для вас?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...