Zkuste nejnovější verzi JDBC driveru. Řešil jsem něco podobného a starší JDBC s MySQL5 mě hlásila poměrně kryptickou chybu, která byla úplně mimo mísu. Třeba to bude něco podobného.
Petr Zajíc From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Lukas Adamek | Fayn Telecommunications s.r.o. Sent: Saturday, April 28, 2007 6:19 PM To: [email protected] Subject: Problem u MySQL5 a PrepareStatement Ahoj Narazil jsem na takovyto problem: Na MySQL 5 mam tuto strukturu tabulek: CREATE TABLE tabulka1 ( id INT UNSIGNED UNIQUE NOT NULL AUTO_INCREMENT, typ VARCHAR(30) NOT NULL, id_tabulka2, PRIMARY KEY (id), FOREIGN KEY (id_tabulka2) REFERENCES id_tabulka2 (id_tabulka2) ) TYPE=INNODB; CREATE TABLE tabulka2 ( id INT UNSIGNED UNIQUE NOT NULL AUTO_INCREMENT, popis VARCHAR(30) NOT NULL, PRIMARY KEY (id) ) TYPE=INNODB; Pomoci java aplikace spolupracujici s MySQL pomoci JDBC volam tento prikaz, ktery resi nasledujici: Do tabulka1 vkladam zaznam. Cizi klic zjistuji takto: najdi id podle zadaneho popisu, a pokud takovy popis neexistuje, vrat nejmensi id v tabulce. String prikaz = "INSERT INTO tabulka1 (typ, cas, id_tabulka2) " + "SELECT ?, NOW(), id_tabulka1 FROM tabulka2 WHERE jmeno = ? " + "UNION " + "SELECT ?, NOW(), MIN(id_tabulka1) FROM tabulka2 LIMIT 1"; preparedStatement = connection.prepareStatement(prikaz, Statement.RETURN_GENERATED_KEYS); preparedStatement.setString(1, "neco"); preparedStatement.setString(2, "popis"); preparedStatement.setString(3, "neco"); preparedStatement.executeUpdate(); Když tento prikaz volam na DB jinak nez pomoci JDBC, tak vse funguje bez problemu. Ale kdyz prikaz volam přes JDBC, tak dojde k této Exception: Exception: java.sql.SQLException: Data truncated for column 'typ' at row 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573) at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement .java:1160) at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStateme nt.java:685) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1400) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1314) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1299) Nenapada me, cim by to mohlo byt.
