Ошибка при обработке результатов запроса к БД - PullRequest
2 голосов
/ 14 июля 2011

Может кто-нибудь помочь мне понять, почему мой код (см. Ниже) приводит к следующей ошибке:

Исключение в потоке "main" java.lang.UnsupportedOperationException: nth не поддерживается для этого типа:PersistentStructMap

(defn search [query]
  (with-connection db 
    (with-query-results rs [query] 
      (doseq [[k v] rs] 
        (println v)))))

(search (nth *command-line-args* 0))

1 Ответ

3 голосов
/ 15 июля 2011

rs - это последовательность (список), представляющая все записи в вашем наборе результатов.Каждый элемент rs представляет собой хэш-карту, представляющую одну запись, а пары ключ / значение на карте представляют имена полей и значения для этой записи.Вы пытаетесь сделать эквивалент этого:

user> (let [rs [{:id 1 :val "foo"} {:id 2 :val "bar"}]]
        (doseq [[k v] rs]
          (println v)))
; Evaluation aborted.
; nth not supported on this type: PersistentArrayMap

Это пытается разложить каждую карту на [k v], делая грубый эквивалент этого:

user> (let [k (nth {:id 1 :val "foo"} 0)
            v (nth {:id 1 :val "foo"} 1)])
; Evaluation aborted.
; nth not supported on this type: PersistentArrayMap

Если выВы пытаетесь напечатать значение для каждого поля в каждой записи, вам необходимо сделать следующее:

user> (let [rs [{:id 1 :val "foo"} {:id 2 :val "bar"}]]
        (doseq [record rs
                [k v] record]
          (println v)))
foo
1
bar
2

"Для каждой записи в наборе результатов, для каждого ключа / значения в этой записи выведите значение."

Если ваш набор результатов содержит только одну запись (или вы заботитесь только об одной из них), и вы пытаетесь перебрать поля этой записи, тогда передайте doseq только first:

user> (let [rs [{:id 1 :val "foo"}]]
        (doseq [[k v] (first rs)]
          (println v)))
foo
1

"Для каждого ключа / значения в первой записи набора результатов выведите значение."

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...