Oracle clojure.contrib.sql语法帮助:有人能告诉我从数据库中删除行的语法吗?
假设我有一个名为“someTable”的表,我想删除column1=“data1”、column2=“data2”等的行 这是我目前掌握的代码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
(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}]))
我得到一个错误。。。为什么?
删除行
需要表名和SQLWHERE
子句。后者通常作为向量给出,由参数化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])