> An example of the standard usage pattern for JDBC can be seen in: > com.vividsolutions.jump.datastore.jdbc.ValueConverterFactory. > Regardless of whether you use ResultSet's getObject() or something like > getInt(), eventually you are going to need an object representation of > the data in order to work with it. BasicFeature.SetAttribute requires > an Object. So if you did something like: new > Integer(rs.getInt(columnIndex)) on a null column , the JavaDoc for > ResultSet says you'll get a zero int wrapped in an Integer. Zero is not equal to NULL by any means!!! The assumption that a zero can be used in place of a NULL is quite bad, IMHO. Is exactly the kind of stuff that makes legacy formats like shapes, mapinfo, etc. vastly inferior in respect to RDBMSs.
> > I appreciate all of the clever solutions, but I will remain convinced > that BasicFeature can detect modification without any need for explicit > client methods to set it, until someone shows me proof that it can not. If you spend a moment to look at the code I attached in my previous message you'll see that it works in both cases. Non mod-aware client will get the automatic assumption that each and every attributes has to be set at least once before init can be considered ended. While mod-aware clients can, if they want, set the init status explicitely. > > regards, > Larry Bye Paolo > > > On Thu, Apr 30, 2009 at 6:24 AM, Paolo Rizzi <g...@oicom.com > <mailto:g...@oicom.com>> wrote: > > The previous sample code I posted was foolish, I'm sorry!!! > > Find attached a better version that uses a single Object reference > to track both initialization and modify state. > > During initialization this Object references a byte[] where each > element tracks the init state of the corresponding attribute. > > Init ends when all attributes has been set at least once or when the > client code calls a provided method. > > After init has ended the byte[] is discarded and the Object > references the static instance of Boolean.FALSE (so there's no > memory wasted beyound the single Object reference itself). > > After at least one attributes is set, the Object references the > static instance Boolean.TRUE. > > Client code can decide to force init end with a non-modified state > or even an already-modified state, if it likes to. > > The code does not check if the new value set for an attribute is > equal or not to the value already present. This is because a == > check would not be good because two different Integer instances both > containing the same value are to be considered equal. > So the equals() method should be used, but that is not garanteed to > work with all class types, so I think it may be better to skip the > check altogether and consider an attribute modified in any case. > > Hope this is helpful!!! :-) > > Bye > Paolo > > > > public class BasicFeature { > private Object[] attributes; > private Object mods; > > public void forceInitEnded(boolean modified) { > //force init end and specified modify state > mods = modified ? Boolean.TRUE : Boolean.FALSE; > } > > public boolean isInitEnded() { > if( mods instanceof Boolean ) //init ended > return true; > > if( mods == null ) { //if > still null > mods = new byte[attributes.length]; //create it > Arrays.fill((byte[])mods,(byte)0); //fill with > zeros > > return false; //init not even started > } > > for(int i=0;i<((byte[])mods).length;i++) > if( ((byte[])mods)[i] == 0 ) //if any attribute never > flagged > return false; //init not ended > > forceInitEnded(false); //init ended, no mods done > > return true; //init ended > } > > public void setAttribute(Object[] newAttributes) { > //call setAttribute() for each element > } > > public void setAttribute(int attributeIndex, Object > newAttribute) { > if( isInitEnded() ) //if init ended > mods = Boolean.TRUE; //feature modified > else > > //if init not ended > ((byte[])mods)[attributeIndex] = 1; //flag the > attributes mod > > attributes[attributeIndex] = newAttribute; > } > > public boolean isModified() { > return isInitEnded() ? ((Boolean)mods).booleanValue() : false; > } > } > > > ------------------------------------------------------------------------------ > Register Now & Save for Velocity, the Web Performance & Operations > Conference from O'Reilly Media. Velocity features a full day of > expert-led, hands-on workshops and two days of sessions from industry > leaders in dedicated Performance & Operations tracks. Use code vel09scf > and Save an extra 15% before 5/3. http://p.sf.net/sfu/velocityconf > _______________________________________________ > Jump-pilot-devel mailing list > Jump-pilot-devel@lists.sourceforge.net > <mailto:Jump-pilot-devel@lists.sourceforge.net> > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel > > > > > -- > http://amusingprogrammer.blogspot.com/ > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------------ > Register Now & Save for Velocity, the Web Performance & Operations > Conference from O'Reilly Media. Velocity features a full day of > expert-led, hands-on workshops and two days of sessions from industry > leaders in dedicated Performance & Operations tracks. Use code vel09scf > and Save an extra 15% before 5/3. http://p.sf.net/sfu/velocityconf > > > ------------------------------------------------------------------------ > > _______________________________________________ > Jump-pilot-devel mailing list > Jump-pilot-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel ------------------------------------------------------------------------------ Register Now & Save for Velocity, the Web Performance & Operations Conference from O'Reilly Media. Velocity features a full day of expert-led, hands-on workshops and two days of sessions from industry leaders in dedicated Performance & Operations tracks. Use code vel09scf and Save an extra 15% before 5/3. http://p.sf.net/sfu/velocityconf _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel