JDBC, MySQL: insérer des bits dans une colonne BIT (M! = 1)
-
05-07-2019 - |
Question
Je commence à utiliser JDBC + MySQL.
J'ai plusieurs valeurs 1/0 que je veux coller dans une base de données avec un PreparedStatement. La colonne de destination est un BIT (M! = 1). Je ne sais pas exactement quelle méthode setXXX utiliser. Je peux trouver les références des données qui sortent aussi facilement, mais la façon dont elles sont écrites m’échappe.
Les valeurs vivent comme une collection ordonnée de booléens dans les objets utilisés par l'application. De plus, je vais occasionnellement importer des données à partir de fichiers texte plats avec des caractères 1/0.
La solution
Pour définir une colonne BIT (M)
dans MySQL
Pour M == 1
setBoolean(int parameterIndex, boolean x)
À partir du javadoc
Définit le paramètre désigné sur le étant donné la valeur booléenne Java. Le conducteur convertit cela en une valeur SQL BIT lorsque il l'envoie à la base de données.
Pour M> 1
La prise en charge de BIT (M)
où M! = 1
pose problème avec JDBC, car BIT (M)
est uniquement requis avec " ; complet " SQL-92 et seulement quelques bases de données le supportent.
Vérifiez ici Mappage des types SQL et Java : 8.3.3 BIT
Ce qui suit fonctionne pour moi avec MySQL (au moins avec MySQL 5.0.45, Java 1.6 et MySQL Connector / J 5.0.8)
...
PreparedStatement insert = con.prepareStatement(
"INSERT INTO bittable (bitcolumn) values (b?)"
);
insert.setString(1,"111000");
...
Ceci utilise la syntaxe spéciale b'110101010 'de MySQL pour définir la valeur des colonnes BIT.
Autres conseils
Vous pouvez utiliser get / setObject avec un tableau d'octets (byte []). 8 octets sont condensés dans chaque octet, le bit le moins significatif se trouvant dans le dernier élément du tableau.