2009-02-27 70 views
0

我們使用jdbc-odbc橋連接到MS SQL數據庫。當執行插入或更新時,將字符串放入填充到數據庫字段長度的數據庫中。有沒有什麼辦法可以關閉這種行爲(字符串應該進入沒有填充的表格)?防止jdbc在SQL插入時填充字符串並更新

作爲參考,我們能夠使用SQL管理工具和查詢分析器插入不包含填充的字段值,所以我非常確定這發生在jdbc或odbc層的東西上。

編輯:在數據庫中的字段被列爲爲nvarchar(X),其中X = 50,255,無論

編輯2:做插件使用準備語句的呼叫,就好像:

PreparedStatement stmt = new con.prepareStatement("INSERT INTO...."); 
stmt.setString(1, "somevalue"); 
+0

varchar或char? – 2009-02-27 22:40:18

+0

不過,考慮改變你的司機。 – OscarRyz 2009-02-28 04:38:16

+0

我聽到你 - 我們將最終使用jtds - 但是,部署更復雜(尤其是如果你想使用本地認證)。 jdbc-odbc橋接器非常易於部署,而且我們的應用程序對實際的SQL使用情況非常輕鬆(我們可能在一天內執行50次查詢和100次插入)。 – 2009-03-01 04:58:43

回答

4

你是如何設置字符串的?你在幹什麼?:

PreparedStatement stmt = new con.prepareStatement("INSERT INTO...."); 
stmt.setString(1, "somevalue"); 

如果是的話,試試這個:

stmt.setObject(1, "somevalue", Types.VARCHAR); 

同樣,這只是猜測沒有看到你如何插入。

+0

就是這樣。我可能可以使用不同的驅動程序(可能是jtds),但對setObject的調用完美無缺。謝謝! – 2009-02-28 04:30:12

1

您在數據庫或VARCHAR中使用CHAR字段嗎?

CHAR填充字段的大小。 VARCHAR不。

我不認爲JDBC會造成這種情況。

+0

是的 - 這就是我的想法。但是當我從jdbc進行更新調用時,nvarchars仍然得到填充。當我使用查詢分析器進行更新等時,他們進入沒有填充。 – 2009-02-28 04:23:32

0

如果您使用的是捆綁的Sun JDBC-ODBC Bridge驅動程序,則可能需要考慮遷移到適當的MS SQL JDBC驅動程序。 Sun不建議在生產環境中使用網橋驅動程序。

JDBC-ODBC Bridge驅動程序建議只用於實驗性使用或當沒有其他替代方法可用時。

轉向更有針對性的驅動程序可能會將問題都解決在一起,或者至少在您修復錯誤時提供生產就緒解決方案。

1

如果你可以讓你的插入工作與常規的SQL工具(如...我不知道蟾蜍的MS SQL服務器或什麼),然後改變驅動程序應該做的。

使用Microsoft SQL Server JDBC IV型驅動程序。

給這個鏈接一個嘗試

http://www.microsoft.com/downloads/details.aspx?familyid=F914793A-6FB4-475F-9537-B8FCB776BEFD&displaylang=en

不幸的是這些類型的下載附帶了很多垃圾。有一個安裝工具和另外數百個文件。只要尋找類似:

intalldir \ LIB \ someSingle.jar

複製到其他和卸載某個地方/刪除其餘。

幾個月前,我做了這件事,不幸的是我不記得它確切的位置。

編輯

好吧,我知道了。

點擊下載頁面點擊「我同意,並要下載的UNIX版本」

這是一個普通的壓縮文件(用Win RAR或其他),並有尋找一個結束sigle罐子。

這應該工作。