防止jdbc填充sql insert和update上的字符串

时间:2009-02-27 22:35:07

标签: java jdbc odbc

我们正在使用jdbc-odbc桥连接到MS SQL数据库。执行插入或更新时,将字符串放入填充到数据库字段长度的数据库中。有没有办法关闭这种行为(字符串应该进入表没有填充)?

作为参考,我们可以使用SQL管理工具和查询分析器插入不包含填充的字段值,所以我很确定这是在jdbc或odbc层事件中发生的。

编辑:数据库中的字段列为nvarchar(X),其中X = 50,255,无论

编辑2:执行插入的调用使用预准备语句,如:

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

4 个答案:

答案 0 :(得分:5)

你是如何设置字符串的?你在干嘛?:

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

如果是这样,试试这个:

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

同样,这只是猜测,而不会看到你如何插入。

答案 1 :(得分:1)

您在数据库或VARCHAR中使用CHAR字段吗?

CHAR填充场的大小。 VARCHAR没有。

我认为JDBC不会导致这种情况。

答案 2 :(得分:1)

如果你可以让你的插件与普通的SQL工具一起工作(比如......我不知道Toad for MS SQL Sever或者什么),那么改变驱动程序应该这样做。

使用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 jar。

这应该有效。

答案 3 :(得分:0)

如果您使用的是捆绑的Sun JDBC-ODBC Bridge驱动程序,则可能需要考虑迁移到正确的MS SQL JDBC驱动程序。 Sun不建议在生产环境中使用桥接驱动程序。

  

建议仅将JDBC-ODBC Bridge驱动程序用于实验用途,或者在没有其他替代方法可用时使用。

转移到更具针对性的驱动程序可能会一起解决您的问题,或者至少它会在您修复错误时提供生产就绪的解决方案。