2009-10-21 24 views
1

我是使用JDBC + MySQL的新手。JDBC,MySQL:將位變成BIT(M!= 1)列

我有幾個1/0值,我想用一個PreparedStatement將其粘貼到數據庫中。目標列是一個BIT(M!= 1)。我不清楚要使用哪個setXXX方法。我可以很容易地找到有關數據的參考資料,但它是如何進入我的。

這些值實際上是作爲應用程序使用的對象中布爾值的有序集合生存的。另外,我偶爾會從1/0字符的平面文本文件導入數據。

+0

在Java中存儲位數組作爲布爾值是一個巨大的內存浪費。布爾的具體大小取決於運行時環境的實現,通常位於1-4字節(!)之間。考慮使用java.util.BitSet – jitter 2009-10-21 22:07:15

+0

至於你的請求從下面。沒有明智的方式jdbc連接器可以理解一個布爾[]沒有轉換爲BIT(M)。你將不得不將數組轉換爲更合適的數組。如果將我的解決方案轉換爲字符串或轉換爲字節[]是您的選擇 – jitter 2009-10-21 22:09:42

+0

,它實際上並不是一組布爾值。我有一個有區別的二進制值的有序集合。 – Carl 2009-10-22 00:51:12

回答

2

在MySQL中

設置BIT(M)列對於M==1

setBoolean(int parameterIndex, boolean x) 

根據JavaDoc

將指定參數設置爲 給定的Java boolean值。 將其發送到數據庫時,將其轉換爲SQL BIT值。


對於M>1

的支持BIT(M)其中M!=1是有問題與JDBC爲BIT(M)只與 「全」 SQL-92和只有少數的DB需要支持。

這裏檢查Mapping SQL and Java Types: 8.3.3 BIT

我下面的作品與MySQL(至少與MySQL 5.0.45,爪哇1.6和MySQL連接器/ J 5.0.8)

... 
PreparedStatement insert = con.prepareStatement(
    "INSERT INTO bittable (bitcolumn) values (b?)" 
); 
insert.setString(1,"111000"); 
... 

這將使用擁有B MySQL的'110101010'語法來設置BIT列的值。

+0

我的問題是專門爲M!= 1;我會編輯以使這更明顯。 – Carl 2009-10-21 18:42:57

+0

解決方案的擴展答案 – jitter 2009-10-21 20:09:09

+0

當我導入我的同事文本文件時,這非常適用。我仍然希望避免將數據從字符串轉換爲非導入的情況。 – Carl 2009-10-21 20:19:48

2

您可以使用get/setObject和byte數組(byte [])。 8位被封裝到每個字節中,最低有效位位於最後一個數組元素中。

相關問題