package com.xly.util; /** * 更详细的错误分类引导提示词 */ public class EnhancedErrorGuidance { public static String splitString = " OLDSQL "; /** * 根据错误类型生成针对性的引导信息 */ public static String getErrorGuidance(String errorMessageAll) { StringBuilder guidance = new StringBuilder(); String errorMessage = errorMessageAll.split(splitString)[0]; if (errorMessage.contains("Unknown column")) { guidance.append("【字段不存在错误】\n"); guidance.append("- 错误原因:SQL中使用了表中不存在的字段\n"); guidance.append("- 修复方法:从以下表结构中选择正确的字段名\n"); guidance.append(" {{tableStruct}}"); guidance.append("\n- 注意:字段名区分大小写,请核对拼写"); } else if (errorMessage.contains("Table doesn't exist")) { guidance.append("【表不存在错误】\n"); guidance.append("- 错误原因:SQL中使用了不存在的表名\n"); guidance.append("- 修复方法:检查表名拼写,确保与传入的表名完全一致\n"); } else if (errorMessage.contains("Syntax error")) { guidance.append("【SQL语法错误】\n"); guidance.append("- 错误原因:SQL语句不符合MySQL语法规范\n"); guidance.append("- 常见问题:\n"); guidance.append(" 1. 关键词拼写错误(SELEC、FORM等)\n"); guidance.append(" 2. 缺少必要的关键词(JOIN、ON等)\n"); guidance.append(" 3. 括号不匹配\n"); guidance.append(" 4. 字符串缺少引号\n"); } else if (errorMessage.contains("Column not found in ON clause")) { guidance.append("【JOIN关联字段错误】\n"); guidance.append("- 错误原因:ON条件中使用的字段不存在\n"); guidance.append("- 修复方法:检查JOIN条件字段是否正确\n"); } else if (errorMessage.contains("Non unique table/alias")) { guidance.append("【表别名重复错误】\n"); guidance.append("- 错误原因:多个表使用了相同的别名\n"); guidance.append("- 修复方法:为每个表使用唯一的别名\n"); } else if (errorMessage.contains("Unknown table")) { guidance.append("【未知表错误】\n"); guidance.append("- 错误原因:SQL中引用了未在FROM/JOIN中声明的表\n"); guidance.append("- 修复方法:确保所有使用的表都已正确JOIN\n"); } else if (errorMessage.contains("Incorrect integer value")) { guidance.append("【数据类型不匹配错误】\n"); guidance.append("- 错误原因:字符串值赋给了数字字段\n"); guidance.append("- 修复方法:数字类型不加引号,字符串类型加单引号\n"); } else if(errorMessage.contains("SQL EMPTY")){ guidance.append("【生成SQL】\n"); guidance.append("- 错误原因:生成的SQL语句为空\n"); guidance.append("- 修复方法:请重新生成\n"); } else if(errorMessage.contains("You cannot use the window function 'lag' in this context.")){ guidance.append("【LAG函数用法不对】\n"); guidance.append("- 错误原因: 这个错误是因为在MySQL中,不能在聚合函数(如AVG)中直接使用窗口函数(如LAG)。窗口函数是在聚合之前计算的,但不能嵌套在聚合函数内部。\n"); guidance.append("- 修复方法:在AVG聚合函数中禁止用LAG窗口函数\n"); } else { guidance.append("【未知错误】\n"); guidance.append("- 错误信息:").append(errorMessage).append("\n"); guidance.append("- 请仔细检查SQL语句的每一个部分\n"); } return guidance.toString(); } }