Java中ResultSet不能一键转XML,但可用JDBC配合XMLStreamWriter(推荐)或StringBuilder拼接实现:先用ResultSetMetaData获取列信息,再逐行生成带根节点和row元素的XML,注意null处理及避免rs.getString强转。

Java 中 ResultSet 本身不能直接“一键转 XML”,但可以通过标准 JDBC API 配合简单逻辑,把查询结果逐行遍历生成符合结构的 XML 字符串。核心思路是:用 ResultSetMetaData 获取列名和类型,再用 XMLStreamWriter(推荐)或字符串拼接方式输出格式化 XML。
用 StAX(XMLStreamWriter)生成规范 XML
这是最推荐的方式——轻量、内存友好、不依赖第三方库(JDK 6+ 自带),还能控制缩进和编码。
- 创建
XMLStreamWriter,例如写入StringWriter或文件 - 调用
writeStartDocument()开始文档,writeStartElement("rows")作为根节点 - 遍历
ResultSet,每行调用writeStartElement("row") - 用
rsmd.getColumnName(i)和rs.getObject(i)获取字段名与值,写为子元素(如)1 - 注意对 null 值做空字符串处理,对特殊字符(
、&等)无需手动转义——XMLStreamWriter自动处理
简化版:用 StringBuilder 拼接(适合小数据、快速验证)
如果只是临时调试或结果很小,可跳过 StAX,用字符串拼接:
- 开头写
"" - 循环中拼接
"" + escapeXml(value) + ""+colName+">
" - 务必实现简单的
escapeXml()方法(替换&→&,→zuojiankuohaophpcn,>→youjiankuohaophpcn) - 结尾补上
""
注意事项
避免踩坑的关键点:
立即学习“Java免费学习笔记(深入)”;
-
别用 rs.getString(i) 强转所有字段:日期、二进制等类型会出错;统一用
rs.getObject(i)再 toString() -
ResultSet 必须保持打开状态:转换过程需在
rs.next()循环内完成,不能提前 close() -
列名大小写敏感:部分数据库(如 PostgreSQL)默认小写,
getColumnName()返回的是实际大小写,建议统一转小写或按需处理 - 不建议用 DOM 或 JAXB 直接映射:ResultSet 是游标式结构,没有固定 Java Bean 类型,硬套反而复杂
基本上就这些。不需要额外依赖,JDK 自带能力就能稳妥搞定。重点是别跳过元数据获取和空值/特殊字符处理。










