clojure.contrib.sql语法帮助:有人可以给我删除数据库中的行的语法吗?

时间:2014-06-23 12:39:14

标签: oracle clojure clojure-contrib

让我们说我有一张叫做桌子的桌子," someTable"我想删除column1 =" data1",column2 =" data2"等等的行......

这是我到目前为止的代码。

(let [db-host "asdfgh.abc.roott.net"
  db-port 1234      
  db-name "ABCDE"]

(def db {:classname "oracle.jdbc.driver.OracleDriver" ; must be in classpath
       :subprotocol "oracle:thin"
       :subname (str "@" db-host ":" db-port ":" db-name)
       ; Any additional keys are passed to the driver
       ; as driver-specific properties.
       :user "user"
       :password "password"}
                               ))
(sql/with-connection db
(sql/delete-rows "tableName" [{column1, data1} {column2, data2}]))

我收到错误......为什么?

2 个答案:

答案 0 :(得分:1)

delete-rows需要表的名称和SQL WHERE子句。后者通常作为向量给出,该向量由参数化的SQL字符串(即实际值由?表示的字符串)和要用于所述参数的值组成。

(sql/with-connection db
  (sql/delete-rows "tableName" ["column1 = ? AND column2 = ?" data1 data2]))

运行此操作后,?将分别替换为data1data2(顺便说一句,这是正确的转义,这就是为什么应该在第一次使用放置)并对服务器运行查询。

在您的情况下,您没有提供字符串作为第一个元素,它将导致某种ClassCastException或在驱动程序中尝试执行无效查询。

答案 1 :(得分:1)

clojure.contrib.sql已过时且不再维护。您应该使用clojure.java.jdbc - 请参阅Github repositoryreference documentationcommunity maintained documentation

使用更新的库,您不需要with-connection,您只需说:

(sql/delete! db :tableName ["column1 = ? and column2 = ?" data1 data2])