JDBC, MySQL: ottenere bit in una colonna BIT (M! = 1)
-
05-07-2019 - |
Domanda
Sono nuovo ad usare JDBC + MySQL.
Ho diversi valori 1/0 che voglio inserire in un database con un PreparedStatement. La colonna di destinazione è un BIT (M! = 1). Non sono chiaro su quale dei metodi setXXX usare. Riesco a trovare i riferimenti per quali dati vengono emessi abbastanza facilmente, ma il modo in cui vengono inseriti mi sfugge.
I valori vivono effettivamente come una raccolta ordinata di booleani negli oggetti utilizzati dall'applicazione. Inoltre, occasionalmente importerò i dati da file di testo semplici con 1/0 caratteri.
Soluzione
Per impostare una colonna BIT (M)
in MySQL
Per M==1
setBoolean(int parameterIndex, boolean x)
Dal javadoc
Imposta il parametro designato su dato valore booleano Java. L'autista converte questo in un valore BIT SQL quando lo invia al database.
Per M > 1
Il supporto per BIT (M)
dove M! = 1
è problematico con JDBC poiché BIT (M)
è richiesto solo con " ; completo " SQL-92 e solo pochi DB lo supportano.
Controlla qui Mappatura di tipi SQL e Java : 8.3.3 BIT
Quanto segue funziona per me con MySQL (almeno con MySQL 5.0.45, Java 1.6 e MySQL Connector / J 5.0.8)
...
PreparedStatement insert = con.prepareStatement(
"INSERT INTO bittable (bitcolumn) values (b?)"
);
insert.setString(1,"111000");
...
Utilizza la speciale sintassi b'110101010 'di MySQL per impostare il valore per le colonne BIT.
Altri suggerimenti
È possibile utilizzare get / setObject con un array di byte (byte []). 8 bit sono impacchettati in ogni byte con il bit meno significativo nell'ultimo elemento dell'array.