public static void load(SmartObject so)
        throws SmartObjectException {
  try {
    String query = "SELECT * FROM " + so.getTableName() + " WHERE ID = "
            + so.getID();
    Connection con = ds.getConnection();
    Statement s = con.createStatement();
    ResultSet rs = s.executeQuery(query);
    if (!rs.next())
      throw new SmartObjectException("No " + so.getClass()
               + " instance matching ID " + so.getID() + ".");
    PropertyDescriptor[] props 
      = Introspector.getBeanInfo(so.getClass()).getPropertyDescriptors();
    for (int i = 0; i < props.length; i++) {
      String prop = getPropertyName(props[i]);
      String methodName = getReadMethodName(props[i]);
      if (!methodName.startsWith("java.") && !
              methodName.startsWith("com.neo.smartobjects.SmartObject")) {
        Object[] args = new Object[1];
        args[0] = rs.getString(prop);
        props[i].getWriteMethod().invoke(so, args);

      }
    }
    closeAll(rs, s, con);
  }
  catch (Exception e) {
    throw new SmartObjectException("Exception loading " 
          + so.getClass() + " ID " + so.getID() + ".", e);
  }
}
