【问题标题】:Remove character from resultset in Java从 Java 中的结果集中删除字符
【发布时间】:2017-06-09 17:23:14
【问题描述】:

我的 Sql ResultSet 在 Java 中的值有问题。 此值有一个单引号 ('),它不是有效值。正确的值是逗号 (,)。 我想将这个单引号 (') 更改为逗号 (,)。

错误值示例:7'8

预期结果示例:7,8

我的查询示例和我的 ResulSet:

 String query = "SELECT width,height FROM SizeTable;";
 rs = st.executeQuery(query);

 while(rs.next()){
    String width = rs.getString(1);
    String height = rs.getString(2); <--- Here is on I get the error
 }

 String insert = "INSERT INTO SizeTable2 (Value1,Value2) VALUES('"+width+"','"+height+"')";

 st.executeUpdate(insert);

运行后,我收到一条 SQL 消息,指出我的 SQL 语句中存在无效的语法错误(我想“插入”宽度和高度值)。 我不能用 MySQL 改变这个字符,只能用 Java。

【问题讨论】:

  • 也许您应该告诉我们您遇到了什么错误?
  • 我仍然不明白错误是在SQL语句中还是在它的结果中
  • 在尝试提出更多问题之前,请阅读Why is “Can someone help me?” not an actual question?
  • 使用该代码享受 SQL 注入攻击的乐趣!尽快学会使用PreparedStatement
  • 我收到与此不正确字符 (') 相关的错误,我想用 Java 将其更改为逗号 (,)。

标签: java mysql sql jdbc


【解决方案1】:

您可以在收到您的输入时使用String::replace

String height = rs.getString(2).replace("'", ",");

你必须在循环外声明你的变量,以便以后使用它们:

String width = "";
String height = "";
while(rs.next()){
    width = rs.getString(1);
    height = rs.getString(2).replace("'", ",");
}

现在您的 sql 对 SQL 注入或语法错误开放,为避免这种情况,我建议改用 PreparedStatement:

String insert = "INSERT INTO SizeTable2 (Value1,Value2) VALUES(?, ?)";

try (PreparedStatement insert = connection.prepareStatement(insert)) {
    insert.setString(1, width);
    insert.setString(2, height);
    insert.executeUpdate();
}

注意你可以插入一个空值,所以我建议在插入之前检查值:

if(!width.isEmpty() && !height.isEmpty()){
  //prepared statement
}

第二件事,我假设我们使用实数来表示宽度和高度,所以为什么您要使用字符串,我建议您更改数据类型,这样您就可以避免所有这些问题。

【讨论】:

  • 你的答案还是一样的。之前被你删除的java解决方案。
  • @PradeepSingh 请阅读第二个注释,你能澄清你的意思吗,我真的不明白你的意思
  • YCF_L,除了 7'8,我还有更多的值。这将更正我的字段中的所有无效字符还是仅此?也感谢 SQL 注入信息!!! ;)
  • @JohnStonecutter 它只会更正最后一个值,如果您想更改所有内容,那么您必须将插入部分移动到您的 while 循环中,以便您可以替换和插入所有新值,但是小心
猜你喜欢
  • 2015-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
  • 1970-01-01
  • 1970-01-01
  • 2013-02-16
相关资源
最近更新 更多