从Java中的结果集中删除字符

时间:2017-06-09 17:23:15

标签: java mysql sql jdbc

我的Java中的Sql ResultSet的值有问题。 该值具有单引号('),并且该值不是有效值。正确的值将是逗号(,)。 我想为逗号(,)改变这个单引号(')。

错误值示例: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。

1 个答案:

答案 0 :(得分:0)

您可以在获得输入时使用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
}

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