在注册新用户的时候需要填入邮箱地址,就会出现这样的错(输入时我填的数据是[email protected])
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]第 1 行: '@111' 附近有语法错误。
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSExecuteRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)
at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.postImplExecute(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.executeUpdateInternal(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.executeUpdate(Unknown Source)
at db.userregister.registeruser(userregister.java:86)
at org.apache.jsp.register.controller_jsp._jspService(controller_jsp.java:104)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
相关的函数是
 public boolean registeruser(String username,String userpwd,String introduce,String email)
  {
  
  try
      {
   Class.forName(driver);
   Connection con=DriverManager.getConnection(url,user,dbpassword);
   String query="insert into commonuser(username,userpwd,duty,introduce,email) values ("+username+","+userpwd+","+"'common'"+","+introduce+","+email+")";

   Statement stmt=con.createStatement();   
   stmt.executeUpdate(query);   
  return true;
      }    
    
  catch(SQLException e)
      {
     e.printStackTrace();
      }
    catch(ClassNotFoundException e)
      {
     e.printStackTrace();
      }
 return false;
  }
谢谢大家,我需要你们的帮助

解决方案 »

  1.   

    @是不是特殊的字符 你把 email 换成 不包括@的 字符串试试看看 如果不报错再如下 111\\@111.com 这样试试或者用PreparedStatement 来设置参数
      

  2.   

    String query="insert into commonuser(username,userpwd,duty,introduce,email) values ("+username+","+userpwd+","+"'common'"+","+introduce+","+email+")";
    把email两边加上''试试
      

  3.   

    @ 应该是 sqlserver里面的特殊字符 用来定义变量的你在每个@ 前面加上 \\这样转义一下看看
      

  4.   

    我输入111\\@111.com  后错误变成了
    java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]第 1 行: '\' 附近有语法错误。
    at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
    at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
    at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
    at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
    at com.microsoft.jdbc.sqlserver.tds.TDSExecuteRequest.processReplyToken(Unknown Source)
    at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)
    at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)
    at com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown Source)
    at com.microsoft.jdbc.base.BaseStatement.postImplExecute(Unknown Source)
    at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
    at com.microsoft.jdbc.base.BaseStatement.executeUpdateInternal(Unknown Source)
    at com.microsoft.jdbc.base.BaseStatement.executeUpdate(Unknown Source)
    at db.userregister.registeruser(userregister.java:86)
    at org.apache.jsp.register.controller_jsp._jspService(controller_jsp.java:104)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    at java.lang.Thread.run(Thread.java:595)
    原来@是特殊字符,能有什么思路解决这个问题,谢谢各位了
      

  5.   

    不行,输入111\@111.com 后,错误还是
    java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]第 1 行: '\' 附近有语法错误。
      

  6.   

    错误是
    java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]在此上下文中不允许使用 '[email protected]'。此处只允许使用常量、表达式或变量。不允许使用列名。
    谢谢各位了
      

  7.   

    用了PreparedStatement之后,输入111@111.错误是
    java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]第 1 行: '@111' 附近有语法错误。
    at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
    at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
    at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
    at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
    at com.microsoft.jdbc.sqlserver.tds.TDSExecuteRequest.processReplyToken(Unknown Source)
    at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)
    at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)
    at com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown Source)
    at com.microsoft.jdbc.base.BaseStatement.postImplExecute(Unknown Source)
    at com.microsoft.jdbc.base.BasePreparedStatement.postImplExecute(Unknown Source)
    at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
    at com.microsoft.jdbc.base.BaseStatement.executeInternal(Unknown Source)
    at com.microsoft.jdbc.base.BasePreparedStatement.execute(Unknown Source)
    at db.userregister.registeruser(userregister.java:91)
    at org.apache.jsp.register.controller_jsp._jspService(controller_jsp.java:104)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    at java.lang.Thread.run(Thread.java:595)
    代码改成了
     public boolean registeruser(String username,String userpwd,String introduce,String email)
      {
      
      try
          {
       Class.forName(driver);
       Connection con=DriverManager.getConnection(url,user,dbpassword);
       String query="insert into commonuser(username,userpwd,duty,introduce,email) values ("+username+","+userpwd+","+"'common'"+","+introduce+","+email+")";
        PreparedStatement  stmt=con.prepareStatement(query);  
       stmt.execute();
      return true;
          }    
        
      catch(SQLException e)
          {
         e.printStackTrace();
          }
        catch(ClassNotFoundException e)
          {
         e.printStackTrace();
          }
     return false;
      }
      

  8.   

    String query="insert into commonuser(username,userpwd,duty,introduce,email) values ("+username+","+userpwd+","+"'common'"+","+introduce+",?)";
        PreparedStatement  stmt=con.prepareStatement(query);  
                 stmt.setString(1,"[email protected]");
                  
    这样改 要你用pre 是要你帮定参数 
      

  9.   

    我看了JDK文件上面讲PreparedStatement.setString 这个方法讲的有点模糊,能给我具体讲讲吗?谢谢interpb(新年快乐@曾曾胡,深怕情多累美人!!!) !
      

  10.   

    就是你的sql 里面有几个问号 然后setString setInt等等方法给这些问号赋值
      

  11.   

    stmt.execute();
    换成 stmt.executeUpdate();
      

  12.   

    很不好意思,改成stmt.executeUpdate();后
    输入用户名为111时没有错误,而输入ye时发生了错误
    java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]在此上下文中不允许使用 'ye'。此处只允许使用常量、表达式或变量。不允许使用列名。
    而且数据库中的email 的值全是[email protected]了,
    真的很麻烦你,谢谢