//统计student表中的男生数目
String sql1 = "select count(*) from student where banji=' "+banjijComboBox.getSelectedItem().toString()+" ' and xingbie='男'; " ;//统计student表中的女生数目
String sql2 = "select count(*) from student where banji='"+banjijComboBox.getSelectedItem().toString()+"' and xingbie='女';";//更新class中的男女数目的数据
String sql3 = "update class set nan="+tjnan+",nv="+tjnv+" where mingcheng='"+banjijComboBox.getSelectedItem().toString()+" ';";全的代码:
int tjnan=0,tjnv=0;     //定义男生数和女生数  
        //统计男生数量
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            String url1 = "jdbc:odbc:stu";
            Connection conn1 = DriverManager.getConnection(url1);
            Statement stat1 = conn1.createStatement();
            String sql1 = "select count(*) from student where banji=' "+banjijComboBox.getSelectedItem().toString()+" ' and xingbie='男'; " ;
            ResultSet rSet1=stat1.executeQuery(sql1);
            rSet1.next();
            tjnan=rSet1.getInt(1);
            jbjg.setText("统计男生数成功");
            conn1.close();
        } catch(java.lang.Exception exec) {
            jbjg.setText("统计男生数失败!");
        }
        
        //统计女生数
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            String url2 = "jdbc:odbc:stu";
            Connection conn2 = DriverManager.getConnection(url2);
            Statement stat2 = conn2.createStatement();
            String sql2 = "select count(*) from student where banji='"+banjijComboBox.getSelectedItem().toString()+"' and xingbie='女';";
            ResultSet rSet2=stat2.executeQuery(sql2);
            rSet2.next();
            tjnv=rSet2.getInt(1);
            jbjg.setText("统计女生数成功");
            conn2.close();
        } catch(java.lang.Exception exec) {
            jbjg.setText("统计女生数失败");
        }
        
        //修改班级中的男生和女生数
       try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            String url3 = "jdbc:odbc:stu";
            Connection conn3 = DriverManager.getConnection(url3);
            Statement stat3 = conn3.createStatement();
            String sql3 = "update class set nan="+tjnan+",nv="+tjnv+" where mingcheng='"+banjijComboBox.getSelectedItem().toString()+" ';";
            int rowCount =stat3.executeUpdate(sql3);
            if (rowCount>0 ){
                //jbjg.setText("修改班级中的男生和女生数-成功");
            }
            conn3.close();
        } catch(java.lang.Exception exec) {
              // jbjg.setText("修改班级中的男生和女生数-失败");
        }
        怎么改成合起来的阿!!
//统计男生数目
        String sql1 ="select count(*) from student where banji='"
                    +xuanzebanjijComboBox.getSelectedItem().toString()
                    +"'and xingbie='男';";
        //统计女生数目
        String sql2 ="select count(*) from student where banji='"
                    +xuanzebanjijComboBox.getSelectedItem().toString()
                    +"'and xingbie='女';";
        Connection conn = null;
          
        try {
            Class.forName(str);
            conn = DriverManager.getConnection(url);
            Statement stat = conn.createStatement();
            String sql = "update class set nan=(select count(*) from student where banji='"
                    +xuanzebanjijComboBox.getSelectedItem().toString()
                    +"'and xingbie='男';),nv=(select count(*) from student where banji='"
                    +xuanzebanjijComboBox.getSelectedItem().toString()
                    +"'and xingbie='女';) where mingcheng='"
                   + xuanzebanjijComboBox.getSelectedItem().toString()+"';";
            int rowCount =stat.executeUpdate(sql);
            if (rowCount >0){
                jbjg.setText("修改班级中的男女生数目成功!");
            }
            conn.close();
        }catch(Exception exec){
            jbjg.setText("修改班级中的男女生数目失败!");
        }

解决方案 »

  1.   

    在执行多个sql语句的时候需要在执行完一个语句之后对Statement执行close()方法,然后再执行下一个SQL语句。
      

  2.   

    update语句貌似不能这样合着些吧,求高人解答!
      

  3.   

    nan=(select count(*) from student where banji='"
    +xuanzebanjijComboBox.getSelectedItem().toString()
    +"'and xingbie='男';)
    你这个里面的分号有问题 去掉
      

  4.   

    绝对的可以!
    三次使用xuanzebanjijComboBox.getSelectedItem().toString()带入班级有些多余!
    为外部语句的表定义别名,内部子查询就可以直接使用:update class a set 
      nan=(select count(*) from student where banji=a.mingcheng and xingbie='男';),
      nv=(select count(*) from student where banji=a.mingcheng and xingbie='女';)
    where mingcheng=?
      

  5.   

    在执行多个sql语句的时候需要在执行完一个语句之后对Statement执行close()方法,然后再执行下一个SQL语句。
    是对的 
    但把sql合起来也是一条sql语句呀!
    update语句就可以这样写阿!
      

  6.   

    首先资源关闭不正常,应该是关闭了Statement之后再关闭Connection
    其次,你的sql语句检查下,最好先在DOC中测试下你的语句!
    以上仅供参考
      

  7.   

    我知道了,直接在access中测试sql语句得到结论:access不支持在update中嵌套select
    所以,那样写在access中不通过
    在大型数据库中是可以的
    例如:sql server