On Mon, Nov 30, 2009 at 9:57 PM, Base <basselsm...@gmail.com> wrote:

> Hi
>
> I have a database that has a table with complex java objects stored in
> a binary field.
>
> In java i would do something like:
>
> protected Object read(byte[] buf){
>     Object obj = null;
>     if (buf==null) return obj;
>         try {
>        ObjectInputStream objectIn =
>                             new ObjectInputStream(
>                   new ByteArrayInputStream(buf));
>        obj = objectIn.readObject();
>        } catch (IOException e){
>                                     ...
>         }
>   return obj;
> }
>
>
> I am stumped as to how to handle this sort of syntax in clojure.
>
> (defn select-test2[]
>  (with-connection db
>    (with-query-results res ["SELECT BIN_OBJ FROM MYTABLE  where ID
> =16000254"] (doall res))))
>

There seems to be some sort of disconnect here. The second piece of code
queries a database and realizes the result seq. The first extracts a
serialized Java object from a byte buffer. The missing link would be however
one extracts a BLOB from the result seq in the form of a Java byte buffer.

As for the clojure syntax, that for obtaining the byte buffer is unknown,
but presumably involves Java interop. That for the deserialization is
straightforward:

(if-not (nil? byte-buffer)
  (with-open [object-in (ObjectInputStream.
                          (ByteArrayInputStream. byte-buffer))]
    (.readObject object-in)))

(Just four lines of Clojure code, versus 11 of Java. :))

(If your Java try block didn't just clean up the streams but also e.g.
logged the error you'll need a try form added, e.g.

(if-not (nil? byte-buffer)
  (try
    (with-open [object-in (ObjectInputStream.
                            (ByteArrayInputStream. byte-buffer))]
      (.readObject object-in))
    (catch (Throwable t)
      (log-error t)
      (throw t))))

or perhaps more specific handling of particular exceptions.)

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