haul 2002/06/10 02:01:53 Modified: src/java/org/apache/cocoon/components/language/markup/xsp EsqlHelper.java src/java/org/apache/cocoon/components/language/markup/xsp/java esql.xsl Log: <action dev="CH" type="add" due-to="Roger I Martin PhD" due-to-email="[EMAIL PROTECTED]"> ESQL: Added support for reading BLOBs from database. </action> Revision Changes Path 1.10 +43 -1 xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/EsqlHelper.java Index: EsqlHelper.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/EsqlHelper.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- EsqlHelper.java 16 May 2002 16:01:17 -0000 1.9 +++ EsqlHelper.java 10 Jun 2002 09:01:52 -0000 1.10 @@ -55,6 +55,7 @@ import java.io.Reader; import java.sql.ResultSet; import java.io.InputStream; +import java.sql.Blob; import java.sql.Clob; import java.sql.Types; @@ -64,11 +65,52 @@ * * based on the orginal esql.xsl * @author <a href="mailto:[EMAIL PROTECTED]">Torsten Curdt</a> - * @version CVS $Id: EsqlHelper.java,v 1.9 2002/05/16 16:01:17 haul Exp $ + * @version CVS $Id: EsqlHelper.java,v 1.10 2002/06/10 09:01:52 haul Exp $ */ public class EsqlHelper { + + /** returns byte array from BLOB + */ + public final static byte[] getBlob(ResultSet set, String column) throws RuntimeException { + + byte[] result = null; + try { + result = EsqlHelper.getBlob(set,set.findColumn(column)); + } catch (Exception e) { + throw new RuntimeException("Error getting blob data: " + e.getMessage()); + } + return result; + } + + /** returns byte array from BLOB + */ + public final static byte[] getBlob(ResultSet set, int column) throws java.lang.Exception { + + InputStream reader = null; + byte[] buffer = null; + + try { + if (set.getMetaData().getColumnType(column)==java.sql.Types.BLOB) { + Blob dbBlob = set.getBlob(column); + int length = (int) dbBlob.length(); + reader = dbBlob.getBinaryStream(); + buffer = new byte[length]; + reader.read(buffer); + reader.close(); + if (reader != null) + reader.close(); + if (buffer == null) + return null; + return buffer; + } else { + return set.getString(column).getBytes(); + } + } catch ( Exception e) { + throw new RuntimeException("Error getting blob data: " + e.getMessage()); + } + } /** returns Unicode encoded string from CLOB or String column */ 1.28 +13 -7 xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/java/esql.xsl Index: esql.xsl =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/java/esql.xsl,v retrieving revision 1.27 retrieving revision 1.28 diff -u -r1.27 -r1.28 --- esql.xsl 4 Jun 2002 09:06:53 -0000 1.27 +++ esql.xsl 10 Jun 2002 09:01:52 -0000 1.28 @@ -1,6 +1,6 @@ <?xml version="1.0"?> -<!-- $Id: esql.xsl,v 1.27 2002/06/04 09:06:53 haul Exp $--> +<!-- $Id: esql.xsl,v 1.28 2002/06/10 09:01:52 haul Exp $--> <!-- ============================================================================ @@ -56,7 +56,7 @@ * ESQL Logicsheet * * @author ? - * @version CVS $Revision: 1.27 $ $Date: 2002/06/04 09:06:53 $ + * @version CVS $Revision: 1.28 $ $Date: 2002/06/10 09:01:52 $ --> <xsl:stylesheet version="1.0" @@ -174,6 +174,7 @@ <xsp:include>java.sql.Struct</xsp:include> <xsp:include>java.sql.SQLException</xsp:include> <xsp:include>java.sql.Clob</xsp:include> + <xsp:include>java.sql.Blob</xsp:include> <xsp:include>java.text.SimpleDateFormat</xsp:include> <xsp:include>java.text.DecimalFormat</xsp:include> <xsp:include>java.io.StringWriter</xsp:include> @@ -849,8 +850,13 @@ <xsp:expr><xsl:call-template name="get-resultset"/>.getShort(<xsl:call-template name="get-column"/>)</xsp:expr> </xsl:template> +<xspdoc:desc>returns the value of the given column as byte array</xspdoc:desc> +<xsl:template match="esql:row-results//esql:get-blob|esql:call-results//esql:get-blob" name="get-blob"> + <xsp:expr>EsqlHelper.getBlob(<xsl:call-template name="get-resultset"/>,<xsl:call-template name="get-column"/>)</xsp:expr> +</xsl:template> + <xspdoc:desc>returns the value of the given column as unicode string (column can be string or clob</xspdoc:desc> -<xsl:template match="esql:row-results//esql:get-clob" name="get-clob"> +<xsl:template match="esql:row-results//esql:get-clob|esql:call-results//esql:get-clob" name="get-clob"> <xsp:expr>EsqlHelper.getStringOrClob(<xsl:call-template name="get-resultset"/>,<xsl:call-template name="get-column"/>)</xsp:expr> </xsl:template> @@ -920,17 +926,17 @@ </xsl:template> <xspdoc:desc>returns the name of the given column. the column mus tbe specified by number, not name.</xspdoc:desc> -<xsl:template match="esql:row-results//esql:get-column-name|esql:call-results//esql:get-column-name"> +<xsl:template match="esql:results//esql:get-column-name"> <xsp:expr><xsl:call-template name="get-resultset"/>.getMetaData().getColumnName(<xsl:call-template name="get-column"/>)</xsp:expr> </xsl:template> <xspdoc:desc>returns the label of the given column. the column mus tbe specified by number, not name.</xspdoc:desc> -<xsl:template match="esql:row-results//esql:get-column-label|esql:call-results//esql:get-column-label"> +<xsl:template match="esql:results//esql:get-column-label"> <xsp:expr><xsl:call-template name="get-resultset"/>.getMetaData().getColumnLabel(<xsl:call-template name="get-column"/>)</xsp:expr> </xsl:template> <xspdoc:desc>returns the name of the type of the given column. the column must be specified by number, not name.</xspdoc:desc> -<xsl:template match="esql:row-results//esql:get-column-type-name|esql:call-results//esql:get-column-type-name"> +<xsl:template match="esql:results//esql:get-column-type-name"> <xsp:expr><xsl:call-template name="get-resultset"/>.getMetaData().getColumnTypeName(<xsl:call-template name="get-column"/>)</xsp:expr> </xsl:template> @@ -940,7 +946,7 @@ </xsl:template> <xspdoc:desc>allows null-column testing. Evaluates to a Java expression, which is true when the referred column contains a null-value for the current resultset row</xspdoc:desc> -<xsl:template match="esql:row-results//esql:is-null"> +<xsl:template match="esql:row-results//esql:is-null|esql:call-results//esql:is-null"> <xsp:expr>((<xsl:call-template name="get-resultset"/>.getObject("<xsl:value-of select="@column"/>") == null) || <xsl:call-template name="get-resultset"/>.wasNull())</xsp:expr> </xsl:template>
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]