当前位置: 首页 > 面试题库 >

用Clojure插入PostgreSQL数组

嵇俊德
2023-03-14
问题内容

我找不到用Clojure插入Postgres数组类型的方法。

(sql/insert! db :things {:animals ["cow" "pig"]})

没按我预期的那样工作。错误信息:

PSQLException Can't infer the SQL type to use for an instance of clojure.lang.PersistentVector. Use setObject() with an explicit Types value to specify the type to use.  org.postgresql.jdbc2.AbstractJdbc2Statement.setObject (AbstractJdbc2Statement.java:1936)

即使是我能找到的对SQL的最直接访问也不起作用:

(sql/execute! db "INSERT INTO things (animals) VALUES ('{\"cow\", \"pig\"}')")

真的不知道这是怎么回事:

ClassCastException java.lang.Character cannot be cast to java.lang.String  clojure.java.jdbc/prepare-statement (jdbc.clj:419)

当然一定有可能吗?如果不是通过辅助函数,则通过某种方式执行原始SQL。


问题答案:

使用 插入!
要插入字符串向量,您必须(从字符串向量中)创建一个实现java.sql.Array的对象。您可以使用java.sql.Connection.createArrayOf创建此类对象

(def con (sql/get-connection db))

(def val-to-insert 
    (.createArrayOf con "varchar" (into-array String ["cow", "pig"]))

(sql/insert! db :things {:animals val-to-insert})

clojure.java.jdbc的文档可以
执行!

(execute! db-spec [sql & params] :multi? false :transaction? true)
(execute! db-spec [sql & param-groups] :multi? true :transaction? true)

您必须将sql字符串放入向量中才能起作用。

(sql/execute! db ["INSERT INTO things (animals) VALUES ('{\"cow\", \"pig\"}')"])


 类似资料:
  • 问题内容: 我在使用SQL时遇到了一些问题。我正在尝试在表中插入2个值。 那就是我的查询:INSERT INTO tableinfo(table,date)VALUES(’Sell’,’August‘24’); 但它不起作用。我有类似的东西: 这是非常基本的,所以我不知道为什么它不起作用:( PostgreSQL 9.2.4 问题答案: 问题不是出自INSERT,而是您要发出的无效SQL。首先尝试

  • 问题内容: 我希望能够将bigints数组写入要用于Go历史记录的表中。不幸的是,我不能,当我这样做时`sql: converting Exec argument 这是我要插入的表的结构: 问题答案: 使用自定义类型实现database / sql / driver.Valuer:

  • 如果我的ID是连续的,我如何使用Liquibase为PostgreSQL进行插入。我尝试以下几点: 我试着 错误是: 错误:列“id”中的空值违反了非空约束

  • 现在我有了hibernate的工作批插入(“hibernate.jdbc.batch_size=50”),但据我所知,hibernate会批量生成单个插入。我知道我可以告诉我的db驱动程序为每批插入创建多行插入,以使用rewriteBatchedStatements:jdbc:p加快性能ostgresql://localhost:5432/mydb?rewriteBatchedStatements

  • 这很慢吗?我有一个表有4列ID姓氏教练城 我有一个添加数据按钮,它添加了300行,每列都包含数据,所以总共有1200条记录。 实际添加数据只需4分钟多(这意味着从我按下按钮到显示消息框完成)。 我在澳大利亚的ADSL2上,速度测试刚刚完成,下载速度为28ms ping 14.12Mbps,上传速度为0.49Mbps 我知道澳大利亚互联网是一个笑话,但这似乎真的很慢! 这仅仅是因为我的网络上传速度吗

  • 本文向大家介绍使用Postgresql 实现快速插入测试数据,包括了使用Postgresql 实现快速插入测试数据的使用技巧和注意事项,需要的朋友参考一下 1.创建常规的企业信息表 2.需要使用的函数 3.常规测试数据插入(5000000条) 在普通pc机上插入,大概完成时间约8小时,过程不可监控,并且cpu/内存占用率高,磁盘基本满负荷动作,读写率基本上都是100%. 4.改进后的方法, 插入(