Oracle clojure.contrib.sql语法帮助:有人能告诉我从数据库中删除行的语法吗?

Oracle clojure.contrib.sql语法帮助:有人能告诉我从数据库中删除行的语法吗?,oracle,clojure,clojure-contrib,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 "or

假设我有一个名为“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}]))

我得到一个错误。。。为什么?

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

(sql/with-connection db
  (sql/delete-rows "tableName" ["column1 = ? AND column2 = ?" data1 data2]))
运行时,
将分别替换为
data1
data2
(顺便说一句,正确转义,这就是为什么应该首先使用它的原因),并针对服务器运行查询


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

clojure.contrib.sql已过时且不再维护。您应该改用
clojure.java.jdbc
——请参阅和

有了更新的库,您不需要连接
,只需说:

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