As penance, here's an example that is closer to what I was describing:

(require '[clojure.java.jdbc :as j])
(require '[clojure.pprint :as pp])

(def db-spec
    {:subprotocol "derby"
     :classname "org.apache.derby.jdbc.EmbeddedDriver"
     :subname "testDb"
     :create true})

(j/db-do-commands db-spec
    (j/create-table-ddl :fruit
        [:name "varchar(32)" :primary :key]
        [:appearance "varchar(32)"]
        [:cost :int]
        [:grade :real]))

(j/db-do-commands db-spec
    (j/create-table-ddl :vegetables
        [:name "varchar(32)" :primary :key]
        [:appearance "varchar(32)"]
        [:cost :int]
        [:grade :real]))

;; Print the columns from all application tables
(pp/print-table [:table_name :column_name :type_name :column_size]
   (j/with-db-metadata [md db-spec]
      (j/metadata-result (.getColumns md nil "APP" nil nil))))


-----------------------------

This produces:

| :table_name | :column_name | :type_name | :column_size |
|-------------+--------------+------------+--------------|
|       FRUIT |         NAME |    VARCHAR |           32 |
|       FRUIT |   APPEARANCE |    VARCHAR |           32 |
|       FRUIT |         COST |    INTEGER |           10 |
|       FRUIT |        GRADE |       REAL |           23 |
|  VEGETABLES |         NAME |    VARCHAR |           32 |
|  VEGETABLES |   APPEARANCE |    VARCHAR |           32 |
|  VEGETABLES |         COST |    INTEGER |           10 |
|  VEGETABLES |        GRADE |       REAL |           23 |

On Wed, Feb 25, 2015 at 1:41 PM, Aaron Cohen <aa...@assonance.org> wrote:

> On Wed, Feb 25, 2015 at 1:35 PM, Cecil Westerhof <cldwester...@gmail.com>
> wrote:
>
>> 2015-02-25 19:23 GMT+01:00 Aaron Cohen <aa...@assonance.org>:
>>
>>> On Wed, Feb 25, 2015 at 1:08 PM, Cecil Westerhof <cldwester...@gmail.com
>>> > wrote:
>>>
>>>>
>>>>
>>>> 2015-02-25 18:14 GMT+01:00 Andy Fingerhut <andy.finger...@gmail.com>:
>>>>
>>>>> doseq does not have anything precisely like C/Java/Perl/etc.'s 'break'
>>>>> or 'continue'.  The closest thing might be the :while keyword.  You can 
>>>>> see
>>>>> some one example of its use near the end of the examples on this page:
>>>>> http://clojuredocs.org/clojure.core/doseq
>>>>>
>>>>> The best way I know to get such behavior is to use Clojure's loop,
>>>>> where if/when/whatever-conditional-statements-you-wish can used to control
>>>>> explicitly to do another loop iteration using recur, or not.
>>>>>
>>>>
>>>> ​I made the following with loop:
>>>>     (defn do-show-table
>>>>       [table]
>>>>       (loop [all-tables (show-tables db-spec)]
>>>>         (let [this-table (get (first all-tables) :table_name)]
>>>>           (if (= all-tables ())
>>>>               (printf "Table not found: %s\n" table)
>>>>             (if (= (lower-case table) (lower-case this-table))
>>>>                 (let [format "%-20s %-30s %-5s %-5s %-20s\n"]
>>>>                   (printf "Table %s:\n" table)
>>>>                   (printf format "Field" "Type" "Null?" "Key" "Default")
>>>>                   (doseq [{:keys [field type null key default]}
>>>>                          (jdbc/query db-spec [(str "SHOW COLUMNS FROM "
>>>> table)])]
>>>>
>>>
>>> Please don't get into the habit of doing db queries like this, you're
>>> one "Little Bobby Tables" away from an sql injection. In this case you
>>> should do (jdbc/query db-spec ["SHOW COLUMNS FROM ?" table]).
>>>
>>
>> ​That gives:
>>     JdbcSQLException Syntax error in SQL statement "SHOW COLUMNS FROM ?";
>> expected "identifier"; SQL statement:
>>     SHOW COLUMNS FROM ? [42001-184]  org.h2.engine.SessionRemote.done
>> (SessionRemote.java:622)
>> ​
>>
>> ​That is why I do it in this way. As I understood it this has to do with
>> that with a 'show columns from' the table can not be supplied. (I first
>> tried Yesql, only when that did not work I went to JDBC.)​
>>
>>
>
> I see, sorry to jump the gun and be incorrect while doing so.
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to