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]