2012-03-26 39 views
0

我有這樣的代碼:獲取MySQLSyntaxErrorException?

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 

誰能幫助我解決我的問題?

回答

2

check是一個保留字。用反引號括起來:`check`

+0

Thanx先生工作! – Navdroid 2012-03-26 06:57:32

3

基本上:不要這樣構建你的SQL。我注意到你已經把引號放在了「插入」SQL語句中的值的周圍 - 但不是在「select」中。這是問題的開始 - 但是您不應該在SQL中包含像這樣的值來開始。您應該通過PreparedStatement使用參數化的SQL,併爲參數設置值。優點:

  • 您可以更容易地看到您的實際SQL,因此您將能夠發現語法錯誤。 (這基本上是保持你的代碼從您的數據是分開的。)
  • 非常重要)你會不會開到SQL injection attacks
  • 你不會需要擔心的數字,日期和時間等的轉換問題

在SQL其他問題(如空格和check是MySQL中的reserved word),但你應該修復第一件事情是你如何使用值。在你這樣做之前,你的代碼是,邀請安全問題。

(你應該再開始使用更爲方便的變量名比T_STUDENT_NAME等,但是這是一個不同的問題。)

+0

thanx的烏爾意見先生! – Navdroid 2012-03-26 06:57:16

1

試試這個

SELECT COUNT(*) as 'check' FROM recordstudent.... 

,而不是

SELECT COUNT(*) as check FROM recordstudent.... 

我認爲檢查是一個關鍵字

+0

Thanx先生它的工作原理 – Navdroid 2012-03-26 06:57:54

相關問題