2012-03-26 12 views
0

Ich habe diesen Code:MySQLSyntaxErrorException erhalten?

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); 



    } 

Dieser Code-Schnipsel, die Daten in der Datenbank einfügen sollte nur, wenn die ch = 0 .Aber ich diese Störung erhalte:

 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 

Wer kann mir helfen und lösen meine Problem ?

Antwort

2

check ist ein reserviertes Wort. Surround mit Backticks: `check`

+0

Danke, das hat funktioniert! – Navdroid

3

Grundsätzlich: nicht bauen Sie Ihre SQL auf diese Weise. Ich bemerke, dass Sie die Werte in der SQL-Anweisung "insert" in Anführungszeichen gesetzt haben - aber nicht in "select". Das ist der Anfang des Problems - aber Sie sollten solche Werte in Ihrem SQL-Code nicht verwenden. Sie sollten parametrisierte SQL über PreparedStatement verwenden und Werte für die Parameter festlegen. Vorteile:

  • Sie können Ihr tatsächliches SQL einfacher sehen, so dass Sie Syntaxfehler erkennen können. (Dies hält grundsätzlich Code getrennt von Ihren Daten.)
  • (Sehr wichtig) Sie werden nicht geöffnet sein, um SQL injection attacks
  • Sie werden nicht über Konvertierungsprobleme für Zahlen, Daten und Zeiten kümmern müssen usw.

Es gibt andere Probleme in Ihrem SQL (wie Leerzeichen und check eine reserved word in MySQL ist), aber die allererste, was Sie beheben sollten, ist, wie Sie Werte verwenden. Bis Sie das getan haben, ist Ihr Code einladende Sicherheitsprobleme.

(Sie sollten dann mit konventionelleren Variablennamen als T_STUDENT_NAME usw. beginnen, aber das ist eine andere Sache.)

+0

Thanx für Ur Beratung Sir! – Navdroid

1

Versuchen Sie, diese

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

statt

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

Ich denke, Scheck ist ein Schlüsselwort

+0

Danke Sir, es funktioniert – Navdroid

Verwandte Themen