Hi Andrew,

when you call DBReader.open() the cursor is positioned before the first record 
not on the first record.
The open method assumes that you want to retrieve a list of records hence you 
should always iterate through the reader like this:
        reader.open(cmd, conn);
        while (reader.moveNext())
        {       // Init updateable record
                reader.initRecord(EMP, record);
        }
This will work for 0 to n records.

However, if you know for sure that the result is a single record or none, you 
can instead use the method getRecordData(DBCommandExpr cmd, Connection conn) on 
DBReader. This method opens the reader and moves to the first record. If no 
record was found this function returns false.

About your question whether to subclass DBRecord or use beans:
Basically DBRecord objects are something like dynamic beans in a way that the 
properties don't have to be declared at compile-time and that instead of an 
individual getter / setter for each property you have several generic ones that 
require a field reference. 
Personally I prefer subclassing a DBRecord and use it to create other type safe 
methods that work on these derived types. This gives you also the opportunity 
to override methods like getValue(), setValue(), onFieldChanged(), 
isFieldReadOnly() etc.
Using beans IMO only makes sense if you either need to work with other 
frameworks that require beans or if you need to serialize your beans.

Regards
Rainer


[email protected] wrote:
> re: Detecting failure to retrieve data
> 
> Hi,
> 
> Another question - hopefully simpler.  How do I detect when a query
> has failed to retrieve data?  In particular I have code like:
> 
>     cmd = schema.createCommand()
>     cmd.select(schema.CANONICALS.getColumns())
>     cmd.where(schema.CANONICALS.VALUE.is(value))
>     row = new DBRecord(schema.CANONICALS)
>     reader = new DBReader()
>     reader.open(cmd, cnxn)
>     ok = Schema.CANONICALS.initRecord(row, reader)
> 
> where ok is true even when there are no data (value does not exist in
> the VALUE column of the CANONICALS table and "row" contains nulls)
> (and similarly if I use the initRecord method on the reader).
> 
> Should ok be false above?  It appears to be true, but I must confess
> that I am also using Scala (I have modified it to look like Java
> above, I hope) and it is possible I am doing something stupid with
> Scala...
> 
> Finally, I was originally thinking that I should subclass DBRecord and
> so map rows to objects, but now I am thinking that it would be better
> to use beans.  Is there any reason to prefer one approach rather than
> another, or are they for different cases somehow?
> 
> Thanks,
> Andrew

Reply via email to