Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';使用clojure.java.jdbc/insert是错误的_Clojure_Insert - Fatal编程技术网

什么';使用clojure.java.jdbc/insert是错误的

什么';使用clojure.java.jdbc/insert是错误的,clojure,insert,Clojure,Insert,我尝试使用java.jdbc insert!函数,它可以接收多个对象。 clojure.java.jdbc/insert应按如下方式调用: (clojure.java.jdbc/insert! db {:name "john" :password "123"} {:name "george" :password "234"}) 我定义了一个函数来添加多个用户记录: (defn添加用户[用户和更多] (-添加用户数据库规范用户更多)) (defmacro-添加用户 ([db user]`(j/与

我尝试使用java.jdbc insert!函数,它可以接收多个对象。
clojure.java.jdbc/insert应按如下方式调用:

(clojure.java.jdbc/insert! db {:name "john" :password "123"} {:name "george" :password "234"})
我定义了一个函数来添加多个用户记录:

(defn添加用户[用户和更多]
(-添加用户数据库规范用户更多))
(defmacro-添加用户
([db user]`(j/与db连接[con db#db]
(j/insert!con db#~user)))
([db user&more](让[users(-mk user列出user more)]
`(j/带db连接[con db#db]
(j/insert!con db#~@(展平用户(#))))
(defmacro-mk usre列表
([user]`~user)
([user&more]`(list~user(-mk user list~@more)))
当我宏展开-add users时,结果如下所示:

(clojure.java.jdbc/insert! db {:name "john" :password "123"} {:name "george" :password "234"})
=>(宏扩展'(-addusersdbspec{:name“john”:password“1234”}))
(b)clojure.core/与开放开放[con.com.java.java.java.java.jdbc/add-连接(clojure.java.java.java.jdbc.jdbc.jdbc/获取连接(clojure.java.java.jdbc.jdbc/获取连接db-spec[db-spec-spec-spec-spec(10-spec-spec-spec)uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu20.汽车(uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu20.自自uuuuuuuuu20.自自)自)自自)自)自)自)自uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu{:名字“约翰”,“密码”1234})
但当我跑步时:

=>(添加用户{:名称“john”:密码“1234”})
使用列调用IllegalArgumentException insert,但没有值clojure.java.jdbc/insert-sql(jdbc.clj:992)
这个宏有什么问题?或者我应该如何包装并传递任意数量的参数到函数中,比如
insert!
,它需要将参数展平

[更新] 问题在于: 插入!在代码中不存在时需要表

(j/insert!con db#~user)应该是(j/insert!con db#:users~user) (j/insert!con db#~@(展平用户))应该是(j/insert!con db#:用户~@(展平用户))


但是还有更简单的方法吗?

您可以不用宏,使用apply:

user=> (doc apply)
-------------------------
clojure.core/apply
([f args] [f x args] [f x y args] [f x y z args] [f a b c d & args])
  Applies fn f to the argument list formed by prepending intervening arguments to args.

(defn my-insert! [x & more]
  (apply jdbc/insert! db :table x more))

在最近版本的
clojure.java.jdbc
中,您可以使用
insert multi!
,它接受行的哈希映射序列:

(defn my-insert! [& more]
  (jdbc/insert-multi! db-spec :table more))
或者你可以这样做:

(jdbc/insert-multi! db-spec :table [user-1 user-2 user-3])

这段代码的问题在于: