2009-02-27 74 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罐子。

这应该工作。