Re: Best way to do this?
 
harryajh wrote:
 ResultSet rs = ps.executeQuery();
 while (true)
 {
   ret = new myBean();
Class names should start with an upper-case letter.
   String propName = rs.getString(2);
   if (propName.equalsIgnoreCase("licence_number"))
   {
     ret.setLicenceNo(rs.getString(3));
   }
   else if (propName.equalsIgnoreCase("return_requirement_id"))
   {
     ret.setReturnReqId(rs.getString(3));
   }
 }
It looks like you might need to revise your database query or schema -
the same column of the result should not mean different things.
But since it does ...
Alan Gutierrez wrote:
I read the OPs uncompilable code as being a loop over a result set, even
though it has that nonsense while(true) which really should read while
(rs.next()), but then maybe the OP really wants an infinite loop over a
single row of a result set. In which case, it doesn't matter how much
faster it runs.
One way would be to have an enum keyed to the different possible
values from column 2 with a service method to set the correct value
from column 3, something similar to this uncompiled (let alone tested)
idea:
public enum ColumnSetter
{
  licence_number
  {
    @Override
    public void setColumn3( MyBean ret, String value )
    {
      ret.setLicenceNo( value );
    }
  },
  return_requirement_id
  {
    @Override
    public void setColumn3( MyBean ret, String value )
    {
      ret.setReturnReqId( value );
    }
  };
  abstract public void setColumn3( MyBean ret, String value );
}
Then the client code is something along the uncompiled, untested lines
of:
  ...
 PreparedStatement ps = Connection.prepareStatement( ... );
 try
 {
  // set up query parms
  MyBean ret = new MyBean();
  for( ResultSet rs = ps.executeQuery(); rs.next(); )
  {
    ColumnSetter cs = ColumnSetter.valueOf( rs.getString( 2 ));
    cs.setColumn3( ret, rs.getString( 3 ));     // risks NPE
  }
  return ret;
 }
 finally
 {
  ps.close();
 }
You can create a replacement method in ColumnSetter for valueOf() that
is case-insensitive.  I usually define an instance override
'toString()' and static 'fromString()' for enums.
(As a riff on "RAII" I call the above try...finally idiom variously
"RRIG" or "RRIF" or "RRID", respectively "Resource Release is
Guaranteed", "Resource Release in Finally" or "Resource Release in
Deallocation".  Your votes welcomed.)
--
Lew