如何将PreparedStatement查询的ResultSet结果转为字符串存入数据库
问题根源
你代码中直接对ResultSet实例调用String.valueOf(rs),本质是调用了ResultSetImpl的默认toString()方法,输出的是类名+内存地址的格式,而非你查询到的buildingName字段实际值。
正确处理步骤
- 执行完查询拿到
ResultSet后,先调用next()方法移动游标到有效数据行(该方法返回布尔值,可同步判断是否查询到匹配结果) - 调用
ResultSet的getString()方法传入字段名/字段索引,拿到实际的字符串值,再赋值给插入语句的参数
修正后代码
PreparedStatement check = connection.prepareStatement( // 原语句的GROUP BY + HAVING可简化为WHERE,查询效率更高 "SELECT buildingName FROM building WHERE buildingId = ?"); check.setInt(1, building_id); ResultSet rs = check.executeQuery(); String buildingName = ""; // 移动游标到结果行,同时判断是否存在匹配数据 if (rs.next()) { // 提取查询到的buildingName字段值 buildingName = rs.getString("buildingName"); } insert.setString(1, buildingName); insert.executeUpdate();
额外注意事项
- 如果查询可能返回多条数据,可以把
if(rs.next())替换为while(rs.next())遍历所有结果 - 操作完成后要按
ResultSet→PreparedStatement→Connection的顺序关闭资源,避免内存泄漏
内容的提问来源于stack exchange,提问作者onidzuka
相关产品推荐
相关产品推荐

