【问题标题】:How do I insert rows containing Timestamp values, using clojure.java.jdbc?如何使用 clojure.java.jdbc 插入包含时间戳值的行?
【发布时间】:2011-07-23 05:58:31
【问题描述】:

我正在尝试使用 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)。

但如果我在表定义和插入行操作中省略了时间戳字段,则没有问题。那么我在时间戳方面做错了什么?

【问题讨论】:

    标签: sqlite jdbc clojure


    【解决方案1】:
     (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 适合你,你能试试吗?

    【讨论】:

      猜你喜欢
      • 2020-12-17
      • 2014-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      • 2017-07-07
      • 1970-01-01
      相关资源
      最近更新 更多