Re: Query blobs in clojure.contrib.sql?
This is exactly what I was looking for! Early Christmas for me. Thank you Santa...e...John On Dec 1, 2:04 am, John Harrop wrote: > On Mon, Nov 30, 2009 at 9:57 PM, Base 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.)- Hide quoted > text - > > - Show quoted text - -- 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
Re: Query blobs in clojure.contrib.sql?
On Mon, Nov 30, 2009 at 9:57 PM, Base 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
Query blobs in clojure.contrib.sql?
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 Any thoughts would be *most* appreciated. Thanks Base -- 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