![](/img/trans.png)
[英]Inserting unsigned 64-bit number into BigInt MySQL column using Java and JDBC
[英]mysql jdbc: inserting true value to a bit column becomes false
mysql jdbc:向位列插入true值将为false,但是命令行客户端可以正常工作。 例如,
雇员
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id | varchar(8) | NO | PRI | NULL | |
| name | varchar(20) | NO | | NULL | |
| full_time | bit(1) | NO | | NULL | |
+------------+-------------+------+-----+---------+-------+
命令行:
mysql> insert into Employee (id,name,full_time) values ('100', 'John', true);
mysql> select * from Employee;
+--------+------+-----------+
| id | name | full_time |
+--------+------+-----------+
| 100 | John | (symbol) |
+--------+------+-----------+
mysql> select count(*) from Employee where full_time=true;
+----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (0.00 sec)
作品。
但是JDBC
String sql = "Insert into Employee (id,name,full_time) values (?, ?, ?)";
PreparedStatement s = connection.prepareStatement(sql);
s.setObject(1, "100");
s.setObject(2, "John");
s.setObject(3, true);
s.executeUpdate();
该行已插入,但是full_time列为false。
mysql> select * from Employee;
+--------+------+-----------+
| id | name | full_time |
+--------+------+-----------+
| 100 | John | |
+--------+------+-----------+
mysql> select count(*) from Employee where full_time=true;
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (0.00 sec)
可能是什么问题?
使用setBoolean
将true / false值分配给full_time
列:
String sql = "Insert into Employee (id, name, full_time) values (?, ?, ?)";
PreparedStatement s = connection.prepareStatement(sql);
s.setString(1, "100");
s.setString(2, "John");
s.setBoolean(3, true);
s.executeUpdate();
始终对要插入/更新的类型使用适当的设置器。 我什至不知道s.setObject(1, '100')
编译方式,但是Java中的字符串文字使用双引号,我们应该使用setString
在语句中分配它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.