If running two queries is not out of the question for some principal
reasons, I'd suggest the following:
Run a query with LIMIT 1, 1. That query will return results ONLY if
there are two or more rows that match.
Then run your second query both inside the
<esql:no-results></esql:no-results> and inside
<esql:results></esql:results>.
I would suggest using this only if you want to avoid coding Java by
hand. Otherwise, using a List would be recommended.
Here's an ad hoc example. As usual, there's more than one way to
implement anything.
<xsp:logic>
List rows = new ArrayList();
</xsp:logic>
<xsp:execute-query>
<xsp:query>SELECT id, name FROM names WHERE ..snip..</xsp:query>
<xsp:results>
<xsp:row-results>
<xsp:logic>
rows.add(new Object[] {new Long(<esql:get-int name="id"/>),
<esql:get-string name="name"/>});
</xsp:logic>
</xsp:row-results>
</xsp:results>
</xsp:execute-query>
<xsp:logic>
switch(rows.size()) {
case 0: {
// handle empty results
}; break;
case 1: {
// handle single row
Object[] row = (Object[])rows.get(0);
int id = ((Integer)row[0]).intValue();
String name = (String)row[1];
<xsp:content>
<single-row>
<xsp:attribute name="id"><xsp:expr>id</xsp:expr></xsp:attribute>
<xsp:attribute
name="name"><xsp:expr>name</xsp:expr></xsp:attribute>
</single-row>
</xsp:content>
}; break;
default: {
// handle multiple rows
Iterator iter = rows.iterator();
<multi-rows>
while(iter.hasNext()) {
Object[] row = (Object[])iter.next();
int id = ((Integer)row[0]).intValue();
String name = (String)row[1];
<row>
<xsp:attribute
name="id"><xsp:expr>id</xsp:expr></xsp:attribute>
<xsp:attribute
name="name"><xsp:expr>name</xsp:expr></xsp:attribute>
</single>
}
</multi-rows>
};
</xsp:logic>
<displaimer>This code was never compiled or run</displaimer>
--
Ilya
Christian Haul wrote:
>On 28.Aug.2002 -- 10:48 AM, Tuomo Lesonen wrote:
>
>>
>>On Wed, 28 Aug 2002, Christian Haul wrote:
>>
>>>On 28.Aug.2002 -- 10:07 AM, Tuomo Lesonen wrote:
>>>
>>>>Hi,
>>>>
>>>>How can I count the rows in my resultset? I'm using esql, but
>>>><esql:row-count/> doesn't seem to be implemented yet. SQL COUNT(*) doesn't
>>>>work in this case either. Can I do this with XSP?
>>>>
>>>Yes, have a new var declared before the execute-query and ++ it in
>>>your row-results
>>>
>>Thank you Chris, but in this case I need to know the number of rows
>>_before_ I do <esql:row-results>, in order to produce the right data.
>>
>
>Tuomo, there is nothing in the JDBC API that provides this data that
>I'm aware of. There are certainly vendor specific procedures to get
>this information.
>
>However, most of the time the output needs to be limited, in order to
>page through the data. This is supported by esql.
>
> Chris.
>
---------------------------------------------------------------------
Please check that your question has not already been answered in the
FAQ before posting. <http://xml.apache.org/cocoon/faq/index.html>
To unsubscribe, e-mail: <[EMAIL PROTECTED]>
For additional commands, e-mail: <[EMAIL PROTECTED]>