2010-07-29 72 views
1

我通過Zentus在Java代碼中使用SQLite。使用SQLite和Zentus Jdbc驅動程序的長類型

我需要在我的數據庫中映射Java原始類型long。爲此,我嘗試使用以下語句創建表格:CREATE TABLE MY TABLE (...., LONG time, ...)

通過Java與Zentus插入到數據庫中工作正常,但是在檢索數據時,始終通過Java和Zentus將LONG值縮小爲32位值。

我試圖用SQlite直接查詢數據庫,它工作,因此我猜想問題是JDBC驅動程序。

你們有沒有遇到過這樣的問題,你是怎麼解決的?

回答

1

SQLite的有4種基本類型:

  • 文本
  • 整數
  • 房地產
  • 斑點

一些關鍵詞轉換爲這些類型的,未知的關鍵字默認爲文本。 「Integer」類型有點特別,因爲SQLite將只保留記錄最大數量所需的最小大小。如果你的最大號碼小於2^31,它將被記錄在32位上。如果擴展到64位,我不知道它會縮小,那麼所有2^31以上的值都會被刪除,或者它保持不變。如果數據庫被抽真空,它肯定會退縮。

我可以建議保留一個具有64位值的虛擬記錄,試着看看JDBC之後的行爲。

+0

感謝您的回答。這意味着我可以創建類型爲「LONGFOOBAR」的表,例如結果是相同的?如前所述,我認爲在SQLite級別沒有問題,但在我使用的JDBC驅動程序中。你是否使用Java代碼中的SQLite? – 2010-07-29 12:49:44

+0

不,我使用SQLite,但使用不同的代碼,所以這就是爲什麼我不能給你一個100%開明的答案。至於類型「LONGFOOBAR」,它將在內部默認爲「TEXT」,但「LONG」也是如此。只有類型具有字母「INT」時,該列纔會聲明爲INTEGER。插入整數將使TEXT列保持爲。 ..好吧,我不知道是什麼,但是對於你的連接器,更喜歡聲明爲INTEGER – MPelletier 2010-07-29 13:39:56

+0

再次感謝我讀了SQLite輸入信息,現在我知道了,謝謝你,它是如何工作的,我會修改我的類型爲有INTEGER列的數值,即使知道和修改,我仍然有我的問題,並認爲在我使用的Zentus JDBC驅動程序存在問題,我正在調查...... – 2010-07-29 13:43:19