自己开发的一个论坛,在回复帖子时,页面次序为从帖子列表list.jsp中进入relist.jsp,relist.jsp中发表回复信息在recheck.jsp确认,回复成功的话response.sendRedirect回到relist.jsp,这是页面流程,但当第一次回复后(成功),第二次继续回复信息时就出现异常,是在recheck.jsp确认信息时出现的,异常发生在以下两句
String sql="insert into rearticle(articleId,reauthor,repostdate,reContent,blockName) values('"+articleId+"','"+username+"','"+repostdate+"','"+recontent+"','"+blockname+"')";
int value=stmt.executeUpdate(sql);  //这一句出现异常
异常信息为
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 '66'','harryzyp','2006-11-18 10:39:36','asdfa','JSP')' at line 1
小弟实在没办法,如果给出全代码,我估计没人看贴了,所以问题只能这么笼统的说这些,如果有人遇到过同样问题那就更好不过了,而且更希望高手能帮我分析下错误的可能原因,万分感谢...

解决方案 »

  1.   

    等了好多天了,依然没人帮忙,但还是希望兄弟能拉一把,我把问题再清一遍,把错误贴出来,上面我说了一大堆可能没耐心看,错误是
    exception 
    javax.servlet.ServletException: 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 
    root cause
    com.mysql.jdbc.exceptions.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 
    root cause这个好像是说驱动的问题
    我以前查过有人也遇到这样的问题,说是版本的问题,所以我试过了两个结合
    Tomcat5.5+mysql5.0(以前的)
    Tomcat5.0.12+mysql4.1(现在的)   都出现同样的错误
    等待中。
      

  2.   

    我也不明白,66是articleId(int)的,后面两个引号也不知道为什么,这是发生的异常,我在二楼也贴出来了错误
    但我不明白的是,我第一发贴能成功,第二次怎么就不行了呢,郁闷
      

  3.   

    如果第一次回复成功,第二次回复就出现问题的话,很可能是数据库表的字段中有唯一性的限制只要能回复成功,就说明驱动能正常工作
    唯一.. 意思说换字段名?
    但这个错误com.mysql.jdbc.exceptions.MySQLSyntaxErrorException又好像是说驱动问题
      

  4.   

    不是,是比如articleId是唯一的话,第一个回复编号是66可以成功回复,第二个回复编号也是66的时候就产生了重复,无法保存到数据库里了如果articleId字段是auto_increment的话,那么就不允许重复
      

  5.   

    我这个表是个回复主题表(rearticle),关键字是rearticleId(int)autoincrement,articleId也是int的,但只是一个普通的字段,不是关键字
      

  6.   


    楼主你的论坛的发言文本框怎么写的,怎么样能实现把用户的输入格式也保存到数据库,是转成
    html标签吗??谢谢了(最好给个代码看看)
      

  7.   

    SQL是不是拼的有问题应该过滤下字符吧否则在回复的时候我直接填写66'肯定会出问题的
      

  8.   

    66不是我SQL语句里面的
    我把SQL语句再发一下
    String sql="insert into rearticle(articleId,reauthor,repostdate,reContent,blockName) values('"+articleId+"','"+username+"','"+repostdate+"','"+recontent+"','"+blockname+"')";我感觉SQL语句应该没错,如果有错的话,第一次回复怎么能成功呢?
    qiaodajun() 这位兄弟说的是不是要识别空格跟换行的这些东西啊?
      

  9.   

    SQL语句我已经贴出来了,再重复一下咯
    String sql="insert into rearticle(articleId,reauthor,repostdate,reContent,blockName) values('"+articleId+"','"+username+"','"+repostdate+"','"+recontent+"','"+blockname+"')";
    回qiaodajun的,这个其实很简单的,插入的时候不用变换,取出的时候按下面变换就行了String content="";
    String temp=null;
    temp=rearticle.getString("articleContent");
    for(int m=0;m<temp.length();m++)
    {
    if(temp.charAt(m)=='\n')
    content+="<br>&nbsp;&nbsp;&nbsp;&nbsp;";
    else
    content+=temp.charAt(m);
    }
      

  10.   

    SQL语句我已经贴出来了,再重复一下咯
    String sql="insert into rearticle(articleId,reauthor,repostdate,reContent,blockName) values('"+articleId+"','"+username+"','"+repostdate+"','"+recontent+"','"+blockname+"')";
    //----------
    你这也叫打印出的sql语句?
      

  11.   

    错在sendRedirect吧?
    可能是你在页面重定向的时候,request里面有些关于被回复文章的数据已经不存在了,所以在生成SQL语句的时候,有些COLUMN就为空了,因此报了SQL语法错误.你不要用重定向,改成转发试试.
      

  12.   

    把拼好的SQL显示出来才有用的主要看看是不是生成出的结果有问题既然第1次能成功那么就表示SQL可能是没有问题的
      

  13.   

    把SQL语句打出来看,然后分别把SQL复制了到mysql中去试,这个应该是语法错误。
    用system.out.pringln(sql);看日志里两次的SQL有什么区别,没区别的话分别放到mysql中去试就知道什么问题了
      

  14.   

    经过好好研究,现在确定问题的根源了,错误出现在一个很简单的传参问题上
    我的response.sendRedirect("relist.jsp?articleId='"+articleId+"'&type='"+type+"'");
    这一句有问题,同时有两个参数时应该不是这样写,因为我发现地址栏出现
    http://localhost:8080/haxinbbs/relist.jsp?articleId='1'&type='normal'
    这样的,也就是兄弟们都说的都了'号但现在我还是不知道应该怎么写,articleId,type都是String类型的变量
      

  15.   

    用forward就可以了.
    或者是:response.sendRedirect("relist.jsp?articleId="+articleId+"&type="+type);
      

  16.   

    用forward就可以了.
    或者javascript:history.go(-1)
    response.sendRedirect("relist.jsp?articleId=<%=request.QueryString("articleId")%>&type=<%=request.QueryString("type")%>")
      

  17.   

    http://localhost:8080/haxinbbs/relist.jsp?articleId='1'&type='normal'这里不需要加'的因为传过来都是按照字符取的