2015-11-01 33 views
-2

代碼:爲什麼PreparedStatement(JDBC)在MySQL 5.7.9中導致MySQLSyntaxErrorException?

package com.qapro.register; 

import java.io.IOException; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.sql.Timestamp; 

import java.util.ArrayList; 
import java.util.Date; 

import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpSession; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

@WebServlet("/RegisterMember") 
public class RegisterMember extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    public RegisterMember() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    } 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     String username = request.getParameter("username"); 
     String name = request.getParameter("name"); 
     String surname = request.getParameter("surname"); 
     String email = request.getParameter("email"); 
     String password = request.getParameter("password"); 

     Connection connection = null; 
     PreparedStatement preparedStatement = null; 

     try { 
      Class.forName("com.mysql.jdbc.Driver"); 

      String connectionUrl = "jdbc:mysql://localhost:3306/qapro?user=root&password=root"; 
      connection = DriverManager.getConnection(connectionUrl); 

      String userInsertSql = "INSERT INTO qapro.user (user_name, `password`, is_active, name, surname, email, insert_date) VALUES (?, ?, ?, ?, ?, ?, ?);"; 
      preparedStatement = connection.prepareStatement(userInsertSql); 

      preparedStatement.setString(1, username); 
      preparedStatement.setString(2, password); 
      preparedStatement.setBoolean(3, true); 
      preparedStatement.setString(4, name);   
      preparedStatement.setString(5, surname); 
      preparedStatement.setString(6, email); 
      preparedStatement.setTimestamp(7, new Timestamp(new Date().getTime())); 

      int affectedRowCount = preparedStatement.executeUpdate(userInsertSql); 
      if(affectedRowCount > 0) 
       System.out.println("User has been inserted succesfully"); 
      else 
       System.out.println("Error occurred while inserting user"); 

     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 

     finally{ 
      try { 
       preparedStatement.close(); 
       connection.close(); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
     }   
    } 

} 

<%@ page language="java" contentType="text/html; charset=UTF-8" 
 
    pageEncoding="UTF-8"%> 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
 

 
<html> 
 
\t <head> 
 
\t \t <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
 
\t \t <title>Title</title> 
 
\t </head> 
 

 
\t <body> 
 
\t 
 
\t \t <form action="RegisterMember" method="POST"> 
 
\t \t \t <fieldset> 
 
\t \t \t \t <legend>Log in!</legend> 
 

 
\t \t \t \t \t Username: <input type="text" name="username"></input> 
 
\t \t \t \t \t <br></br> 
 
\t \t \t \t \t Name: <input type="text" name="name"></input> 
 
\t \t \t \t \t <br></br> 
 
\t \t \t \t \t Surname: <input type="text" name="surname"></input> 
 
\t \t \t \t \t <br></br> 
 
\t \t \t \t \t Email: <input type="email" name="email"></input> 
 
\t \t \t \t \t <br></br> 
 
\t \t \t \t \t Password: <input type="password" name="password"></input> 
 
\t \t \t \t \t <br></br> 
 
\t \t 
 
\t \t \t \t \t <input type="submit" value="Submit"></input> 
 
\t \t \t \t \t 
 
\t \t \t </fieldset> 
 
\t \t </form> 
 
\t 
 
\t </body> 
 

 
</html>

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL語法錯誤;檢查對應於你的MySQL服務器版本正確的語法在1號線

My database

爲什麼會出現這種錯誤使用近「?,?,?)」的手冊? 即使發生此錯誤,我的數據庫正在更新。

+0

你如何檢查,如果你的JDBC驅動程序支持呢? 而我的rdbsm是MySQL,是的,我把它設置爲數據類型BIT –

+0

你可以通過閱讀驅動程序的文檔來檢查。 –

+0

什麼是您的MySQL(服務器)安裝的確切版本以及您正在使用的mysql-connector-xyz.jar的確切版本? – MWiesner

回答

0

您正在使用

int affectedRowCount = preparedStatement.executeUpdate(userInsertSql); 

嘗試和執行查詢,但不正確。你已經在.prepareStatement(userInsertSql)調用中使用userInsertSql,因此,所有你需要做的是

int affectedRowCount = preparedStatement.executeUpdate(); 
+1

傷心地給其他用戶,原來的錯誤已被編輯走了,所以它不適合問題本身的代碼了...: - | – MWiesner

相關問題