I am running Win Vista.
I create a project with Lein new fruit in C:\projects
I cd to fruit  in C:/projects/fruit
I copy code from the mysql project that runs when reading the book table. This is the project code and the core code to access mysql.
I added code to create the table "fruit" in test db.
I run Lein deps
I run lein repl
I enter statement"(load "/fruit/core")
I enter statement "(fruit.core/create-fruit)
I get error message
==============================

user=> (fruit.core/insert-rows-fruit)
Exception no current database connection clojure.java.jdbc.internal/connection*
(internal.clj:40)
user=>
fruit/core.clj  fiele

======================
I have deleted create-fruit


I'm not sure what you mean by
How exactly are you running your code
(you never answer this one)?

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

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



;   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
(sql/with-connection db
 "Insert complete rows"
 []
  (sql/insert-record :books
 (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.
===========================================\(defproject mysql "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"]])
----- Original Message ----- From: "Sean Corfield" <seancorfi...@gmail.com>
To: <clojure@googlegroups.com>
Sent: Monday, January 09, 2012 9:57 AM
Subject: Re: mysql and fruit tables


On Sun, Jan 8, 2012 at 8:26 PM, jayvandal <s...@ida.net> wrote:
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

You must provide more detail when asking questions: what is the exact
error message / problem you see? How exactly are you running your code
(you never answer this one)?

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"])

I assume you haven't pasted this correctly?

There was no ( before defproject and you close the dependencies on
line 3 so java.jdbc and mysql-connector-java are not part of that
list. Here's what it should look like:

(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"]])

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

This should be a def not a defn.

(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)"]))

You're missing a closing parenthesis here.

(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]))

This doesn't match how you declared the table: you declared ID
(integer), NAME (varchar), APPEARANCE (varchar), COST (integer) but
you are trying to insert string, string, integer, double.

The http://clojure.github.com/java.jdbc documentation is correct but
you have changed the code to something that does not work.
--
Sean A Corfield -- (904) 302-SEAN
An Architect's View -- http://corfield.org/
World Singles, LLC. -- http://worldsingles.com/

"Perfection is the enemy of the good."
-- Gustave Flaubert, French realist novelist (1821-1880)

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