JDBC, MySQL: introduciendo bits en una columna BIT (M! = 1)
-
05-07-2019 - |
Pregunta
Soy nuevo en el uso de JDBC + MySQL.
Tengo varios valores 1/0 que quiero pegar en una base de datos con un PreparedStatement. La columna de destino es un BIT (M! = 1). No tengo claro cuál de los métodos setXXX usar. Puedo encontrar las referencias de los datos que se publican con la misma facilidad, pero el modo en que se introducen me está eludiendo.
Los valores viven efectivamente como una colección ordenada de booleanos en los objetos utilizados por la aplicación. Además, ocasionalmente importaré datos de archivos de texto plano con caracteres 1/0.
Solución
Para establecer una columna BIT (M)
en MySQL
Para M==1
setBoolean(int parameterIndex, boolean x)
Desde el javadoc
Establece el parámetro designado a dado un valor booleano de Java. El conductor convierte esto a un valor BIT de SQL cuando lo envía a la base de datos.
Para M > 1
El soporte para BIT (M)
donde M! = 1
es problemático con JDBC ya que BIT (M)
solo se requiere con " ; completo " SQL-92 y solo unas pocas bases de datos lo admiten.
Marque aquí Mapeo de SQL y tipos de Java : 8.3.3 BIT
Lo siguiente me funciona con MySQL (al menos con MySQL 5.0.45, Java 1.6 y MySQL Connector / J 5.0.8)
...
PreparedStatement insert = con.prepareStatement(
"INSERT INTO bittable (bitcolumn) values (b?)"
);
insert.setString(1,"111000");
...
Esto utiliza la sintaxis especial b'110101010 'de MySQL para establecer el valor de las columnas BIT.
Otros consejos
Puede usar get / setObject con una matriz de bytes (byte []). Se empaquetan 8 bits en cada byte con el bit menos significativo en el último elemento de la matriz.