2017-09-05 47 views
0

我的表中有一個包含unsigned integer值的外鍵列。我想爲此列添加一個新值,但我不知道java如何處理這個unsigned值,因爲java沒有原生的無符號值。以無符號整數使用Java Prepared Statement的正確方法

如果我做的:

preparedStatement.setInt(2, myInt); 

將在數據庫轉換這個signed int它自動的unsigned價值?或者它會拋出一個錯誤,說這些是不兼容的類型?我應該站出來,用long,如:

preparedStatement.setLong(2, myLong); 

還是將拋出一個異常爲好,因爲數據庫沒有使用BIGINT

我正在使用MySQL,我只是想避免將來隨着表記錄的增長而出現意外。

+3

您是否嘗試實施兩種方法並查看會發生什麼? :) – dazito

+0

我曾考慮過這個問題,但我先試着谷歌搜索,但沒有發現任何內容,所以我認爲如果這個答案被正確記錄,將會爲未來人節省時間,這將會更加有用。 – mFeinstein

+1

@mFeinstein我同意這一點!不建立一個問題並回答它是不被禁止的。因此,您可以嘗試並創建與測試相匹配的問題;-)(如果失敗,則創建一個問題,詢問原因和答案,因爲它不支持示例和源代碼,如果沒有其他帖子可以找到的話。 ..) – AxelH

回答

2

也許MySQL的行爲以某種方式和SQL Server在另一

撇開事實,SQL Server沒有無符號整數,你的直覺是簽署⇄無符號的行爲很可能取決於正確正在使用的特定JDBC驅動程序的實現。因此,您尋求的一般答案實際上「太寬泛」,因爲它可能需要描述其數據庫支持無符號整數列的所有JDBC驅動程序的實現特定詳細信息。

所以,在評論這個問題的建議,爲MySQL(或任何其他特定的JDBC驅動程序),你最好的選擇將是

  1. 看看JDBC規範本身定義所需的行爲(不太可能) ,
  2. 檢查您的JDBC驅動程序文檔以獲取最終答案,或者
  3. 測試您的所需配置以查看它的行爲是否適合您的需求。
+0

看到了,這就是爲什麼我想要一個專家意見......現在我學到的東西並不像我想的那麼簡單,如果我自己測試了這個,我可以得出結論,測試行爲永遠是真的,即使在未來我使用的其他數據庫中......現在我知道每次都必須小心 – mFeinstein

相關問題