preparedstatementにハマッた!
create table A ( id char(32) );
こんなテーブルがあったとして、
insert into A (id) values('aaa'); insert into A (id) values('bbb'); insert into A (id) values('ccc');
という3件のレコードが存在するとき、
PreparedStatement pstmt = connection.prepareStatement("delete from A where id = ?"); pstmt.setString(1, "aaa"); int count = pstmt.executeUpdate(); System.out.println(count);
こんな感じでdelete文を発行しても0と表示されてしまい、消えない。。
ちなみにSQLの部分を
PreparedStatement pstmt = connection.prepareStatement("delete from A where id = 'aaa'");
こうすると消える。うーむ。。
と悩んでたんですが、結果はchar(32)が原因でした。
pstmt.setString(1, "aaa ");
こうすると消えました。うーん、ハマッた。普通はchar(32)のところに、その長さを満たしていないデータが入っている事は無いんだとは思うんですけどね。