首页 > 其他分享 >【YashanDB知识库】修改字段长度后,jdbc驱动接口报YAS-04007 Message:result set metadata changed异常

【YashanDB知识库】修改字段长度后,jdbc驱动接口报YAS-04007 Message:result set metadata changed异常

时间:2024-09-06 18:23:33浏览次数:14  
标签:ps jdbc yashandb 段长度 rs nbsp tid YashanDB

问题现象

yashandb修改表的字段长度后,客户的业务接口报YAS-04007异常,截图如下:

【YashanDB知识库】修改字段长度后,jdbc驱动接口报YAS-04007 Message:result set metadata changed异常_崖山数据库

问题的风险及影响

客户的业务在访问yashandb时异常出错,影响使用

问题影响的版本

所有的yashandb版本

问题发生原因

使用jdbc接口获取PreparedStatement以后,修改表的字段长度,再用前面获取的PreparedStatement继续执行向yashandb发送请求,yashandb就会抛出YAS-04007 Message:result set metadata changed异常。

解决方法及规避方式

规避方法:重启业务java进程

问题分析和处理过程

使用如下ddl在yashandb创建表:

【YashanDB知识库】修改字段长度后,jdbc驱动接口报YAS-04007 Message:result set metadata changed异常_java代码_02

使用如下的java代码进行问题重现:

PreparedStatement ps = conn.prepareStatement("select tid,tname from test where tid = ?");

ps.setInt(1, 1);

ResultSet rs = ps.executeQuery();//在这一行打上断点

while (rs.next()) {

    System.out.println(rs.getString(2));

}

rs.close();

ps = conn.prepareStatement("select tid,tname from test where tid = ?");

ps.setInt(1, 1);

rs = ps.executeQuery();;

while(rs.next()){

    System.out.println(rs.getString(2));

}

在执行到断点处时,yasql/sqlplus执行alter table test modify(tname varchar2(36));

成功以后,继续执行前面java代码

yasdb会有如下异常:

【YashanDB知识库】修改字段长度后,jdbc驱动接口报YAS-04007 Message:result set metadata changed异常_System_03

现网的druid中间件开启了pool-prepared-statements,所以会触发这个异常。

经验总结

研发分析后保持现状。

资料文档已经配套修改:错误码 | YashanDB Doc

标签:ps,jdbc,yashandb,段长度,rs,nbsp,tid,YashanDB
From: https://blog.51cto.com/u_16065869/11939083

相关文章

  • postgresql java jdbc 负载均衡解决方案
    在PostgreSQL和JavaJDBC的环境中实现负载均衡,可以有效提升数据库性能和可用性。以下是一个基于PostgreSQL和JavaJDBC的负载均衡解决方案,包括主从复制、连接池、以及负载均衡器的集成。1.PostgreSQL主从复制PostgreSQL的主从复制是实现读写分离的重要前提。主节点(Ma......
  • 细致刨析JDBC ① 基础篇
    “加油”我已经说腻了,下次我要说:”祝你拥有随时停留和休息的底气“                                                                                               ......
  • YashanDB,共享集群模式 部署
    为了测试YashanDB的RAC模式性能到底怎样,在测试环境进行了部署,简单记录一下。0.环境说明计算节点一192.168.0.181(业务网)192.168.10.181(心跳网)计算节点二192.168.0.182(业务网)192.168.10.182(心跳网)共享存储:/dev/yas/c1p1,/dev/yas/c1p2是2块10GB的盘,/dev/yas/c1p4,/dev/yas/c1p5,/de......
  • YashanDB产品调优实战:分享日常调优技巧及提升系统性能的实战经验
    本文旨在提供一系列关于YashanDB产品的调优技巧和实战经验,帮助读者更好地理解和应用这些技术来优化数据库性能。内容将涵盖索引优化、查询优化、内存管理、参数配置,以及性能监控等多个方面,通过实际案例和详细的分析,展示如何有效地应用这些技巧以提升YashanDB的系统性能。......
  • ShardingSphere-JDBC实现数据加解密
    一、什么是ShardingSphere?        ShardingSphere定位为轻量级Java框架,在Java的JDBC层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。ApacheShardingSphere旨......
  • JDBC的使用及案例
    1.JDBC基本操作1.1.JDBC概述JDBC(JavaDataBaseConnectivity)Java连接数据库是一种用于执行SQL语句的JavaAPI,为多种关系数据库提供统一访问它由一组用Java语言编写的类和接口组成有了JDBC,程序员只需用JDBCAPI写一个程序,就可以访问所有数据库SUN公司时规范制定者,制定......
  • jdbc-day01
    _01Simple_JDBCDemo01packagecom.jdbc._01Simple;importjava.sql.*;/***JDBC的第一个程序编写:修改mydb库中的emp表中的7369这个员工的部门编号为30*准备工作:准备好项目,然后加载第三方jar包,即MYSQL的驱动程序。注意,addasLibrary*/publicclassJDBCDem......
  • JDBC中的execute, executeQuery, 和 executeUpdate方法区别
    JDBC中的execute,executeQuery,和executeUpdate方法区别1、execute(Stringsql)2、executeQuery(Stringsql)3、executeUpdate(Stringsql)......
  • 为什么在JDBC中使用PreparedStatement?
    为什么在JDBC中使用PreparedStatement?......
  • JDBC快速入门教程
    JDBC是什么?JDBCAPI是一个JavaAPI,可以访问任何类型表列数据,特别是存储在关系数据库中的数据。JDBC代表Java数据库连接。JDBC库中所包含的API通常与数据库使用于:连接到数据库创建SQL或MySQL语句在数据库中执行SQL或MySQL查询查看和修改数据库中的数据记录使用JDBC前提条件......