Как получить имена столбцов с учетом регистра из запроса MySQL, используя funcool / clojure.jdbc - PullRequest
0 голосов
/ 26 октября 2018

При извлечении элементов из таблицы MySQL с использованием funcool / clojure.jdbc все имена столбцов строчные, даже если таблица была создана с именами столбцов в смешанном регистре. Я нашел разные ответы, которые указывают, что двойные кавычки, обратные символы и т. Д. Должны что-то делать, но они этого не делают. Клиентская сторона - это Windows. Серверная часть MySQL - Linux.

Например, этот скриншот из HeidSQL показывает несколько имен столбцов:

enter image description here

Я могу запросить имена столбцов в Clojure REPL с помощью show columns from tablename:

arena-rest.sql> (map :field (fetch "show columns from EEComponents"))
("Number" "Category" "Footprint" "Footprint path" ...

Однако, когда я запрашиваю данные, я получаю имена полей в нижнем регистре на карте возврата:

arena-rest.sql> (fetch "select Number from EEComponents")
[{:number "120-00001"} {:number "190-99999"} {:number "180-00002"} 
{:number "180-00003"}]

Я ожидаю ответа типа

[{:Number "120-00001"} {:Number "190-99999"} {:Number "180-00002"} 
{:Number "180-00003"}]

Я пробовал select "Number" from EEComponents, select Number AS "Number"... и т. Д., В том числе с использованием обратных кавычек, но не повезло.

Я нашел несколько вопросов / ответов SO, которые указывают на то, что для всех реализаций SQL это нормальное поведение, когда имена возвращаемых строчек в возвращаемых элементах строчные, однако, когда я выполняю запрос, используя другое средство, такое как непосредственно в командной строке MySQL, регистр сохраняется в возвращаемых данных:

enter image description here

Так что я не уверен, находится ли это в java или в clojure части. Некоторые поиски показывают, что регистр столбца должен быть сохранен в Java ResultSet. Так что я думаю, что это локально для оболочки funcool / clojure.jdbc.

Мой закрытый проект:

(defproject arena-rest "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :dependencies [[org.clojure/clojure "1.9.0"]
                 [clj-http "3.9.1"]
                 [cheshire "LATEST"]
                 [crouton "LATEST"]
                 [mysql/mysql-connector-java "8.0.12"]
                 [funcool/clojure.jdbc "0.9.0"]
                 [org.clojure/tools.trace "0.7.9"]
                 [org.flatland/ordered "1.5.6"]]
  :main arena-rest.core)

Мой файл clojure начинается так:

(ns arena-rest.sql
  (:require [jdbc.core :as jdbc]
            [clojure.string :as str]
            [clojure.pprint :refer [pprint]]
            [clojure.repl :refer [doc]] ... and other stuff

Итак, можно ли возвращать имена столбцов в правильном регистре, используя funcool / clojure.jdbc, или мне нужно использовать другой, например org.clojure / java.jdbc?

1 Ответ

0 голосов
/ 26 октября 2018

Этот является релевантным кодом, который определяет, как привести имена столбцов в наборы результатов, который по умолчанию преобразует строки в нижний регистр.

Попробуйте (fetch "select Number from EEComponents" {:identifiers identity}) оставить строки как есть или {:identifiers keyword}, чтобы превратить их в ключевые слова.

(я бы также рассмотрел использование https://github.com/clojure/java.jdbc)

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