小弟做了个选课系统,前台JSP页面有“删除”按钮,点一下就相应的把课程信息从数据库中删除,后台用java写的逻辑,debug没错误,能走到sql语句,但是就是删除不了。我感觉是我的sql语句写的不对。希望大侠帮我改一下 谢谢啦~~~~~~~~~~~~~数据库里的课程表:
CREATE TABLE COURSE (
COURSE_ID   CHAR(6)     NOT NULL,
COURSE_NAME VARCHAR(40) NOT NULL,
TEACHER     VARCHAR(40) NOT NULL,
POINT       INT         NOT NULL,
TIME_1      CHAR(10)     NOT NULL,
TIME_2      CHAR(10)     NOT NULL,
LIMITED     INT         NOT NULL,
ROOM   VARCHAR(20) NOT NULL,
PRIMARY KEY (COURSE_ID) );选课表:
CREATE TABLE ELECTIVE (
USERNAME       VARCHAR(20)     NOT NULL,
COURSE_ID      CHAR(6)         NOT NULL,
PRIMARY KEY (USERNAME, COURSE_ID) );我的java逻辑如下:
    //为用户进行删除选课
    private synchronized boolean delCourse( String sUsername, String sCourseId ){
        //获得数据库连接
        Connection conn = this.getDBConnection();
        if ( conn == null ){
            return false;
        }
        Statement stmt = null;
        ResultSet rs = null;
        
        try{
            stmt = conn.createStatement();
            //尝试进行删除选课
            String sUpdateQuery = "delete from elective where course_id='" + sCourseId+ "' ";
            stmt.executeUpdate( sUpdateQuery );
            
            return true;
        }
        catch(Exception e){
            e.printStackTrace();
            return false;
        }
        finally{
            try{
                rs.close();
                stmt.close();
                conn.close();
            }
            catch(Exception ex){
            }
        }
    }

解决方案 »

  1.   

    DEBUG中看一下 
    sUpdateQuery的实际内容是什么。
      

  2.   

    stmt.executeUpdate( sUpdateQuery );
    这之后,可能需要commit
    conn.commit()
      

  3.   

    估计就两种情况了。 1. sCourseId 传值有问题。  2.事务没有提交。
      

  4.   


    我在后面加了conn.commit();但是出现如下错误代码,求指教。。
    java.sql.SQLException: Can't call commit when autocommit=true
    at com.mysql.jdbc.Connection.commit(Connection.java:2159)
    at cs.servlet.deleCourse.delCourse(deleCourse.java:75)
    at cs.servlet.deleCourse.doGet(deleCourse.java:39)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:879)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Unknown Source)
      

  5.   

    检查一下sCourseId的值是否正确吧!