private int saveNewRecord(SqlConn con) throws SQLException {

    // CREATE STMT TO INSERT NEW ENTRY INTO DB
    StringBuilder sb = new StringBuilder("insert into " + table + "(");
    for (Field field : fields.values()) {
      if (field.getValue() == null) continue;
      logger.info(
          "adding field to insert clause: " + field.name + " val: " + field.getValueAsString());
      sb.append(field.name + ",");
    }
    sb.deleteCharAt(sb.length() - 1);
    sb.append(") values (");

    for (Field field : fields.values()) {
      if (field.getValue() == null) continue;
      if (field.getType() == DAOutils.PASSWORD_TYPE) {
        sb.append("password(?),");
      } else {
        sb.append("?,");
      }
    }
    sb.deleteCharAt(sb.length() - 1);
    sb.append(")");

    // FILL STMT TO INSERT NEW ENTRY INTO DB
    int ind = 1;
    logger.info("save dao new " + sb.toString());
    con.prepareStatement(sb.toString());
    for (Field field : fields.values()) {

      if (field.getValue() == null) continue;
      switch (field.getType()) {
        case DAOutils.STRING_TYPE:
          con.setString(ind++, field.getValueAsString());
          break;
        case DAOutils.INT_TYPE:
          con.setInt(ind++, field.getValueAsInt());
          break;
        case DAOutils.TIMESTAMP_TYPE:
          con.setTimestamp(ind++, (Timestamp) field.getValue());
          break;
        case DAOutils.FLOAT_TYPE:
          con.setFloat(ind++, ((Float) field.getValue()).floatValue());
          break;
        case DAOutils.DATE_TYPE:
          con.setDate(ind++, (Date) field.getValue());
          break;
        case DAOutils.PASSWORD_TYPE:
          logger.info("password is " + field.getValueAsString());
          con.setString(ind++, field.getValueAsString());
          break;
        case DAOutils.BLOB_TYPE:
          con.setBlob(ind++, (Blob) field.getValue());
          break;
      }
    }

    // EXECUTE UPDATE
    con.exPrep();

    // IF NEW INSERTION OF AUTO-INCREMENT PRIMARY KEY, RETURN THE AUTO-ID
    if (fields.get(PK).getType() == DAOutils.INT_TYPE && fields.get(PK).getValue() == null) {
      int id = con.getLastSerial(table, PK);
      return id;
    }

    return -1;
  }