![](/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.