Java mysql jdbc:向位列插入真值将变为假

Java mysql jdbc:向位列插入真值将变为假,java,mysql,jdbc,Java,Mysql,Jdbc,mysql jdbc:向位列插入真值将变为假,但 命令行客户端工作正常。比如说, 雇员 +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | id | varchar(8)

mysql jdbc:向位列插入真值将变为假,但 命令行客户端工作正常。比如说,

雇员

+------------+-------------+------+-----+---------+-------+
| 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
将真/假值指定给
全职
列:

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();

始终为您尝试插入/更新的类型使用适当的setter。我不知道
s.setObject(1,'100')
是如何编译的,但是Java中的字符串文字使用双引号,我们应该使用
setString
在语句中分配它们。

您是否尝试过全职使用setBoolean方法?尝试过。不是working@Sunnyday我的建议应该对你有用,q.v。你确定你运行了我的代码并且没有其他问题吗?这是我自己的代码问题。setObject(…)也可以工作。谢谢。