import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import com.mysql.jdbc.Driver; public final class BitColumnBug { private static final String JDBC_URL = "jdbc:mysql://HOST:PORT/DATABASE"; private static final String JDBC_USER = "USER"; private static final String JDBC_PASSWORD = "PASSWORD"; public static void main(final String[] args) throws SQLException, IOException { DriverManager.registerDriver(new Driver()); try (final Connection conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD)) { final String createTable = "CREATE TEMPORARY TABLE _tmpBitColumnBug(strField VARCHAR(1), bitField BIT)"; try (final Statement st = conn.createStatement()) { st.executeUpdate(createTable); } final String insert = "INSERT INTO _tmpBitColumnBug(strField, bitField) VALUES(NULL, 0)"; try (final Statement st = conn.createStatement()) { st.executeUpdate(insert); } final String select = "SELECT strField, bitField FROM _tmpBitColumnBug"; try (final Statement st = conn.createStatement()) { try (final ResultSet rs = st.executeQuery(select)) { rs.next(); String value1 = rs.getString(1); System.out.printf("Expected: value 1 = null, wasNull = true; actual: %s, wasNull = %s\n", value1, rs.wasNull()); int value2 = rs.getInt(2); System.out.printf("Expected: value 2 = 0, wasNull = false; actual: %s, wasNull = %s\n", value2, rs.wasNull()); } } } } }