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