2014-06-23 1 views
0

이의 내가, "someTable"라는 테이블을 가지고 말을하자 나는 컬럼 1 = "데이터 1", 2 열 = "데이터 2", 등 ...clojure.contrib.sql 구문 도움말 : 다른 사용자가 데이터베이스에서 행을 삭제하기위한 구문을 제공 할 수 있습니까?

이것은 내가 지금까지 가지고있는 코드 행을 삭제할.

(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}])) 

왜 ... 오류가 발생합니까?

+1

오류가 무엇입니까? – OTTA

답변

1

clojure.contrib.sql은 구형이며 더 이상 유지 관리되지 않습니다. Github repository, reference documentationcommunity maintained documentation을 대신 사용하여 clojure.java.jdbc을 사용해야합니다. 업데이트 된 라이브러리와

, 당신이 with-connection 필요하지 않습니다, 당신은 단순히 말할 수있다 :

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

delete-rows은 테이블의 이름과 SQL WHERE 절을 필요로합니다. 후자는 보통 매개 변수화 된 SQL 문자열 (즉, 실제 값이 ?으로 표시되는 문자열)과 상기 매개 변수에 사용될 값으로 구성된 벡터로 주어집니다. 이 실행

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

? 각각 data1data2로 대체됩니다 (제대로 탈출이가 처음에 사용되어야하는 이유 인 방법에 의해)과에 대한 질의 실행이 섬기는 사람.

경우에 따라 ClassCastException 일종의 결과가 나오는 문자열이나 잘못된 쿼리를 실행하려고하는 드라이버에 문자열을 제공하지 않습니다.