2.4.1. fejezet, Szerver hibalehetőségek és megoldások

A program UTF-8 karakterkészletet alkalmaz a kommunikációra, és az adatbázis szintén UTF-8 formában tárolja az adatokat.

Az alábbi hiba MySQL 5.0.45 szerveren ConnectorJ 5.1.5 verzióval jelentkezett:

if ((metaData != null) && (resultSet != null) && (resultSet.getRow() > 0) 
    && (!resultSet.isAfterLast()) && (!resultSet.isBeforeFirst())) {
	Object[] record = new Object[metaData.getColumnCount()];
	for (int j = 1; j <= metaData.getColumnCount(); j++)
		try {
			if (metaData.getColumnType(j) == java.sql.Types.TIMESTAMP)
				record[j - 1] = resultSet.getString(j);// TIMESTAMP
			else
				record[j - 1] = resultSet.getObject(j);
			// MYSQL BUG ? Első sort átalakítja, aztán minden sorra
			// Cannot convert value '2008-02-29 00:00:00' from column 9
			// to TIMESTAMP.
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	result = new UnifiedRecordType(record, recordDescriptor);
}

Az SQL tábla szerkezete az alábbi:

CREATE TABLE demand_arlista(
  kategoria_id INT(10) UNSIGNED NOT NULL,
  kod1 VARCHAR(16) NOT NULL,
  kod2 VARCHAR(16) NOT NULL,
  megnevezes text CHARACTER SET utf8 COLLATE utf8_hungarian_ci,
  allapot CHAR NOT NULL,
  partner_netto INTEGER NOT NULL,
  fogyaszto_netto INTEGER NOT NULL,
  fogyaszto_brutto INTEGER NOT NULL,
  createdDate DATETIME NOT NULL,
  modifiedDate DATETIME,
  validfrom DATETIME NOT NULL,
  creatorUserId INT(10) UNSIGNED NOT NULL,
  lastModifierUserId INT(10) UNSIGNED,
  PRIMARY KEY (kategoria_id,kod2),
  INDEX `creatoruserid_idx` (creatorUserId),
  INDEX `lastmodifieruserid_idx` (lastModifierUserId),
  INDEX `kod1_idx` (kod1)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

A kiadott select parancs pedig:

SELECT kategoria_id, kod1, kod2, megnevezes, allapot, partner_netto, fogyaszto_netto, fogyaszto_brutto, validfrom 
 FROM demand_arlista 
WHERE kategoria_id = ?

ahol a where feltételben a paraméter egy egész szám.

Megoldás: töltsd le az 5.1.6-os vagy újabb ConnectorJ csomagot, amelyben javították a hibát.