Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure db使用多个参数进行准备调用_Clojure_Clojure Contrib - Fatal编程技术网

Clojure db使用多个参数进行准备调用

Clojure db使用多个参数进行准备调用,clojure,clojure-contrib,Clojure,Clojure Contrib,我在Clojure.java.jdbc (sql/db-do-prepared db "INSERT INTO fruit2 ( name, appearance, cost, grade ) VALUES ( ?, ?, ?, ? )" ["test" "test" 1 1.0]) 但是如何将下面的java代码转换成clojure。我不熟悉clojure,不知道如何传递多个vector final int numRows = 10000; PreparedStatement pstm

我在
Clojure.java.jdbc

(sql/db-do-prepared db "INSERT INTO fruit2 ( name, appearance, cost, grade ) VALUES ( ?, ?, ?, ? )" ["test" "test" 1 1.0])
但是如何将下面的
java
代码转换成
clojure
。我不熟悉
clojure
,不知道如何传递多个
vector

final int numRows = 10000;
    PreparedStatement pstmt = conn
        .prepareStatement("insert into new_order values (?, ?, ?)");
    for (int id = 1; id <= numRows; id++) {
      pstmt.setInt(1, id % 98);
      pstmt.setInt(2, id % 98);
      pstmt.setInt(3, id);
      int count;
      if ((count = pstmt.executeUpdate()) != 1) {
        System.err.println("unexpected update count for a single insert " + count);
        System.exit(2);
      }
      if ((id % 500) == 0) {
        System.out.println("Completed " + id + " inserts ...");
      }
    }
final int numRows=10000;
准备好的报表pstmt=conn
.prepareStatement(“插入新的订单值(?,?)”;

对于(int id=1;id对于多个向量,函数为varargs:

(sql/db-do-prepared db "INSERT INTO fruit2 ( name, appearance, cost, grade ) VALUES ( ?, ?, ?, ? )" ["test" "test" 1 1.0] ["test" "test" 2 3.0])
如果要从列表生成输入,可以使用应用:

(apply sql/db-do-prepared db "INSERT INTO fruit2 ( name, appearance, cost, grade ) VALUES ( ?, ?, ?, ? )" (for [i (range 10)] ["test" "test" i 1.0]))
对于该逻辑的文字复制,您不能使用varargs,因为它不会给您在下一个操作之前检查每个返回值的机会:

(let [num-rows 1000
      success
      (reduce
       (fn [state id]
         (let [values [(mod id 98)
                       (mod id 98)
                       id]
               [result] (sql/do-prepared "insert into test values (?)" values)]
           (if (not= result 1)
             {:ok id}
             (reduced {:error result}))))
       (range 1 (inc num-rows)))]
  (if-let [id (:ok success)]
    (println "Completed" id "inserts")
    (do (println "unexpected update count for a single insert" (:error success))
        (System/exit 2))))

在我的例子中,我认为@noisesmith是正确的,但我认为
sql参数应该在集合(vector)中

(sql/db-do准备好了吗 分贝 [“在FROUT2中插入(名称、外观、成本、等级)值(?,?,?)” “测试”“测试”1.0])

我认为这对我很有用(我是否遗漏了什么请告诉我)


或者API自2013年以来发生了变化

对不起,我不明白你的问题。请你详细说明一下好吗?