# 题库导入问题解决方案 ## 🔍 问题描述 在**考试管理**中创建考试时,选择"从题库抽取",但下拉框中**看不到新建的题库和题目**。 ## 🎯 问题原因 考试管理页面调用的是 `/study/questionBank/my-banks` 接口,这个接口**只返回当前登录用户创建的题库**,查询条件是: ```sql WHERE b.create_user_id = #{当前用户ID} ``` 如果题库的 `create_user_id` 字段为**空**或与当前用户ID**不匹配**,就会导致题库不显示。 ## 📊 可能的情况 ### 情况1:数据库缺少字段 数据库表 `study_question_bank` 缺少 `create_user_id` 字段。 ### 情况2:字段值为空 题库存在,但 `create_user_id` 字段为 `NULL`。 ### 情况3:用户ID不匹配 题库的 `create_user_id` 与当前登录用户的ID不一致。 ## 🔧 快速修复步骤 ### 第1步:打开数据库客户端 使用 Navicat、DataGrip 或命令行连接到数据库。 ### 第2步:检查表结构 ```sql SHOW COLUMNS FROM study_question_bank LIKE 'create_user_id'; ``` **如果没有结果**,说明缺少字段,执行: ```sql ALTER TABLE study_question_bank ADD COLUMN create_user_id BIGINT(20) NULL COMMENT '创建人ID(教师ID)' AFTER question_count; ``` ### 第3步:查找你的用户ID ```sql SELECT user_id, user_name, nick_name FROM sys_user WHERE user_name = 'admin'; -- 替换为你的登录用户名 ``` 记住返回的 `user_id`,例如:**1** ### 第4步:自动修复题库关联 ```sql -- 方法A:根据创建者用户名自动关联 UPDATE study_question_bank b INNER JOIN sys_user u ON b.create_by = u.user_name SET b.create_user_id = u.user_id WHERE b.create_user_id IS NULL; ``` **或者**手动设置: ```sql -- 方法B:手动设置为你的用户ID UPDATE study_question_bank SET create_user_id = 1 -- ⚠️ 替换为你的实际用户ID WHERE create_user_id IS NULL; ``` ### 第5步:验证修复 ```sql -- 查询你的题库(替换用户ID) SELECT id, bank_name, subject_name, question_count, create_user_id, create_time FROM study_question_bank WHERE create_user_id = 1 -- ⚠️ 替换为你的用户ID ORDER BY create_time DESC; ``` **如果有结果,说明修复成功!** ### 第6步:刷新前端页面 1. 刷新浏览器 2. 进入【考试管理】→【创建考试】 3. 选择出题方式为【从题库抽取】 4. 下拉框应该能看到题库了 ## 📝 详细诊断脚本 我已经创建了两个SQL脚本: 1. **`检查题库问题.sql`** - 完整的诊断脚本 2. **`修复题库导入问题.sql`** - 一步步的修复方案 请按顺序执行SQL语句,根据实际情况选择合适的修复方法。 ## ⚠️ 注意事项 ### 关键字段说明 | 字段 | 说明 | 重要性 | |------|------|--------| | `create_user_id` | 创建者的用户ID | ⭐⭐⭐ 必须有 | | `create_by` | 创建者的用户名 | 用于自动关联 | | `question_count` | 题目数量 | 如果不准确会影响显示 | ### 执行SQL的注意事项 1. **备份数据**:执行UPDATE前先备份数据库 2. **确认用户ID**:确保使用正确的用户ID 3. **测试验证**:修复后用验证SQL确认结果 ## 🚀 预防措施 ### 后端代码已修复 Controller 中新增题库时会自动设置 `create_user_id`: ```java @PostMapping public AjaxResult add(@RequestBody StudyQuestionBank questionBank) { questionBank.setCreateBy(getUsername()); questionBank.setCreateUserId(getUserId()); // ✓ 已添加 return toAjax(questionBankService.insertQuestionBank(questionBank)); } ``` ### 今后创建题库 后端代码已经修复,**今后新建的题库会自动关联用户ID**,不会再出现这个问题。 ## 🆘 如果仍然无法解决 ### 检查清单 - [ ] 数据库表有 `create_user_id` 字段 - [ ] 题库的 `create_user_id` 不为空 - [ ] 题库的 `create_user_id` 与当前登录用户ID一致 - [ ] 题库中有题目(`question_count > 0`) - [ ] 浏览器控制台无错误 - [ ] 已清除浏览器缓存 ### 调试方法 1. **查看浏览器控制台** - 打开开发者工具 (F12) - 查看 Network 标签 - 找到 `/study/questionBank/my-banks` 请求 - 查看返回的数据是否为空 2. **查看后端日志** ``` Study-Vue-redis/ry-study-admin/logs/sys-info.log ``` 搜索 "my-banks" 或 "questionBank" 3. **手动测试接口** ```bash # 使用 Postman 或浏览器访问 http://192.168.137.1:30091/study/questionBank/my-banks ``` ## 📌 总结 **根本原因**:题库的 `create_user_id` 字段为空或不匹配 **快速修复**:运行 `修复题库导入问题.sql` 中的SQL **预防措施**:后端代码已修复,新建题库会自动关联用户 --- 如有任何问题,请查看SQL脚本中的详细说明或联系技术支持。