我们正在使用jdbc-odbc桥连接到MS SQL数据库。执行插入或更新时,将字符串放入填充到数据库字段长度的数据库中。有没有办法关闭这种行为(字符串应该进入表没有填充)?
作为参考,我们可以使用SQL管理工具和查询分析器插入不包含填充的字段值,所以我很确定这是在jdbc或odbc层事件中发生的。
编辑:数据库中的字段列为nvarchar(X),其中X = 50,255,无论
编辑2:执行插入的调用使用预准备语句,如:
PreparedStatement stmt = new con.prepareStatement("INSERT INTO....");
stmt.setString(1, "somevalue");
答案 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驱动程序。
尝试使用此链接
不幸的是,这些类型的下载带来了大量垃圾。有一个安装工具和另外数百个文件。只需寻找类似的东西:
intalldir \ lib \ someSingle.jar
复制到其他地方并卸载/删除其余部分。
我几个月前这样做了,不幸的是我不记得它到底在哪里。
编辑
好的,我明白了。
点击下载,在页面末尾点击“我同意并想下载UNIX版本”
这是一个常规的压缩文件(使用win rar或其他),然后寻找那个sigle jar。
这应该有效。
答案 3 :(得分:0)
如果您使用的是捆绑的Sun JDBC-ODBC Bridge驱动程序,则可能需要考虑迁移到正确的MS SQL JDBC驱动程序。 Sun不建议在生产环境中使用桥接驱动程序。
建议仅将JDBC-ODBC Bridge驱动程序用于实验用途,或者在没有其他替代方法可用时使用。
转移到更具针对性的驱动程序可能会一起解决您的问题,或者至少它会在您修复错误时提供生产就绪的解决方案。