# SQL语法错误修复

## 🐛 问题描述

**错误信息**:
```
java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version for the right syntax to use near '-50' at line 1
```

**错误原因**: 分页计算导致OFFSET为负数(-50)

## 🔧 修复内容

### 1. 修复Service层分页计算 ✅
**文件**: `SysChatMessageServiceImpl.java`
**问题**: 分页计算可能产生负数
**修复**: 添加负数检查，确保offset >= 0

```java
// 修复前
Integer offset = pageNum != null && pageSize != null ? (pageNum - 1) * pageSize : null;

// 修复后
Integer offset = null;
if (pageNum != null && pageSize != null && pageNum > 0) {
    offset = (pageNum - 1) * pageSize;
    if (offset < 0) offset = 0;
}
```

### 2. 修复Controller层重复计算 ✅
**文件**: `ChatController.java`
**问题**: Controller和Service都做了分页计算，导致双重计算
**修复**: 移除Controller中的重复计算

```java
// 修复前
List<SysChatMessage> list = chatMessageService.selectConversationMessages(conversationId, 
    (pageNum - 1) * pageSize, pageSize);

// 修复后
List<SysChatMessage> list = chatMessageService.selectConversationMessages(conversationId, pageNum, pageSize);
```

### 3. 修复SQL查询条件 ✅
**文件**: `SysChatMessageMapper.xml`
**问题**: 没有验证分页参数的有效性
**修复**: 添加参数验证条件

```xml
<!-- 修复前 -->
<if test="pageNum != null and pageSize != null">
    LIMIT #{pageSize} OFFSET #{pageNum}
</if>

<!-- 修复后 -->
<if test="pageNum != null and pageSize != null and pageNum >= 0 and pageSize > 0">
    LIMIT #{pageSize} OFFSET #{pageNum}
</if>
```

## 🎯 修复结果

### ✅ 预期行为
- 页码1，页大小50 → OFFSET 0, LIMIT 50
- 页码2，页大小50 → OFFSET 50, LIMIT 50
- 无分页参数 → 不使用LIMIT子句

### 🚀 测试验证

1. **重启后端应用**
2. **访问消息页面**
3. **点击会话** - 应该正常显示消息列表
4. **发送消息** - 应该正常发送和显示

## 📋 相关文件修改清单

- [x] `SysChatMessageServiceImpl.java` - 分页计算逻辑
- [x] `ChatController.java` - 移除重复计算
- [x] `SysChatMessageMapper.xml` - SQL条件验证

## 🐛 如果问题仍然存在

### 检查步骤
1. 确认后端应用已重启
2. 检查浏览器控制台错误
3. 查看后端日志详细信息
4. 验证数据库连接正常

### 调试SQL
```sql
-- 手动测试查询
SELECT message_id, conversation_id, sender_id, sender_name, content, create_time 
FROM sys_chat_message 
WHERE conversation_id = 'conv_1_2' 
AND status != '0' 
ORDER BY create_time ASC 
LIMIT 50 OFFSET 0;
```

---
**状态**: 🟢 已修复  
**更新时间**: 2025-11-12 22:42
