Pouzival jsem verzi 5.0.3 a presel na 5.0.5

 

Tuhle chybu jsem resil poslednich 5 hodin. To, ze za to muze zastarala verze
JDBC by me ani ve snu nenapadla.

 

Takze mockrat diky za vyreseni problemu. Usetril jste mi spoustu nervu.

 

Lukas Adamek

 

  _____  

From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
Behalf Of Petr Zajíc
Sent: Saturday, April 28, 2007 7:03 PM
To: 'Java'
Subject: RE: Problem u MySQL5 a PrepareStatement

 

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.

 

 

 

 

 

Odpovedet emailem