I have been able to access tables in mysql, but not able to add
records. I look at the examples fo "fruit  so I created a lein named
fruitI made th project file as the mysql project file. I copied the
database instructions as in mysql. I added all of the statements for
the "fruit" example but I can't even get it to access the connection
or the database
Doesn't this statement access the mysql db? :
(sql/with-connection db


Here is  the project file ;
defproject fruit "1.0.0-SNAPSHOT"
  :description "FIXME: write description"
  :dependencies [[org.clojure/clojure "1.3.0"]]


                 [org.clojure/java.jdbc "0.0.6"]
                 [mysql/mysql-connector-java "5.1.6"])
here is the core file;


(ns fruit.core
  (:require [clojure.java.jdbc :as sql]))

(defn db {:classname "com.mysql.jdbc.Driver"
         :subprotocol "mysql"
         :subname "//localhost:3306/world"
         :user "root"
         :password "pass"})

(defn create-fruit []
(sql/with-connection db
   (sql/create-table
    :fruit
    [:id :integer "PRIMARY KEY" "AUTO_INCREMENT"]
    [:name "varchar(25)"]
    [:appearance "varchar(25)"]
        [:cost "integer(5)"]))
;                Inserting multiple rows
;If you want to insert complete rows, you can use insert-rows and
provide the values as a simple vector for each row. Every column's
value must be present in the same order the columns are declared in
the table. This performs a single insert statement. If you attempt to
insert a single row, a map of the generated keys will be returned.
(defn insert-rows-fruit
  "Insert complete rows"
  []
  (sql/insert-rows
    :fruit
    ["Apple" "red" 59 87]
    ["Banana" "yellow" 29 92.2]
    ["Peach" "fuzzy" 139 90.0]
    ["Orange" "juicy" 89 88.6]))
;Inserting partial rows
;If you want to insert rows but only specify some columns' values, you
can use insert-values and provide the names of the columns following
by vectors containing values for those columns. This performs a single
insert statement. If you attempt to insert a single row, a map of the
generated keys will be returned.
(defn insert-values-fruit
  "Insert rows with values for only specific columns"
  []
  (sql/insert-values
    :fruit
    [:name :cost]
    ["Mango" 722]
    ["Feijoa" 441]))
;Inserting a record
;If you want to insert a single record, you can use insert-record and
specify the columns and their values as a map. This performs a single
insert statement. A map of the generated keys will be returned.
(defn insert-record-fruit
  "Insert a single record, map from keys specifying columsn to values"
  []
  (sql/insert-record
    :fruit
    {:name "Pear" :appearance "green" :cost 99}))
;Inserting multiple records
;If you want to insert multiple records, you can use insert-records
and specify each record as a map of columns and their values. This
performs a separate insert statement for each record. The generated
keys are returned in a sequence of maps.
(defn insert-records-fruit
  "Insert records, maps from keys specifying columns to values"
  []
  (sql/insert-records
    :fruit
    {:name "Pomegranate" :appearance "fresh" :cost 585}
    {:name "Kiwifruit" :grade 93}))
;Using transactions
;You can write multiple operations in a transaction to ensure they are
either all performed, or all rolled back.
(defn db-write
  "Write initial values to the database as a transaction"
  []
(sql/with-connection db
    (sql/transaction
  ;   (drop-fruit)
     (create-fruit)
     (insert-rows-fruit)
     (insert-values-fruit)
     (insert-records-fruit)))
  nil)
;Reading and processing rows
;To execute code against each row in a result set, use with-query-
results with SQL.
(defn db-read
  "Read the entire fruit table"
  []
  (sql/with-connection db
    (sql/with-query-results res
      ["SELECT * FROM fruit"]
      (doseq [rec res]
        (println rec)))))

(defn db-read-all
  "Return all the rows of the fruit table as a vector"
  []
  (sql/with-connection db
    (sql/with-query-results res
      ["SELECT * FROM fruit"]
      (into [] res))))

(defn db-grade-range
  "Print rows describing fruit that are within a grade range"
  [min max]
  (sql/with-connection db
    (sql/with-query-results res
      [(str "SELECT name, cost, grade "
            "FROM fruit "
            "WHERE grade >= ? AND grade <= ?")
       min max]
      (doseq [rec res]
        (println rec)))))

(defn db-grade-a
  "Print rows describing all grade a fruit (grade between 90 and 100)"
  []
  (db-grade-range 90 100))
;Updating values across a table
;To update column values based on a SQL predicate, use update-values
with a SQL where clause and a map of columns to new values. The result
is a sequence of update counts, indicating the number of records
affected by each update (in this case, a single update and therefore a
single count in the sequence).
(defn db-update-appearance-cost
  "Update the appearance and cost of the named fruit"
  [name appearance cost]
  (sql/update-values
   :fruit
   ["name=?" name]
   {:appearance appearance :cost cost}))

(defn db-update
  "Update two fruits as a transaction"
  []
  (sql/with-connection db
    (sql/transaction
     (db-update-appearance-cost "Banana" "bruised" 14)
     (db-update-appearance-cost "Feijoa" "green" 400)))
  nil)
;Updating values or Inserting records conditionally
;If you want to update existing records that match a SQL predicate or
insert a new record if no existing records match, use update-or-insert-
values with a SQL where clause and a map of columns to values. This
calls update-values first and if no rows were updated, this calls
insert-values. The result is either the sequence of update counts from
the update or the sequence of generated key maps from the insert.
(defn db-update-or-insert
  "Updates or inserts a fruit"
  [record]
  (sql/with-connection db
    (sql/update-or-insert-values
     :fruit
     ["name=?" (:name record)]
     record)))
;Exception Handling and Transaction Rollback
;Transactions are rolled back if an exception is thrown, as shown in
these examples.
(defn db-exception
  "Demonstrate rolling back a partially completed transaction on
exception"
  []
  (sql/with-connection db
    (sql/transaction
     (sql/insert-values
      :fruit
      [:name :appearance]
      ["Grape" "yummy"]
      ["Pear" "bruised"])
     ;; at this point the insert-values call is complete, but the
transaction
     ;; is not. the exception will cause it to roll back leaving the
database
     ;; untouched.
     (throw (Exception. "sql/test exception")))))

(defn db-sql-exception
  "Demonstrate an sql exception"
  []
  (sql/with-connection db
    (sql/transaction
     (sql/insert-values
      :fruit
      [:name :appearance]
      ["Grape" "yummy"]
      ["Pear" "bruised"]
      ["Apple" "strange" "whoops"]))))

(defn db-batchupdate-exception
  "Demonstrate a batch update exception"
  []
  (sql/with-connection db
    (sql/transaction
     (sql/do-commands
      "DROP TABLE fruit"
      "DROP TABLE fruit"))))

(defn db-rollback
  "Demonstrate a rollback-only trasaction"
  []
  (sql/with-connection db
    (sql/transaction
     (prn "is-rollback-only" (sql/is-rollback-only))
     (sql/set-rollback-only)
     (sql/insert-values
      :fruit
      [:name :appearance]
      ["Grape" "yummy"]
      ["Pear" "bruised"])
     (prn "is-rollback-only" (sql/is-rollback-only))
     (sql/with-query-results res
       ["SELECT * FROM fruit"]
       (doseq [rec res]
         (println rec))))
    (prn)
    (sql/with-query-results res
      ["SELECT * FROM fruit"]
      (doseq [rec res]
        (println rec)))))
;Copyright 2007-2011 by Rich Hickey and the various contributors
;Logo & site design by Tom Hickey.


doesn't the

-- 
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

Reply via email to