这是jsp文件中的部分,试过从command line直接运行该语句,可以成功,但是奇怪的是在jsp文件中却不行.而且我试过增加(insert into values)可以,删除也可以(delete from where).请问这是什么原因呢??
if(request.getParameter("aid")!=null)
{
String text=Bytes(request.getParameter("respon1"));
sql="update comment set response="+text+" where comment_id="+request.getParameter("aid");
stmt.executeUpdate(sql);
out.print("<script>alert('回复修改成功!');window.location='ma_comment.jsp';</script>");
}
if(request.getParameter("res")!=null)
{
String text=Bytes(request.getParameter("respon2"));
sql="update pages set name="+text+" where id="+request.getParameter("res");
stmt.executeUpdate(sql);
String aid=request.getParameter("res");
out.print("<script>alert('回复成功!');window.location='ma_comment.jsp';</script>");
}

解决方案 »

  1.   

    "update comment set response="+text+" where comment_id="+request.getParameter("aid");
    这个变量两边对于 字符串这些需要加 单引号。

    "update comment set response='"+text+"' where comment_id="+request.getParameter("aid");
      

  2.   

    "update comment set response='"+text+"' where comment_id='"+request.getParameter("aid") + "'";
    如果还不对,把你拼的SQL打印出来在数据库中执行以下看是否正确。
    应该是where条件的问题。
    或者看一下stmt.executeUpdate(sql);的返回值。
      

  3.   

    谢谢楼上的两位.我从sql的那个dos客户端里执行过,结果是可以的,楼上的楼上说的结果要怎么查看啊?能给我说说么?我是新手,谢谢了!
      

  4.   

    我想了想,应该不是where条件的问题,因为如果是where条件的问题的话sql语句应该找不到相应的字段才对,而不是把字段变里的数据成了null....我是这么分析的,大的来说可能有两方面有问题:
    1.mysql故障--已经解除了用命令行运行过并且从命令行以及mysqlfront里面看到了结果
    2.程序本身有故障
    (1)数据+text+有问题---但是应用同样的变量用insert命令可以成功,所以应该不是+text+的问题
    (2)后面的where条件的问题---能够把相应字段的数据变成null,所以也应该不是这个的问题....
    请大家帮我看看我这么想有没有错,谢谢大家了!
      

  5.   

    刚才又弄了一下,数据库掉不出来了,在comandline里面一输入密码就自动关闭了,奇怪的现象.准备去找别的电脑试试
      

  6.   

    String sql = "update comment set response='"+text+"' where comment_id='"+request.getParameter("aid") + "'";System.err.println("sql = " + sql);//结果copy到数据库中执行int cnt = stmt.executeUpdate(sql);System.err.println("cnt = " + cnt );// 看看结果是不是为0,如果为0就是没成功
    是否有设置con.setAutoCommit(false);
    如果设置了必须手动提交con.commit();
      

  7.   

    楼上的朋友,我怀疑是数据库的问题,所以我重新安装了mysql5.5.在这之后我试了试你的代码,中间出现了一个错误
    org.apache.jasper.JasperException: Unable to compile class for JSP: An error occurred at line: 22 in the jsp file: /admin/ma_comment.jsp
    Duplicate local variable sql
    19: if(request.getParameter("aid")!=null)
    20: {
    21: String text=Bytes(request.getParameter("respon1"));
    22: String sql = "update comment set response='"+text+"' where comment_id='"+request.getParameter("aid") + "'";
    23: System.err.println("sql = " + sql);//结果copy到数据库中执行
    24: int cnt = stmt.executeUpdate(sql);
    25: System.err.println("cnt = " + cnt );// 看看结果是不是为0,如果为0就是没成功
    Stacktrace:
    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:97)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:457)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:378)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:644)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:358)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    上网查了查说是原因可能是有两个局部变量String sql但是找了找并没有
    于是我把String去掉,去掉之后接着运行了.和以前一样,没有别的什么反应.我在javabean里面看了看并没有设置con.setAutoCommit(false);
    我把javabean和整个程序附上给你来看看吧.
    -----------------------------------<-javabean->------------------------------------
    package test.db;
    import java.io.*;
    import java.sql.*;
    public class DatabaseCon  {
      public Connection con;
      public String dbDriver="org.gjt.mm.mysql.Driver";
      public String URL = "jdbc:mysql://localhost:3306/thec";
      public String Message;
      public Statement stmt=null;
      public boolean connection()   {
        try{
          Class.forName(dbDriver);
        }
        catch(ClassNotFoundException ex){
          Message=ex.getMessage();
          System.exit(-1);
        }
        try{
            con = DriverManager.getConnection(URL,"root","1");
           return true;
        }
        catch(SQLException ex){
          Message=ex.getMessage();
          return false;
        }
      }
      
      public ResultSet exeSQL( String sqlstr)   {
      try{
      con = DriverManager.getConnection(URL,"root","1");
          stmt=con.createStatement();
          ResultSet rs=stmt.executeQuery(sqlstr);
          return rs;
       } catch(Exception ex){
        Message=ex.getMessage();
     }
      return null;
     }
      public String getString(ResultSet rs,String str){
       try{
       return rs.getString(str);
       }catch(Exception ex){
       Message=ex.getMessage();
       }
       return null;
      }
      public boolean close(){
        try{
         con.close();
              return true;
        }
         catch(Exception ex){
              Message=ex.getMessage();
              return false;
          }
      }
     }
    --------------------<-conn.jsp->------------------------------------
    <%@ page import="java.sql.*"%> 
    <jsp:useBean id="dbBean" scope="session" class="test.db.DatabaseCon" />
    <%
    //String filename=getServletConfig().getServletContext().getRealPath("/mybook/inc/db.mdb");
    //String strurl="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ="+filename; 
    //Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    dbBean.connection();
    Connection conn= dbBean.con; 
    Statement stmt=conn.createStatement();
    String sql; 
    ResultSet rs; 
    %> 
      

  8.   

    ------------------------------------<jsp程序页面>----------------------------
    <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>查看和修改</title>
    <style type="text/css">
    <!--
    body,td,th {
    font-size: 12px;
    }
    -->
    </style></head>
    <%@ include file="../inc/conn.jsp"%>
    <%@ include file="../inc/format.jsp"%>
    <link href="../style1.css" rel="stylesheet" type="text/css" />
    <body>
    <%
    //修改操作
    if(request.getParameter("aid")!=null)
    {
    String text=Bytes(request.getParameter("respon1"));
    sql = "update comment set response='"+text+"' where comment_id='"+request.getParameter("aid") + "'";
    System.err.println("sql = " + sql);//结果copy到数据库中执行
    int cnt = stmt.executeUpdate(sql);
    System.err.println("cnt = " + cnt );// 看看结果是不是为0,如果为0就是没成功
    //out.print(request.getParameter("abook"));
    //out.print(request.getParameter(aid));
    //out.print(catename);
    out.print("<script>alert('回复修改成功!');window.location='ma_comment.jsp';</script>");
    }
    //添加操作
    if(request.getParameter("res")!=null)
    {
    String text=Bytes(request.getParameter("respon2"));
    sql="update pages set name='"+text+"' where id="+request.getParameter("res");
    stmt.executeUpdate(sql);
    String aid=request.getParameter("res");
    //out.print(request.getParameter("abook"));
    //out.print(request.getParameter(aid));
    //out.print(catename);
    out.print("<script>alert('回复成功!');window.location='ma_comment.jsp';</script>");
    }
    //删除操作
    if(request.getParameter("delid")!=null)
    {
    sql="delete from comment where comment_id="+request.getParameter("delid");
    //out.print(sql);
    stmt.executeUpdate(sql);
    out.print("<script>alert('评论删除成功!');window.location='ma_comment.jsp';</script>");
    }%>
    <%
      int intPageSize; //一页显示的记录数
      int intRowCount; //记录总数 
      int intPageCount; //总页数 
      int intPage; //待显示页码 
      String  strPage,lei; 
      int i; 
     // 设置一页显示的记录数 
     intPageSize =10; 
     //取得待显示页码 
    strPage = request.getParameter("page"); 
    lei = request.getParameter("Cateid"); //图书类别
    String Cateid=lei;
    if(lei==null){lei="1";}
    //while(rs.next()){
    if(strPage==null){
    //表明在QueryString中没有page这一个参数,此时显示第一页数据 
     intPage = 1; 
      } else{
      //将字符串转换成整型 
      intPage = java.lang.Integer.parseInt(strPage); 
      }if(intPage< 1){
      intPage = 1; 
      }
      dbBean.connection();
      Statement selstmt =dbBean.con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
      //sql="select * from tushumingxi where lieID="+Cateid;
      sql="select * from comment";
     // String sort=request.getParameter("sort");
     // if(sort!=null){
    //  sql="select * from tushumingxi where lieID="+Cateid+" order by "+request.getParameter("sort")+" desc";
        // sql="select * from tushumingxi where lieID="+Cateid;
    // out.print("select * from tushumingxi where lieID="+Cateid+" order by "+request.getParameter("sort")+" desc");
     //  sql="select * from tushumingxi where [lieID]=["+Cateid+"] order by ["+sort+"] desc";
     //      }
       rs=selstmt.executeQuery(sql);
     
      
      
    //获取记录总数 
    rs.last(); 
    intRowCount = rs.getRow(); 
    //记算总页数 
    intPageCount = (intRowCount+intPageSize-1)/intPageSize; 
    //调整待显示的页码 
    if(intPage>intPageCount) intPage = intPageCount; 
    if(intPageCount>0){ 
    //将记录指针定位到待显示页的第一条记录上 
    rs.absolute((intPage-1) * intPageSize+1); 
    //显示数据 
    }
    i = 0; 
    //rs.next();
    //while(i<intPageSize && !rs.isAfterLast()){ %>
    <table width="97%" border="0" cellspacing="0" cellpadding="0" align="center" ID="Table11">
    <tr>
    <td class="s" align="center" height="28" valign="bottom" width="200"><font color="#000099">&nbsp;搜索结果共:[<font color="#000099"> <%=intRowCount%></font> ]条</font></td>
    <td width="546" height="28" align="right" class="s">
    <table border="0" class="s" ID="Table12">
    <form action="" method="post" ID="Form1">
    <tr>
    <td>&nbsp;<a href="ma_comment.jsp?Cateid=<%=Cateid%>"><font color="#003399">首页</font></a>
      <%if(intPage>1){%><a href="ma_comment.jsp?Cateid=<%=Cateid%>&page=<%=intPage-1%>">
       <font color="#003399">上一页</font></a>
      <%}%>
       <%if(intPage<intPageCount){%><a href="ma_comment.jsp?Cateid=<%=Cateid%>&page=<%=intPage+1%>">
    <font color="#003399">下一页 </font></a>
       <%}%>
    <a href="ma_comment.jsp?Cateid=<%=Cateid%>&page=<%=intPageCount%>"><font color="#003399">尾页</font></a><font color="#003399"> 页次:<font color="red"><%=intPage%>/<%=intPageCount%></font>页&nbsp; &nbsp;每页<font color="#FF0000"><%=intPageSize%></font>条  
    &nbsp;&nbsp;跳转页</font>
    <input name="page" size="4" style="BACKGROUND-COLOR: #f9fcff; BORDER-BOTTOM: #5f98e7 1px solid;  BORDER-LEFT: #5f98e7 1px solid; BORDER-RIGHT: #5f98e7 1px solid; BORDER-TOP: #5f98e7 1px solid; FONT-SIZE: 9pt"
    onMouseOver="this.focus()" onFocus="this.select()" maxlength="10" ID="Text1">
      <input type="submit" name="submit" value="GO" ID="Submit1">   </td>
    </tr>
    </form>
    </table>   </td>
    </tr>
    </table>
    <%
    while(i<intPageSize && !rs.isAfterLast()){
    String categoryid=rs.getString("comment_id");
    String thers=Bytes(request.getParameter("response"));
    %>
    <table width="95%" border="0" align="center" cellpadding="0" cellspacing="0" style="border:1px solid #B7B7B7;">
      <tr>
        <td width="80%" height="1" bgcolor="#FF00FF"></td>
      </tr>
      <tr>
        <td height="25" bgcolor="#E7E7E2"><span class="bt">&nbsp;&nbsp;&nbsp;[用户]:<%=rs.getString("user")%></span></td>
        <td height="25" bgcolor="#E7E7E2">
    <a href="ma_comment.jsp?delid=<%=categoryid%>"><font color="#FF0000">[ 删 除 ]</font></a> </td> <td height="25" bgcolor="#E7E7E2">
    <a href="ma_comment.jsp?creat=<%=categoryid%>"><font color="#FF0000">[ 回 复 ]</font></a> </td>
      </tr>
      <tr>
        <td  colspan="2">&nbsp; &nbsp;[内容]:&nbsp;
    <%=rs.getString("atext")%> </td>
    <td  colspan="2">&nbsp; &nbsp;[日期]:&nbsp;
    <%=rs.getString("date")%> </td>
      </tr> 
        <tr>
        <td  colspan="2">&nbsp; &nbsp;[回复]:&nbsp;
    <%=rs.getString("response")%> </td>
      </tr> 
      
      <tr>
      <td><%if(request.getParameter("thers")==null && (request.getParameter("creat")!=null) && (request.getParameter("creat").equals(categoryid))){%>
        <textarea name="respon2" cols="75" rows="5" wrap="physical" id="respon2"></textarea></td>
      <td><a href="ma_comment.jsp?res=<%=categoryid%>">更 新</a> <a href='ma_comment.jsp'>取 消</a></td>
      <%}%>
    </tr>
    <tr> 
    <td><textarea name="respon1" cols="75" rows="5" wrap="physical" ID="respon1"><%=rs.getString("response")%></textarea>
     <td><a href="ma_comment.jsp?aid=<%=categoryid%>">更 新</a> <a href='ma_comment.jsp'>取 消</a></td>
     </td>
    </tr>
    </table> <%i++;
    rs.next();
    }
    %></body>
    </html>
    非常感谢你对我的帮助~~
      

  9.   

    楼上的朋友,我怀疑是数据库的问题,所以我重新安装了mysql5.5.在这之后我试了试你的代码,中间出现了一个错误
    org.apache.jasper.JasperException: Unable to compile class for JSP:  An error occurred at line: 22 in the jsp file: /admin/ma_comment.jsp
    Duplicate local variable sql
    19: if(request.getParameter("aid")!=null)
    20: {
    21: String text=Bytes(request.getParameter("respon1"));
    22: String sql = "update comment set response='"+text+"' where comment_id='"+request.getParameter("aid") + "'";
    23: System.err.println("sql = " + sql);//结果copy到数据库中执行
    24: int cnt = stmt.executeUpdate(sql);
    25: System.err.println("cnt = " + cnt );// 看看结果是不是为0,如果为0就是没成功
    Stacktrace:
     org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:97)
     org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
     org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:457)
     org.apache.jasper.compiler.Compiler.compile(Compiler.java:378)
     org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
     org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
     org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:644)
     org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:358)
     org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
     org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
     javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    上网查了查说是原因可能是有两个局部变量String sql但是找了找并没有
    于是我把String去掉,去掉之后接着运行了.和以前一样,没有别的什么反应.我在javabean里面看了看并没有设置con.setAutoCommit(false);这样行不行?
      

  10.   

    你还是没明白我的意思23: System.err.println("sql = " + sql);//结果copy到数据库中执行
    24: int cnt = stmt.executeUpdate(sql);
    25: System.err.println("cnt = " + cnt );// 看看结果是不是为0,如果为0就是没成功23行会输出sql,把它的内容copy在数据库中执行,看是否修改成功
    25行会输出cnt,看是不是0
      

  11.   

    实在抱歉,楼上的朋友,因为我做的这个网站jsp用的比较简单所以一直没有用eclipse而是在用dreamweaver.我上网查了查你给我的那两个指令,是在myeclipse的console下能看到返回值....但是现在我的myeclipse连接tomcat的时候总是说连接不上,端口被占用...所以也没有办法测试....对不住啊,我正在努力的把eclipse弄好
      

  12.   

    那是因为你tomcat已经开启了,把那个关闭了先。tomcat有热加载呢,不用每次修改完代码就重启。直接刷新页面就可以了
      

  13.   

    恩恩,现在成功了
    结果是这样子的,应该是text变量的传递出了问题,我去看看,谢谢你!!
    sql = update comment set response='null' where comment_id='1'
    cnt = 1
    ???????????????????ínull
    ???????????????????ínull
      

  14.   

    呵呵,如果不是有你在理我,我可能早就放弃不干了,真的谢谢你用自己的时间帮助我解决问题.
    现在虽然是有突破了,至少是能确定问题就发生在程序里,但是问题依旧是解决不了,我在同一个页面(和上面的jsp文件不一样)使用中一样的传递方式,但是insert的可以成功,update却是成功不了。我这个是从书上摘下来的代码然后自己更改的,刚才从网上下载了源代码试了试,好像源代码也是不行。同样是insert无压力,update不行.
    sql = insert into pages(name,highLevelID,pageurl) values('测试',0,'aaaaa')
    cnt = 1
    sql = update pages set name='null',pageurl='null' where id=22
    ???????????????????ínull
    ???????????????????ínull
    cnt = 1
    具体代码如下
    我把两个都按照你说的加上了system.err.println的代码。
    -----------------------------------------------------------------------
    //添加操作
    if(request.getParameter("Submit")!=null)
    {
    String catename=Bytes(request.getParameter("BigClassName1"));
    String pageurl=Bytes(request.getParameter("BigClassName2"));
    String highid=request.getParameter("BigClassID");
    sql="insert into pages(name,highLevelID,pageurl) values('"+catename+"',"+highid+",'"+pageurl+"')";
    System.err.println("sql = " + sql);//结果copy到数据库中执行
    int cnt = stmt.executeUpdate(sql);
    System.err.println("cnt = " + cnt );// 看看结果是不是为0,如果为0就是没成功
    stmt.executeUpdate(sql);
    out.print("<script>alert('添加栏目类别成功!');window.location='ma_pages.jsp';</script>");
    }//修改操作
    if(request.getParameter("aid")!=null)
    {
    String catename=Bytes(request.getParameter("pagename"));
    String pageurl=Bytes(request.getParameter("pageurl"));
    sql="update pages set name='"+catename+"',pageurl='"+pageurl+"' where id="+request.getParameter("aid");
    System.err.println("sql = " + sql);//结果copy到数据库中执行
    int cnt = stmt.executeUpdate(sql);
    System.err.println("cnt = " + cnt );// 看看结果是不是为0,如果为0就是没成功
    stmt.executeUpdate(sql);
    String aid=request.getParameter("aid");
    //out.print(request.getParameter("abook"));
    //out.print(request.getParameter(aid));
    //out.print(catename);
    out.print("<script>alert('栏目类别修改成功!');window.location='ma_pages.jsp';</script>");
    }
    ---------------------------------------------------------
    变量:
    insert的
    <td width="148" align="center"><input name="BigClassName1" type="text" id="BigClassName1" size="15"></td>
             <td width="104" height="20" align="center">子栏目连接:</td>
    <td width="148" align="center"><input name="BigClassName2" type="text" id="BigClassName2" size="30"></td>
    <td height="20" colspan="4" bgcolor="#FFFFFF"><input type="submit" name="Submit" value="确 认" >        </td>
    update的
    <input name="pagename" type="text" id="name" value="<%=rs.getString("name")%>" size="15">
    <input name="pageurl" type="text" id="url" value="<%=rs.getString("pageurl")%>" size="15">
      &nbsp;&nbsp;<a href="ma_pages.jsp?aid=<%=hid%>">更 新</a> <a href='ma_pages.jsp'>取 消</a>
    这个问题如果实在看不出来的话就算了吧,这个真的很有可能是我的电脑的事情,我换个电脑再试试吧。前几天就想这么做了,但是同学的电脑也不幸悲剧了(不过是别的问题)。最后还想说一句对于jsp,dreamweaver真是弱爆了,楼上的朋友,再次感谢你!