You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java中如何通过JDBC从数据库获取带双引号的JSON字符串?

嘿,这个问题我之前也碰到过!核心原因是你数据库里的SETTING_VALUE字段大概率不是普通的字符串类型(比如VARCHAR/TEXT),而是专门的JSON类型(像MySQL的JSON、PostgreSQL的jsonb),JDBC默认不会直接把这类类型转换成String,所以调用rs.getString()才会抛出转换异常。

给你几个实用的解决办法,按通用性排序:

方法1:在SQL查询里显式转为字符串(最通用)

直接在查询语句里把JSON字段转成字符串类型,这样JDBC就能直接用getString()读取了。

  • 如果你用的是MySQL:
SELECT CAST(SETTING_VALUE AS CHAR) AS SETTING_VALUE FROM your_table_name;
  • 如果你用的是PostgreSQL:
SELECT SETTING_VALUE::text AS SETTING_VALUE FROM your_table_name;

这样查询返回的就是普通字符串,调用String value = rs.getString("SETTING_VALUE")就不会报错了。

方法2:用getObject()再转成String

如果不想改SQL,可以先用getObject()获取JSON对象,再调用toString()拿到原始字符串:

Object jsonObject = rs.getObject("SETTING_VALUE");
String value = jsonObject.toString();

不同数据库驱动返回的JSON对象类型可能不一样(比如MySQL返回com.mysql.cj.xdevapi.JsonString),但它们的toString()方法都会返回正确的JSON字符串。

方法3:使用驱动特定的方法(耦合性高)

有些数据库驱动提供了专门的方法来读取JSON字段,比如MySQL的JDBC驱动可以强转ResultSet后调用getJSONString()

// 注意:需要确保你的ResultSet是MySQL的实现类
String value = ((com.mysql.cj.jdbc.result.ResultSetImpl) rs).getJSONString("SETTING_VALUE");

不过这个方法会和具体的数据库驱动绑定,如果后续换数据库就得修改代码,所以不太推荐除非你确定不会换驱动。

最后提醒下:先确认下数据库里SETTING_VALUE字段的实际类型,确保是JSON类型而不是其他特殊类型,这样上面的方法才能生效。

内容的提问来源于stack exchange,提问作者Lakshmipathi G

火山引擎 最新活动