[英]Prevent jdbc from padding strings on sql insert and update
我们正在使用jdbc-odbc桥连接到MS SQL数据库。 执行插入或更新时,会将字符串放入数据库中,并填充为数据库字段的长度。 有什么办法可以关闭此行为(字符串应该插入表中而不添加填充)?
作为参考,我们可以使用SQL管理工具和查询分析器插入不包含填充的字段值,因此,我很确定这是在jdbc或odbc层发生的。
编辑:数据库中的字段被列为nvarchar(X),其中X = 50、255,无论
编辑2:进行插入操作的调用使用一条准备好的语句,就像:
PreparedStatement stmt = new con.prepareStatement("INSERT INTO....");
stmt.setString(1, "somevalue");
您如何设置字符串? 你在做什么?:
PreparedStatement stmt = new con.prepareStatement("INSERT INTO....");
stmt.setString(1, "somevalue");
如果是这样,请尝试以下操作:
stmt.setObject(1, "somevalue", Types.VARCHAR);
同样,这只是猜测而没有看到您的插入方式。
您正在使用数据库中的CHAR字段还是VARCHAR?
CHAR填充字段的大小。 VARCHAR没有。
我认为JDBC不会造成这种情况。
如果您可以使插入程序与常规SQL工具(例如...我不知道Toad for MS SQL Sever之类的东西)一起工作,则更改驱动程序应该可以。
使用Microsoft SQL Server JDBC IV型驱动程序。
试试这个链接
不幸的是,这类下载会带来很多垃圾。 有一个安装工具和另外数百个文件。 只是寻找类似的东西:
intalldir \\ lib \\ someSingle.jar
复制到其他地方,然后卸载/删除其余部分。
几个月前我做了这个,不幸的是我没有确切地记得它的位置。
编辑
好,我知道了。
单击下载,然后在页面末尾单击“我同意并想要下载UNIX版本”。
这是一个常规的压缩文件(使用win rar或other),并在其中查找该单独的jar。
那应该工作。
如果使用捆绑的Sun JDBC-ODBC Bridge驱动程序,则可能要考虑迁移到适当的MS SQL JDBC驱动程序。 Sun建议不要在生产环境中使用桥驱动程序。
建议仅将JDBC-ODBC Bridge驱动程序用于实验性使用,或者在没有其他替代方法时才使用。
转移到更有针对性的驱动程序可能会共同解决您的问题,或者至少在您修复该错误时它将为生产提供解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.