You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cocoon.apache.org by Jim Mallmann <ji...@topicalnetworks.com> on 2001/02/02 21:35:20 UTC

Problem using esql:get-int

Hi, all.

I'm having a inserting some info into my DB, and I appear to have it
narrowed down to my use of the <esql:get-int> tag.  The problem is not
necessarily the tag itself, but it might have something to do with how I'm
using it and how it's nested.

I have three queries marked in the code at the bottom of this message.  The
first retrieves an artistID, and the second retrieves a genreID.  The third
query needs to use both of these numbers for its own insertion.

In the section I have labeled "Messages for Debugging" I have two messages
that I bring to the screen for debugging my problem.  These messages print
the queries as they should appear.

But when I use the same syntax in the third query I get the following error
for the first query above,
----------------------------------------------------------------------------
----------------------------------------------------------------------------
----------------------------------------------
SYNTAX:

insert into digital_music (productID, genreID) values (<esql:parameter
type="string"><xsp:expr>new String("<xsl:value-of
select="PRODUCT_DETAILS/@PRODUCT_ID"/>")</xsp:expr></esql:parameter>,<esql:p
arameter type="int"><esql:get-int column="genreID"/></esql:parameter>)

ERROR:
java.lang.RuntimeException: Error setting parameter on statement:
insert into digital_music (productID, genreID) values (?,?)
	at
_C_._Java._jakarta_tomcat_3_2_1._webapps._cocoon._tn._iontunes._bmgcatalogsa
mplefullplay.populateDocument(_bmgcatalogsamplefullplay.java:621)
	at org.apache.cocoon.processor.xsp.XSPPage.getDocument(XSPPage.java:97)
	at
org.apache.cocoon.processor.xsp.XSPProcessor.process(XSPProcessor.java:524)
	at org.apache.cocoon.Engine.handle(Engine.java:383)
	at org.apache.cocoon.Cocoon.service(Cocoon.java:183)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:865)
	at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:404)
	at org.apache.tomcat.core.Handler.service(Handler.java:286)
	at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
	at
org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:79
7)
	at org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)
	at
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpC
onnectionHandler.java:210)
	at
org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
	at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:498)
	at java.lang.Thread.run(Thread.java:484)
_bmgcatalogsamplefullplay.java

615            try {
616
_esql_query.prepared_statement.setInt(2,((EsqlQuery)_esql_queries.elementAt(
_esql_queries.size()-1)).resultset.getInt("artistID"));
617
618
619
620            } catch (SQLException _esql_exception_N11340) {
621              throw new RuntimeException("Error setting parameter on
statement: "+_esql_query.query);
622            }

----------------------------------------------------------------------------
----------------------------------------------------------------------------
----------------------------------------------

and the following error for the second query

----------------------------------------------------------------------------
----------------------------------------------------------------------------
----------------------------------------------
SYNTAX:

insert into digital_music (productID, genreID) values (<esql:parameter
type="string"><xsp:expr>new String("<xsl:value-of
select="PRODUCT_DETAILS/@PRODUCT_ID"/>")</xsp:expr></esql:parameter>,<esql:p
arameter type="int"><esql:get-int column="genreID"/></esql:parameter>)

Error:
java.lang.NullPointerException
	at
_C_._Java._jakarta_tomcat_3_2_1._webapps._cocoon._tn._iontunes._bmgcatalogsa
mplefullplay.populateDocument(_bmgcatalogsamplefullplay.java:616)
	at org.apache.cocoon.processor.xsp.XSPPage.getDocument(XSPPage.java:97)
	at
org.apache.cocoon.processor.xsp.XSPProcessor.process(XSPProcessor.java:524)
	at org.apache.cocoon.Engine.handle(Engine.java:383)
	at org.apache.cocoon.Cocoon.service(Cocoon.java:183)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:865)
	at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:404)
	at org.apache.tomcat.core.Handler.service(Handler.java:286)
	at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
	at
org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:79
7)
	at org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)
	at
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpC
onnectionHandler.java:210)
	at
org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
	at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:498)
	at java.lang.Thread.run(Thread.java:484)

_bmgcatalogsamplefullplay.java

615            try {
616
_esql_query.prepared_statement.setInt(2,_esql_query.resultset.getInt("genreI
D"));
617
618
619
620            } catch (SQLException _esql_exception_N217e57) {
621              throw new RuntimeException("Error setting parameter on
statement: "+_esql_query.query);
622            }

----------------------------------------------------------------------------
----------------------------------------------------------------------------
----------------------------------------------

I thought that this might be a problem with using or not using the ancestor
attribute, but I've played around with it a little bit without success.

Any help I can get on this problem would be greatly appreciated.

Jim

----------------------------------------------------------------------------
----------------------------------------------------------------------------
----------------------------------------------
Code:

<esql:connection>
    <esql:driver>sun.jdbc.odbc.JdbcOdbcDriver</esql:driver>
    <esql:dburl>jdbc:odbc:LocalServer</esql:dburl>
    <esql:username>sa</esql:username>
    <esql:password>T0pneT</esql:password>
    <esql:execute-query>
    <esql:query>   <!-- ------------- FIRST QUERY ------------- -->
        select artistID from artist where artist_display_name =
'<xsl:value-of select="PRODUCT_DETAILS/@PRODUCT_ARTIST_DISPLAY_NAME"/>'
    </esql:query>
    <esql:results>
        <esql:row-results>
            <esql:connection>
                <esql:driver>sun.jdbc.odbc.JdbcOdbcDriver</esql:driver>
                <esql:dburl>jdbc:odbc:LocalServer</esql:dburl>
                <esql:username>sa</esql:username>
                <esql:password>T0pneT</esql:password>
                <esql:execute-query>
                    <esql:query>    <!-- ------------- SECOND
QUERY ------------- -->
                        select genreID from genre where genrename =
<esql:parameter type="string"><xsp:expr>new String("<xsl:value-of
select="PRODUCT_DETAILS/@GENRE_TYPE"/>")</xsp:expr></esql:parameter>
                    </esql:query>
                    <esql:results>
                        <esql:row-results>
                            <!-- ------------- MESSAGES FOR
DEBUGGING ------------- -->
                            <message>insert into digital_music (productID,
artistID) values (<esql:parameter type="string"><xsp:expr>new
String("<xsl:value-of
select="PRODUCT_DETAILS/@PRODUCT_ID"/>")</xsp:expr></esql:parameter>,<esql:p
arameter type="int"><esql:get-int ancestor="1"
column="artistID"/></esql:parameter>)
                            </message>
                            <message>insert into digital_music (productID,
genreID) values (<esql:parameter type="string"><xsp:expr>new
String("<xsl:value-of
select="PRODUCT_DETAILS/@PRODUCT_ID"/>")</xsp:expr></esql:parameter>,<esql:p
arameter type="int"><esql:get-int column="genreID"/></esql:parameter>)
                            </message>
                            <esql:connection>

<esql:driver>sun.jdbc.odbc.JdbcOdbcDriver</esql:driver>

<esql:dburl>jdbc:odbc:LocalServer</esql:dburl>
                                <esql:username>sa</esql:username>
                                <esql:password>T0pneT</esql:password>
                                <esql:execute-query>
                                    <esql:query>    <!-- ------------- THIRD
QUERY ------------- -->
                                            insert into digital_music
(productID, genreID) values (<esql:parameter type="string"><xsp:expr>new
String("<xsl:value-of
select="PRODUCT_DETAILS/@PRODUCT_ID"/>")</xsp:expr></esql:parameter>,<esql:p
arameter type="int"><esql:get-int column="genreID"/></esql:parameter>)
                                    </esql:query>
                                    <esql:error-results>
                                        <message>Insert product to
digital_music attempt: <esql:get-message/></message>

<stacktrace><esql:get-stacktrace/></stacktrace>
                                    </esql:error-results>
                                </esql:execute-query>
                            </esql:connection>
                        </esql:row-results>
                    </esql:results>
                </esql:execute-query>
            </esql:connection>
        </esql:row-results>
    </esql:results>




RE: Problem using esql:get-int

Posted by Jim Mallmann <ji...@topicalnetworks.com>.
nevermind...it was an ancestor problem
  -----Original Message-----
  From: Jim Mallmann [mailto:jim.mallmann@topicalnetworks.com]
  Sent: Friday, February 02, 2001 2:35 PM
  To: Cocoon Users
  Subject: Problem using esql:get-int


  Hi, all.

  I'm having a inserting some info into my DB, and I appear to have it
narrowed down to my use of the <esql:get-int> tag.  The problem is not
necessarily the tag itself, but it might have something to do with how I'm
using it and how it's nested.

  I have three queries marked in the code at the bottom of this message.
The first retrieves an artistID, and the second retrieves a genreID.  The
third query needs to use both of these numbers for its own insertion.

  In the section I have labeled "Messages for Debugging" I have two messages
that I bring to the screen for debugging my problem.  These messages print
the queries as they should appear.

  But when I use the same syntax in the third query I get the following
error for the first query above,
  --------------------------------------------------------------------------
----------------------------------------------------------------------------
------------------------------------------------
  SYNTAX:

  insert into digital_music (productID, genreID) values (<esql:parameter
type="string"><xsp:expr>new String("<xsl:value-of
select="PRODUCT_DETAILS/@PRODUCT_ID"/>")</xsp:expr></esql:parameter>,<esql:p
arameter type="int"><esql:get-int column="genreID"/></esql:parameter>)

  ERROR:
java.lang.RuntimeException: Error setting parameter on statement:
insert into digital_music (productID, genreID) values (?,?)
	at
_C_._Java._jakarta_tomcat_3_2_1._webapps._cocoon._tn._iontunes._bmgcatalogsa
mplefullplay.populateDocument(_bmgcatalogsamplefullplay.java:621)
	at org.apache.cocoon.processor.xsp.XSPPage.getDocument(XSPPage.java:97)
	at
org.apache.cocoon.processor.xsp.XSPProcessor.process(XSPProcessor.java:524)
	at org.apache.cocoon.Engine.handle(Engine.java:383)
	at org.apache.cocoon.Cocoon.service(Cocoon.java:183)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:865)
	at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:404)
	at org.apache.tomcat.core.Handler.service(Handler.java:286)
	at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
	at
org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:79
7)
	at org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)
	at
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpC
onnectionHandler.java:210)
	at
org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
	at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:498)
	at java.lang.Thread.run(Thread.java:484)
  _bmgcatalogsamplefullplay.java

  615            try {
  616
_esql_query.prepared_statement.setInt(2,((EsqlQuery)_esql_queries.elementAt(
_esql_queries.size()-1)).resultset.getInt("artistID"));
  617
  618
  619
  620            } catch (SQLException _esql_exception_N11340) {
  621              throw new RuntimeException("Error setting parameter on
statement: "+_esql_query.query);
  622            }

  --------------------------------------------------------------------------
----------------------------------------------------------------------------
------------------------------------------------

  and the following error for the second query

  --------------------------------------------------------------------------
----------------------------------------------------------------------------
------------------------------------------------
  SYNTAX:

  insert into digital_music (productID, genreID) values (<esql:parameter
type="string"><xsp:expr>new String("<xsl:value-of
select="PRODUCT_DETAILS/@PRODUCT_ID"/>")</xsp:expr></esql:parameter>,<esql:p
arameter type="int"><esql:get-int column="genreID"/></esql:parameter>)

  Error:
java.lang.NullPointerException
	at
_C_._Java._jakarta_tomcat_3_2_1._webapps._cocoon._tn._iontunes._bmgcatalogsa
mplefullplay.populateDocument(_bmgcatalogsamplefullplay.java:616)
	at org.apache.cocoon.processor.xsp.XSPPage.getDocument(XSPPage.java:97)
	at
org.apache.cocoon.processor.xsp.XSPProcessor.process(XSPProcessor.java:524)
	at org.apache.cocoon.Engine.handle(Engine.java:383)
	at org.apache.cocoon.Cocoon.service(Cocoon.java:183)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:865)
	at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:404)
	at org.apache.tomcat.core.Handler.service(Handler.java:286)
	at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
	at
org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:79
7)
	at org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)
	at
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpC
onnectionHandler.java:210)
	at
org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
	at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:498)
	at java.lang.Thread.run(Thread.java:484)

  _bmgcatalogsamplefullplay.java

  615            try {
  616
_esql_query.prepared_statement.setInt(2,_esql_query.resultset.getInt("genreI
D"));
  617
  618
  619
  620            } catch (SQLException _esql_exception_N217e57) {
  621              throw new RuntimeException("Error setting parameter on
statement: "+_esql_query.query);
  622            }

  --------------------------------------------------------------------------
----------------------------------------------------------------------------
------------------------------------------------

  I thought that this might be a problem with using or not using the
ancestor attribute, but I've played around with it a little bit without
success.

  Any help I can get on this problem would be greatly appreciated.

  Jim

  --------------------------------------------------------------------------
----------------------------------------------------------------------------
------------------------------------------------
  Code:

  <esql:connection>
      <esql:driver>sun.jdbc.odbc.JdbcOdbcDriver</esql:driver>
      <esql:dburl>jdbc:odbc:LocalServer</esql:dburl>
      <esql:username>sa</esql:username>
      <esql:password>T0pneT</esql:password>
      <esql:execute-query>
      <esql:query>   <!-- ------------- FIRST QUERY ------------- -->
          select artistID from artist where artist_display_name =
'<xsl:value-of select="PRODUCT_DETAILS/@PRODUCT_ARTIST_DISPLAY_NAME"/>'
      </esql:query>
      <esql:results>
          <esql:row-results>
              <esql:connection>
                  <esql:driver>sun.jdbc.odbc.JdbcOdbcDriver</esql:driver>
                  <esql:dburl>jdbc:odbc:LocalServer</esql:dburl>
                  <esql:username>sa</esql:username>
                  <esql:password>T0pneT</esql:password>
                  <esql:execute-query>
                      <esql:query>    <!-- ------------- SECOND
QUERY ------------- -->
                          select genreID from genre where genrename =
<esql:parameter type="string"><xsp:expr>new String("<xsl:value-of
select="PRODUCT_DETAILS/@GENRE_TYPE"/>")</xsp:expr></esql:parameter>
                      </esql:query>
                      <esql:results>
                          <esql:row-results>
                              <!-- ------------- MESSAGES FOR
DEBUGGING ------------- -->
                              <message>insert into digital_music (productID,
artistID) values (<esql:parameter type="string"><xsp:expr>new
String("<xsl:value-of
select="PRODUCT_DETAILS/@PRODUCT_ID"/>")</xsp:expr></esql:parameter>,<esql:p
arameter type="int"><esql:get-int ancestor="1"
column="artistID"/></esql:parameter>)
                              </message>
                              <message>insert into digital_music (productID,
genreID) values (<esql:parameter type="string"><xsp:expr>new
String("<xsl:value-of
select="PRODUCT_DETAILS/@PRODUCT_ID"/>")</xsp:expr></esql:parameter>,<esql:p
arameter type="int"><esql:get-int column="genreID"/></esql:parameter>)
                              </message>
                              <esql:connection>

<esql:driver>sun.jdbc.odbc.JdbcOdbcDriver</esql:driver>

<esql:dburl>jdbc:odbc:LocalServer</esql:dburl>
                                  <esql:username>sa</esql:username>
                                  <esql:password>T0pneT</esql:password>
                                  <esql:execute-query>
                                      <esql:query>    <!-- -------------
THIRD QUERY ------------- -->
                                              insert into digital_music
(productID, genreID) values (<esql:parameter type="string"><xsp:expr>new
String("<xsl:value-of
select="PRODUCT_DETAILS/@PRODUCT_ID"/>")</xsp:expr></esql:parameter>,<esql:p
arameter type="int"><esql:get-int column="genreID"/></esql:parameter>)
                                      </esql:query>
                                      <esql:error-results>
                                          <message>Insert product to
digital_music attempt: <esql:get-message/></message>

<stacktrace><esql:get-stacktrace/></stacktrace>
                                      </esql:error-results>
                                  </esql:execute-query>
                              </esql:connection>
                          </esql:row-results>
                      </esql:results>
                  </esql:execute-query>
              </esql:connection>
          </esql:row-results>
      </esql:results>