diff --git a/src/main/java/com/example/exam/exam/service/mysql/IMysqlLocalServiceImpl.java b/src/main/java/com/example/exam/exam/service/mysql/IMysqlLocalServiceImpl.java index 5a96f0c..8203737 100644 --- a/src/main/java/com/example/exam/exam/service/mysql/IMysqlLocalServiceImpl.java +++ b/src/main/java/com/example/exam/exam/service/mysql/IMysqlLocalServiceImpl.java @@ -238,14 +238,14 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService { if (table1Columns.equals(table2Columns)) { correctCount++; // 完全正确 - appendToFile(answerLogPath, "【执行】" + "【" + showCreateTableSql + "】【验证】【表】【" + tableName + "】【√】"); - judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】" + "【" + showCreateTableSql + "】【验证】【表】【" + tableName + "】【✅】"); + appendToFile(answerLogPath, "【执行】" + "【" + showCreateTableSql + "】【验证】【表】【" + tableName + "】【结果】【√】"); + judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】" + "【" + showCreateTableSql + "】【验证】【表】【" + tableName + "】【结果】【✅】"); SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList, total, answerLogPath, stuSQL, totalKeyScore, score, answerId, scoreTotal, judgementStr); scoreTotal += studentScorePojo.getScore(); judgementStr = studentScorePojo.getText(); } else { - appendToFile(answerLogPath, "【执行】 " + "【" + showCreateTableSql + "】【验证】【表】【" + tableName + "】【×】"); - judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 " + "【" + showCreateTableSql + "】【验证】【表】【" + tableName + "】【❌】"); + appendToFile(answerLogPath, "【执行】 " + "【" + showCreateTableSql + "】【验证】【表】【" + tableName + "】【结果】【×】"); + judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 " + "【" + showCreateTableSql + "】【验证】【表】【" + tableName + "】【结果】【❌】"); SourceAndText studentScorePojo = calculateTotalScoreRate(stuSQL, examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal, judgementStr); scoreTotal += studentScorePojo.getScore(); judgementStr = studentScorePojo.getText(); @@ -323,15 +323,15 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService { if (isEquivalent) { correctCount++; // 完全正确 - appendToFile(answerLogPath, "【执行】" + "【" + yanzheng + "】【验证】【表】【" + tableName + "】【√】"); - judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 " + "【" + yanzheng + "】【验证】【表】【" + tableName + "】【✅】"); + appendToFile(answerLogPath, "【执行】" + "【" + yanzheng + "】【验证】【表】【" + tableName + "】【结果】【√】"); + judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 " + "【" + yanzheng + "】【验证】【表】【" + tableName + "】【结果】【✅】"); SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList, total, answerLogPath, stuSql, totalKeyScore, score, answerId, scoreTotal, judgementStr); scoreTotal += studentScorePojo.getScore(); judgementStr = studentScorePojo.getText(); } else { - appendToFile(answerLogPath, "【执行】" + "【" + yanzheng + "】【验证】【表】【" + tableName + "】【×】"); - judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 " + "【" + yanzheng + "】【验证】【表】【" + tableName + "】【❌】"); + appendToFile(answerLogPath, "【执行】" + "【" + yanzheng + "】【验证】【表】【" + tableName + "】【结果】【×】"); + judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 " + "【" + yanzheng + "】【验证】【表】【" + tableName + "】【结果】【❌】"); SourceAndText studentScorePojo = calculateTotalScoreRate(stuSql, examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal, judgementStr); scoreTotal += studentScorePojo.getScore(); judgementStr = studentScorePojo.getText(); @@ -388,15 +388,15 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService { //累加删除语句的所有权值 examQuestionKeywords累加scorerate // appendToFile(answerLogPath, "验证通过:符合 DELETE 条件的记录已删除。"); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "验证通过:符合 DELETE 条件的记录已删除。"); - appendToFile(answerLogPath, "【执行】 " + "【" + verifySql + "】 【验证】 【表】 【" + tableName + "】【√】"); - judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 " + "【" + verifySql + "】 【验证】 【表】 【" + tableName + "】【✅】"); + appendToFile(answerLogPath, "【执行】 " + "【" + verifySql + "】 【验证】 【表】 【" + tableName + "】【结果】【√】"); + judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 " + "【" + verifySql + "】 【验证】 【表】 【" + tableName + "】【结果】【✅】"); SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList, total, answerLogPath, sql, totalKeyScore, score, answerId, scoreTotal, judgementStr); scoreTotal += studentScorePojo.getScore(); judgementStr = studentScorePojo.getText(); } else { - appendToFile(answerLogPath, "【执行】 " + "【" + verifySql + "】 【验证】 【表】 【" + tableName + "】【×】"); - judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 " + "【" + verifySql + "】 【验证】 【表】 【" + tableName + "】【❌】"); + appendToFile(answerLogPath, "【执行】 " + "【" + verifySql + "】 【验证】 【表】 【" + tableName + "】【结果】【×】"); + judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 " + "【" + verifySql + "】 【验证】 【表】 【" + tableName + "】【结果】【❌】"); SourceAndText studentScorePojo = calculateTotalScoreRate(null, examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal, judgementStr); scoreTotal += studentScorePojo.getScore(); judgementStr = studentScorePojo.getText(); @@ -498,15 +498,15 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService { // if (isEquivalent) { correctCount++; // 完全正确 - appendToFile(answerLogPath, "【执行】 " + "【" + selectSql + "】【验证】【表】【" + tableName + "】【√】"); - judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 " + "【" + selectSql + "】【验证】【表】【" + tableName + "】【✅】"); + appendToFile(answerLogPath, "【执行】 " + "【" + selectSql + "】【验证】【表】【" + tableName + "】【结果】【√】"); + judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 " + "【" + selectSql + "】【验证】【表】【" + tableName + "】【结果】【✅】"); SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList, total, answerLogPath, stuSql, totalKeyScore, score, answerId, scoreTotal, judgementStr); scoreTotal += studentScorePojo.getScore(); judgementStr = studentScorePojo.getText(); } else { - appendToFile(answerLogPath, "【执行】 " + "【" + selectSql + "】【验证】【表】【" + tableName + "】【×】"); - judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 " + "【" + selectSql + "】【验证】【表】【" + tableName + "】【❌】"); + appendToFile(answerLogPath, "【执行】 " + "【" + selectSql + "】【验证】【表】【" + tableName + "】【结果】【×】"); + judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 " + "【" + selectSql + "】【验证】【表】【" + tableName + "】【结果】【❌】"); SourceAndText studentScorePojo = calculateTotalScoreRate(stuSql, examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal, judgementStr); scoreTotal += studentScorePojo.getScore(); judgementStr = studentScorePojo.getText(); @@ -604,16 +604,16 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService { if (isEquivalent) { correctCount++; // 完全正确 - appendToFile(answerLogPath, "执行" + sql + "验证文件【" + fileName.get() + "】【√】"); - judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行" + sql + "验证文件【" + fileName.get() + "】【✅】"); + appendToFile(answerLogPath, "【执行】" + sql + "【验证】【文件】【" + fileName.get() + "】【结果】【√】"); + judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】" + sql + "【验证】【文件】【" + fileName.get() + "】【结果】【✅】"); //todo 得分 SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList, total, answerLogPath, String.valueOf(stuAnswer), totalKeyScore, score, answerId, scoreTotal, judgementStr); scoreTotal += studentScorePojo.getScore(); judgementStr = studentScorePojo.getText(); } else { - appendToFile(answerLogPath, "执行" + sql + "验证文件【" + fileName.get() + "】【×】"); - judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "执行" + sql + "验证文件【" + fileName.get() + "】【❌】"); + appendToFile(answerLogPath, "【执行】" + sql + "【验证】【文件】【" + fileName.get() + "】【结果】【×】"); + judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】" + sql + "【验证】【文件】【" + fileName.get() + "】【结果】【❌】"); SourceAndText studentScorePojo = calculateTotalScoreRate(String.valueOf(stuAnswer), examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal, judgementStr); scoreTotal += studentScorePojo.getScore(); judgementStr = studentScorePojo.getText(); @@ -687,7 +687,7 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService { } } else { appendToFile(answerLogPath, "【记录数】【" + result1.size() + "】【×】"); - judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【记录数】【" + result1.size() + "】❌"); + judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【记录数】【" + result1.size() + "】【❌】"); } } // 比较两个视图的结果 @@ -698,15 +698,15 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService { if (isEquivalent) { correctCount++; // 完全正确 - appendToFile(answerLogPath, "【执行】" + "【" + showCreateViewSql + "】【验证】【视图】【" + viewNam1 + "】 【√】"); - judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】" + "【" + showCreateViewSql + "】【验证】【视图】【" + viewNam1 + "】【✅】"); + appendToFile(answerLogPath, "【执行】" + "【" + showCreateViewSql + "】【验证】【视图】【" + viewNam1 + "】【结果】【√】"); + judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】" + "【" + showCreateViewSql + "】【验证】【视图】【" + viewNam1 + "】【结果】【✅】"); SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList, total, answerLogPath, stuSQL, totalKeyScore, score, answerId, scoreTotal, judgementStr); scoreTotal += studentScorePojo.getScore(); judgementStr = studentScorePojo.getText(); } else { - appendToFile(answerLogPath, "【执行】 " + "【" + showCreateViewSql + "】【验证】【视图】【" + viewNam1 + "】【×】"); - judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】" + "【" + showCreateViewSql + "】【验证】【视图】【" + viewNam1 + "】【❌】"); + appendToFile(answerLogPath, "【执行】 " + "【" + showCreateViewSql + "】【验证】【视图】【" + viewNam1 + "】【结果】【×】"); + judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】" + "【" + showCreateViewSql + "】【验证】【视图】【" + viewNam1 + "】【结果】【❌】"); SourceAndText studentScorePojo = calculateTotalScoreRate(stuSQL, examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal, judgementStr); scoreTotal += studentScorePojo.getScore(); judgementStr = studentScorePojo.getText(); @@ -783,7 +783,7 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService { if (StringUtils.isBlank(stuAnswer.get())) { SourceAndText sourceAndTextError = new SourceAndText(); appendToFile(answerLogPath, "考生SQL文件丢失或未作答,无法评分,得分:0.0【×】"); - judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "考生SQL文件丢失或未作答,无法评分,得分:0.0【×】"); + judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "考生SQL文件丢失或未作答,无法评分,得分:0.0【❌】"); sourceAndTextError.setText(judgementStr); sourceAndTextError.setScore(0.0); continue; @@ -813,16 +813,16 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService { if (flag) { correctCount++; // 完全正确 - appendToFile(answerLogPath, "【执行】" + extractCallStatements + "【验证】【文件】【" + fileName.get() + "】【√】"); - judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】" + extractCallStatements + "【验证】【文件】 【" + fileName.get() + "】【✅】"); + appendToFile(answerLogPath, "【执行】" + extractCallStatements + "【验证】【文件】【" + fileName.get() + "】【结果】【√】"); + judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】" + extractCallStatements + "【验证】【文件】 【" + fileName.get() + "】【结果】【✅】"); SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList, total, answerLogPath, stuAnswer.get(), totalKeyScore, score, answerId, scoreTotal, judgementStr); scoreTotal += studentScorePojo.getScore(); judgementStr = studentScorePojo.getText(); } else { - appendToFile(answerLogPath, "【执行】" + extractCallStatements + "【验证】【文件】【" + fileName.get() + "】【×】"); + appendToFile(answerLogPath, "【执行】" + extractCallStatements + "【验证】【文件】【" + fileName.get() + "】【结果】【×】"); - judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】" + extractCallStatements + "【验证】【文件】【" + fileName.get() + "】【❌】"); + judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】" + extractCallStatements + "【验证】【文件】【" + fileName.get() + "】【结果】【❌】"); //得分 SourceAndText studentScorePojo = calculateTotalScoreRate(stuAnswer.get(), examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal, judgementStr); scoreTotal += studentScorePojo.getScore(); @@ -906,7 +906,7 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService { Statement stmtstu = connstu.createStatement()) { if (StringUtils.isBlank(stuAnswer.get())) { SourceAndText sourceAndTextError = new SourceAndText(); - appendToFile(answerLogPath, "考生SQL文件丢失或未作答,无法评分,得分:0.0【√】"); + appendToFile(answerLogPath, "考生SQL文件丢失或未作答,无法评分,得分:0.0【×】"); judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "考生SQL文件丢失或未作答,无法评分,得分:0.0【❌】"); sourceAndTextError.setText(judgementStr); sourceAndTextError.setScore(0.0); @@ -949,23 +949,23 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService { boolean equals = normalizedTriggerSql1.equals(normalizedTriggerSql2); if (equals) { correctCount++; // 完全正确 - appendToFile(answerLogPath, "【文件】 【" + fileName.get() + "】【√】"); - judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【文件】 【" + fileName.get() + "】【✅】"); + appendToFile(answerLogPath, "【执行】"+answerSQL+"【验证】【文件】 【" + fileName.get() + "】【结果】【√】"); + judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】"+answerSQL+"【验证】【文件】 【" + fileName.get() + "】【结果】【✅】"); //todo 得分 SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList, total, answerLogPath, stuAnswer.get(), totalKeyScore, score, answerId, scoreTotal, judgementStr); scoreTotal += studentScorePojo.getScore(); judgementStr = studentScorePojo.getText(); } else { - appendToFile(answerLogPath, "【文件】 【" + fileName.get() + "】【×】"); - judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【文件】 【" + fileName.get() + "】【❌】"); + appendToFile(answerLogPath, "【执行】"+answerSQL+"【验证】【文件】 【" + fileName.get() + "】【结果】【×】"); + judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】"+answerSQL+"【验证】【文件】 【" + fileName.get() + "】【验证】【结果】【❌】"); SourceAndText studentScorePojo = calculateTotalScoreRate(stuAnswer.get(), examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal, judgementStr); scoreTotal += studentScorePojo.getScore(); judgementStr = studentScorePojo.getText(); } } else { - appendToFile(answerLogPath, "【文件】 【" + fileName.get() + "】【×】"); - judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【文件】 【" + fileName.get() + "】【❌】"); + appendToFile(answerLogPath, "【执行】"+answerSQL+"【验证】【文件】 【" + fileName.get() + "】【结果】【×】"); + judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】"+answerSQL+"【验证】【文件】 【" + fileName.get() + "】【结果】【❌】"); SourceAndText studentScorePojo = calculateTotalScoreRate(stuAnswer.get(), examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal, judgementStr); scoreTotal += studentScorePojo.getScore(); judgementStr = studentScorePojo.getText(); @@ -991,7 +991,7 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService { Matcher matcher = pattern.matcher(sql); if (!matcher.find()) { - throw new IllegalArgumentException("无法解析 UPDATE 语句"); + appendToFile(answerLogPath, "无法解析 UPDATE 语句"); } String tableName = matcher.group(1); @@ -1034,16 +1034,14 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService { // if (isEquivalent) { correctCount++; // 完全正确 - appendToFile(answerLogPath, "【执行】 " + "【" + selectSql + "】 【验证】 【表】 【" + tableName + "】【√】"); - - + appendToFile(answerLogPath, "【执行】 " + "【" + selectSql + "】 【验证】 【表】 【" + tableName + "】【结果】【√】"); + judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 " + "【" + selectSql + "】 【验证】 【表】 【" + tableName + "】【结果】【✅】"); SourceAndText studentScorePojo = accumulateScoreAndLog(examMysqlKeywordList, total, answerLogPath, sql, totalKeyScore, score, answerId, scoreTotal, judgementStr); scoreTotal += studentScorePojo.getScore(); judgementStr = studentScorePojo.getText(); } else { - - + judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "【执行】 " + "【" + selectSql + "】 【验证】 【表】 【" + tableName + "】【结果】【❌】"); if (answerListStu.size() >= 2) { List fieldMeta = answerListStu.get(0); List fieldValue = answerListStu.get(1); @@ -1052,19 +1050,18 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService { for (int i = 0; i < fieldMeta.size() && i < fieldValue.size(); i++) { columnInfo.put(fieldMeta.get(i), fieldValue.get(i)); } - String alterSQL = buildAlterFromShowColumn(tableName, columnInfo); - appendToFile(answerLogPath, "【执行】 " + "【" + selectSql + "】 【验证】 【表】 【" + tableName + "】【×】"); + appendToFile(answerLogPath, "【执行】 " + "【" + selectSql + "】 【验证】 【表】 【" + tableName + "】【结果】【×】"); SourceAndText studentScorePojo = calculateTotalScoreRate(alterSQL, examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal, judgementStr); scoreTotal += studentScorePojo.getScore(); judgementStr = studentScorePojo.getText(); + }else { + SourceAndText studentScorePojo = calculateTotalScoreRate(null, examMysqlKeywordList, totalKeyScore, score, answerId, scoreTotal, judgementStr); + scoreTotal += studentScorePojo.getScore(); + judgementStr = studentScorePojo.getText(); } - - } - } - } // //删除临时创建的数据库databaseName @@ -1076,22 +1073,21 @@ public class IMysqlLocalServiceImpl implements IMysqlLocalService { // stmt.executeUpdate(dropDbSql2); - } finally { - //删除临时创建的数据库databaseName - try (Connection conn = DriverManager.getConnection(newDbUrl, user, password); - Statement stmt = conn.createStatement()) { - String dropDbSql = "DROP DATABASE " + databaseName; - stmt.executeUpdate(dropDbSql); - System.out.println("删除临时库"); - } catch (SQLException e) { - e.printStackTrace(); - } } } appendToFile(answerLogPath, "共得分:" + String.format("%.2f", scoreTotal)); // judgementStr = HtmlAppender.appendHtmlLine(judgementStr, "共得分:" + String.format("%.2f", scoreTotal)); folderzip.delete(); deleteFolder(folder); + //删除临时创建的数据库databaseName + try (Connection conn = DriverManager.getConnection(newDbUrl, user, password); + Statement stmt = conn.createStatement()) { + String dropDbSql = "DROP DATABASE " + databaseName; + stmt.executeUpdate(dropDbSql); + System.out.println("删除临时库"); + } catch (SQLException e) { + e.printStackTrace(); + } // 全部题目处理完成后 if (correctCount == totalQuestions) { scoreTotal = score; // 全对,直接给满分 diff --git a/src/main/java/com/example/exam/exam/utils/mysql/MySQLExporterUtil.java b/src/main/java/com/example/exam/exam/utils/mysql/MySQLExporterUtil.java index 3195d7b..94f625b 100644 --- a/src/main/java/com/example/exam/exam/utils/mysql/MySQLExporterUtil.java +++ b/src/main/java/com/example/exam/exam/utils/mysql/MySQLExporterUtil.java @@ -17,7 +17,7 @@ public class MySQLExporterUtil { public MySQLExporterUtil(String databaseName, String user, String password,String outputFilePath) { this.databaseName = databaseName; - this.jdbcUrl = "jdbc:mysql://localhost:6033/" + databaseName + "?useSSL=false&serverTimezone=Asia/Shanghai"; + this.jdbcUrl = "jdbc:mysql://localhost:48086/" + databaseName + "?useSSL=false&serverTimezone=Asia/Shanghai"; this.user = user; this.password = password; this.outputFilePath = outputFilePath;