JDBC, MySQL: getting bits into a BIT(M!=1) column

泄露秘密 提交于 2019-12-18 09:44:29

问题


I'm new to using JDBC + MySQL.

I have several 1/0 values which I want to stick into a database with a PreparedStatement. The destination column is a BIT(M!=1). I'm unclear on which of the setXXX methods to use. I can find the references for what data comes out as easily enough, but how it goes in is eluding me.

The values effectively live as an ordered collection of booleans in the objects used by the application. Also, I'll occasionally be importing data from flat text files with 1/0 characters.


回答1:


To set a BIT(M) column in MySQL

For M==1

setBoolean(int parameterIndex, boolean x)

From the javadoc

Sets the designated parameter to the given Java boolean value. The driver converts this to an SQL BIT value when it sends it to the database.


For M>1

The support for BIT(M) where M!=1 is problematic with JDBC as BIT(M) is only required with "full" SQL-92 and only few DBs support that.

Check here Mapping SQL and Java Types: 8.3.3 BIT

The following works for me with MySQL (at least with MySQL 5.0.45, Java 1.6 and MySQL Connector/J 5.0.8)

...
PreparedStatement insert = con.prepareStatement(
    "INSERT INTO bittable (bitcolumn) values (b?)"
);
insert.setString(1,"111000");
...

This uses the special b'110101010' syntax of MySQL to set the value for BIT columns.




回答2:


You can use get/setObject with a byte array (byte[]). 8 bits are packed into each byte with the least significant bit being in the last array element.



来源:https://stackoverflow.com/questions/1601838/jdbc-mysql-getting-bits-into-a-bitm-1-column

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!