让我们说我有一张叫做桌子的桌子," 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}]))
我收到错误......为什么?
答案 0 :(得分:1)
delete-rows
需要表的名称和SQL WHERE
子句。后者通常作为向量给出,该向量由参数化的SQL字符串(即实际值由?
表示的字符串)和要用于所述参数的值组成。
(sql/with-connection db
(sql/delete-rows "tableName" ["column1 = ? AND column2 = ?" data1 data2]))
运行此操作后,?
将分别替换为data1
和data2
(顺便说一句,这是正确的转义,这就是为什么应该在第一次使用放置)并对服务器运行查询。
在您的情况下,您没有提供字符串作为第一个元素,它将导致某种ClassCastException
或在驱动程序中尝试执行无效查询。
答案 1 :(得分:1)
clojure.contrib.sql
已过时且不再维护。您应该使用clojure.java.jdbc
- 请参阅Github repository,reference documentation和community maintained documentation。
使用更新的库,您不需要with-connection
,您只需说:
(sql/delete! db :tableName ["column1 = ? and column2 = ?" data1 data2])