【问题标题】:Insert data to sql using java issue使用java问题将数据插入sql
【发布时间】:2013-12-06 07:46:52
【问题描述】:

我遇到了从 java 代码插入 SQL 数据库的问题。 我正在使用使用 java 代码的 INSERT sql 查询将数据从 XML 文件输入到 SQL 数据库。 您可能会假设列名为“描述”。 想象一下,XML 中有一条包含撇号 (') 的记录。由于数据中包含的撇号引起的错误,程序崩溃。 我知道我们可以手动添加另一个撇号并使其工作,但是想象一下 10.000 条记录的数据,我们该如何处理这个问题?

【问题讨论】:

  • 使用Prepared Statements自动解决这个问题。
  • 另外,最好提及您正在使用的实际 DBMS(Oracle、Postgres、...)

标签: java sql xml


【解决方案1】:

不要这样做(字符串连接):

String sql = "insert into MyTable (description) values ('" + value + "')";
Statement st = connection.createStatement();
st.executeUpdate(sql);

这样做(prepared statement):

PreparedStatement ps = connection.prepareStatement(
    "insert into MyTable (description) values (?)"
);
ps.setString(1, value);
pt.executeUpdate();

该值将为您正确转义。这不仅可以防止发生您提到的事故,还可以帮助您抵御 SQL 注入攻击。

幽默插画:

Source

【讨论】:

    【解决方案2】:

    您有两个选择,您应该使用PreparedStatement 并绑定您的参数。或者,如果您真的非常想要 - 您可以使用 StringEscapeUtils.escapeSql(str)

    【讨论】:

    • 请注意,由于 commons 3.0 StringEscapeUtils.escapeSql(str)no longer supported.
    • 我当然不会推荐它而不是 PreparedStatement。
    猜你喜欢
    • 2019-10-10
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多