# 500 错误排查指南 ## 问题描述 导入省份数据时出现 500 Internal Server Error ## 可能的原因和解决方案 ### 1. 数据库表未创建 **检查步骤:** ```sql -- 连接到数据库 USE cattleTends; -- 检查表是否存在 SHOW TABLES LIKE 'cattleprovince'; SHOW TABLES LIKE 'cattlenational'; ``` **如果表不存在,执行以下 SQL:** #### 创建 cattleprovince 表 ```sql CREATE TABLE IF NOT EXISTS cattleprovince ( id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID', province VARCHAR(255) NOT NULL UNIQUE COMMENT '省份名称', province_price DECIMAL(10, 2) COMMENT '省份均价', inventory_23th INT COMMENT '23年存栏(万头)', slaughter_23th INT COMMENT '23年出栏(万头)', inventory_24th INT COMMENT '24年存栏(万头)', slaughter_24th INT COMMENT '24年出栏(万头)', inventory_25th INT COMMENT '25年存栏(万头)', slaughter_25th INT COMMENT '25年出栏(万头)', create_time DATETIME COMMENT '创建时间', up_time DATETIME NOT NULL COMMENT '更新时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='省份数据表'; -- 添加索引 CREATE INDEX idx_province_name ON cattleprovince(province); CREATE INDEX idx_province_price ON cattleprovince(province_price); CREATE INDEX idx_inv_23 ON cattleprovince(inventory_23th); CREATE INDEX idx_sla_23 ON cattleprovince(slaughter_23th); CREATE INDEX idx_inv_24 ON cattleprovince(inventory_24th); CREATE INDEX idx_sla_24 ON cattleprovince(slaughter_24th); CREATE INDEX idx_inv_25 ON cattleprovince(inventory_25th); CREATE INDEX idx_sla_25 ON cattleprovince(slaughter_25th); ``` #### 创建 cattlenational 表 ```sql CREATE TABLE IF NOT EXISTS cattlenational ( id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID', national_inventory_23th INT COMMENT '23年全国存栏量(15个省份存栏量的总和)', national_slaughter_23th INT COMMENT '23年全国出栏量(15个省份出栏量的总和)', national_inventory_24th INT COMMENT '24年全国存栏量(15个省份存栏量的总和)', national_slaughter_24th INT COMMENT '24年全国出栏量(15个省份出栏量的总和)', national_inventory_25th INT COMMENT '25年全国存栏量(15个省份存栏量的总和)', national_slaughter_25th INT COMMENT '25年全国出栏量(15个省份出栏量的总和)', create_time DATETIME COMMENT '创建时间', up_time DATETIME NOT NULL COMMENT '更新时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='全国总量数据表'; -- 添加索引 CREATE INDEX idx_national_inv_23 ON cattlenational(national_inventory_23th); CREATE INDEX idx_national_sla_23 ON cattlenational(national_slaughter_23th); CREATE INDEX idx_national_inv_24 ON cattlenational(national_inventory_24th); CREATE INDEX idx_national_sla_24 ON cattlenational(national_slaughter_24th); CREATE INDEX idx_national_inv_25 ON cattlenational(national_inventory_25th); CREATE INDEX idx_national_sla_25 ON cattlenational(national_slaughter_25th); ``` ### 2. 查看后端日志 **检查后端日志文件:** ```bash # 如果使用 start.sh 启动 tail -f log.out # 或者查看 Spring Boot 控制台输出 ``` **常见错误信息:** - `Table 'cattleTends.cattleprovince' doesn't exist` - 表不存在 - `Table 'cattleTends.cattlenational' doesn't exist` - 表不存在 - `Could not resolve placeholder` - 配置问题 - `No bean found` - 依赖注入问题 ### 3. 检查后端服务是否正常运行 ```bash # 检查服务是否运行 ps aux | grep java | grep cattletends # 检查端口是否监听 netstat -tlnp | grep 12240 ``` ### 4. 重新编译和重启 ```bash cd backend mvn clean package ./start.sh restart ``` ### 5. 测试接口 ```bash # 测试获取省份数据接口 curl http://localhost:12240/api/cattle-data/provinces # 测试获取全国总量接口 curl http://localhost:12240/api/cattle-data/national ``` ## 快速修复步骤 1. **确保数据库表已创建**(执行上面的 SQL) 2. **重新编译后端**:`cd backend && mvn clean package` 3. **重启服务**:`./start.sh restart` 4. **查看日志**:`tail -f log.out` 5. **重新尝试导入** ## 如果问题仍然存在 请提供以下信息: 1. 后端日志的完整错误信息 2. 数据库表是否已创建(执行 `SHOW TABLES;`) 3. Excel 文件的格式(列数、数据类型)