1.问题描述

在查询视图时,执行存储过程时Java代码报错:java.sql.SQLException: Prepared statement needs to be re-prepared;单独调用存储过程也是报错:Prepared statement needs to be re-prepared,代码和存储过程没问题;这是数据库设置问题。

2.问题排查

mysql的变量值设置不合理,原有的存储过程里增加了个 左链接 控制台抛出 Prepared statement needs to be re-prepared 异常 数据库交换空间已满 alt

3.问题解决

  1. 查看 table_open_cache 量 mysql 的两个全局变量(打开表的缓存数量,表定义缓存数量)的设置值过小,而你的数据库表数量较多的情况。
1、打开表的缓存数量(table_open_cache)查询sql:
  SHOWVARIABLESLIKE'%table_open_cache%';
       
2、表定义缓存数量(table_definition_cache) 查询sql : 
  SHOWVARIABLESLIKE'%table_definition_cache%'; 

  1. mysql引起的错误,设置
  • set global table_open_cache=16384; 表描述符缓存大小
  • set global table_definition_cache=16384;