从java插入SQL Server追加'null'

Fre*_*ek8 0 java sql sql-server

我正在尝试从Java中将值插入到SQL数据库中.这样可以正常工作,除了一些值.例如,当我插入"foo"时,它在开头追加null,因此它变为"nullfoo".如果我在SQL Server Management Studio中插入相同的语句,则不会发生这种情况.

可以肯定的是:我在插入字符串之前打印它,它显示为"foo".

我的插入代码:

statement.execute("INSERT INTO " + settings.getProperty("table") + " VALUES ('" + value1+ "', '" + value2 + "', '" + value3 + "')");
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 10

您将值连接到SQL语句中.如果任何这些参考文献(的value1,value2等等)都为空,那么这些会被转换成字符串"空"作为级联的一部分.

对此的正确修复不是改变您进行验证的方式 - 而是停止将值放入SQL语句本身.使用PreparedStatement参数化SQL并设置参数值.

优点:

  • 你不会再插入"null"了
  • 你不再容易受到SQL注入攻击(你现在是)
  • 插入非文本数据时,您无需担心有问题的转换(这与日期/时间字段特别相关)
  • 您的代码将更清晰,因为您将代码(SQL)与数据(参数值)分开
  • 您准备好的语句查询计划可以由服务器缓存,因此它可以更快地执行