如何使用 clojure.java.jdbc 插入包含时间戳值的行?
Posted
技术标签:
【中文标题】如何使用 clojure.java.jdbc 插入包含时间戳值的行?【英文标题】:How do I insert rows containing Timestamp values, using 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)。
但如果我在表定义和插入行操作中省略了时间戳字段,则没有问题。那么我在时间戳方面做错了什么?
【问题讨论】:
【参考方案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 适合你,你能试试吗?
【讨论】:
以上是关于如何使用 clojure.java.jdbc 插入包含时间戳值的行?的主要内容,如果未能解决你的问题,请参考以下文章
如何做批处理 jdbc/insert!和 jdbc/更新!在 Clojure 中使用 postgresql?