[CONJ-299] PreparedStatement.setObject(Type.BIT, "1") should register as true. Created: 2016-05-24  Updated: 2016-08-23  Resolved: 2016-08-23

Status: Closed
Project: MariaDB Connector/J
Component/s: Other
Affects Version/s: 1.4.5
Fix Version/s: 1.5.2

Type: Bug Priority: Major
Reporter: Hidekatsu Izuno Assignee: Diego Dupin
Resolution: Fixed Votes: 0
Labels: None
Environment:

Java8



 Description   

I called PreparedStatement.setObject(Type.BIT, "1"). I expected this value registered true.
But it was actually false .

I find the code at github. I found the next code in AbstractMariaDbPrepareStatement.java:781

public void setObject(final int parameterIndex, final Object obj, final int targetSqlType) throws SQLException {
...
        } else if (obj instanceof String) {
...
                    case Types.BIT:
                        setBoolean(parameterIndex, Boolean.valueOf(str));
                        break;

Types.BIT must be handled as a numeric type than a boolean type but the compatibility is important. So I think the next code is more appropriate.

                    case Types.BOOLEAN:
                    case Types.BIT:
                            setBoolean(parameterIndex, Boolean.valueOf("true".equals(str) || !"0".equals(str)));
                        break;

And I tested on MySQL Connector/J. It handled Types.BIT as a numeric type.



 Comments   
Comment by Diego Dupin [ 2016-08-23 ]

fixed with commit : https://github.com/MariaDB/mariadb-connector-j/commit/18fac0608b6b100b0811729b146194743b1b7a53

Generated at Thu Feb 08 03:14:39 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.