gpt4 book ai didi

java - 获取 MySQLSyntaxErrorException?

转载 作者:行者123 更新时间:2023-12-01 00:28:22 27 4
gpt4 key购买 nike

我有这段代码:

    String check="SELECT COUNT(*) as check FROM recordstudent WHERE STUDENT_ID="+T_STUDENT_ID+" AND COURSE_ID="+T_COURSE_ID+" AND PACKAGE_ID="+T_PACKAGE_ID+" AND ACTIVITY_ID="+T_ACTIVITY_ID+" AND DATE="+T_DATE+ ";";
rs=myStmt.executeQuery(check);
int ch=0;

while(rs.next()){

ch=Integer.parseInt(rs.getString("check"));
}

if(ch==0)
{

String insertRecord="insert into recordstudent"+
"(STUDENT_ID,COURSE_ID,PACKAGE_ID,ACTIVITY_ID,TEST_NAME,DATE,SCORE,TOTAL_MARKS,PERCENTAGE,CORRECT_ANSWER,TOTAL_QUESTIONS,STUDENT_NAME,SCORE_PER_DIVISION,ATTEMPTS)"+
"VALUES("+
"'"+T_STUDENT_ID+"',"+
"'"+T_COURSE_ID+"',"+
"'"+T_PACKAGE_ID+"',"+
"'"+T_ACTIVITY_ID+"',"+
"'"+T_TEST_NAME+"',"+
"'"+T_DATE+"',"+
"'"+T_SCORE+"',"+
"'"+T_TOTAL_MARKS+"',"+
"'"+T_PERCENTAGE+"',"+
"'"+T_CORRECT_ANSWERS+"',"+
"'"+T_TOTAL_QUESTIONS+"',"+
"'"+T_STUDENT_NAME+"',"+
"'"+T_SCORE_PER_DIVISION+"',"+
"'"+t+"'"
+");";

myStmt.execute(insertRecord);



}

此代码段应仅在 ch=0 时才将数据插入数据库。但我收到此错误:

      com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 
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
'check FROM recordstudent WHERE STUDENT_ID=11 AND COURSE_ID=2 AND PACKAGE_ID=11 A'
at line 1

谁能帮我解决我的问题?

最佳答案

从根本上说:不要以这种方式构建 SQL。我注意到您在“插入”SQL 语句中的值周围加上了引号——但在“选择”语句中没有。这就是问题的开始 - 但你不应该在你的 SQL 中包含像这样的值。您应该通过 PreparedStatement 使用参数化 SQL,并为参数设置值。好处:

  • 您可以更轻松地查看实际的 SQL,从而能够发现语法错误。 (这基本上是将您的代码与数据分开。)
  • (非常重要) 你不会公开给SQL injection attacks
  • 您无需担心数字、日期和时间等的转换问题

您的 SQL 中还有其他问题(例如空格和 check 在 MySQL 中是 reserved word),但首先要解决的问题 你应该解决的是你如何使用值(value)观。在您这样做之前,您的代码会引发安全问题。

(然后您应该开始使用比 T_STUDENT_NAME 等更传统的变量名称,但那是另一回事。)

关于java - 获取 MySQLSyntaxErrorException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9867597/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com