public boolean add(StudentAddAction stu){

String sql = " INSERT INTO student(name,sex,birthday,address,emailNum,telephone,departmentId,majorId,gybh) " +
     " values(?,?,?,?,?,?,?,?,?)"; boolean b = false;
PreparedStatement stmt = null;
try {
    stmt = con.prepareStatement(sql);
    stmt.setString(1, stu.getName());
    stmt.setString(2, stu.getSex());
    stmt.setString(3, stu.getBirthday());
    stmt.setString(4, stu.getAddress());
    stmt.setString(5, stu.getEmailNum());
    stmt.setString(6, stu.getTelephone());
    stmt.setString(7, stu.getDepartmentId());
    stmt.setString(8, stu.getMajorId());
    stmt.setString(9, stu.getGybh());
b = stmt.execute();
if(b){
System.out.println("操作成功!"+b);
}else {
System.out.println(b);
}
} catch (SQLException e) {
e.printStackTrace();
if(stmt!=null){
try {
stmt.close();//关闭statement对象链接
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
return b;
}

解决方案 »

  1.   

    boolean execute()
                    throws SQLException在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。一些特别处理过的语句返回多个结果,execute 方法处理这些复杂的语句,executeQuery 和 executeUpdate 处理形式更简单的语句。 
    execute 方法返回一个 boolean 值,以指示第一个结果的形式。必须调用 getResultSet 或 getUpdateCount 方法来检索结果,并且必须调用 getMoreResults 移动到任何后面的结果。 
    返回:
    如果第一个结果是 ResultSet 对象,则返回 true;如果第一个结果是更新计数或者没有结果,则返回 false 
      

  2.   

    2楼的,直接就是复制API嘛,哎。
      

  3.   

    int i=stmt.executeUpdate();
    if(i>0){
    //插入成功
    }else{
    //失败
    }
      

  4.   

    直接到数据库中看一下,或者用再执行一条jdbc语句查看一下不就知道是不是执行成功了
      

  5.   

        执行execute(),会返回boolean值,如果是true表示你执行的是查询(select)操作,如果是false,表示你执行的是更新操作啊(即DDL和DML语句啊)
        如果执行过程中,没有出异常信息,就表示插入成功啊,同时也可以利用异常来提示插入失败的,比如,你这个可以这样写啊:public void add(StudentAddAction stu){ //返回空就可以了                String sql = " INSERT INTO student(name,sex,birthday,address,emailNum,telephone,departmentId,majorId,gybh) " +
        " values(?,?,?,?,?,?,?,?,?)";         boolean b = false;
    PreparedStatement stmt = null;
    try {
        stmt = con.prepareStatement(sql);
        stmt.setString(1, stu.getName());
        stmt.setString(2, stu.getSex());
        stmt.setString(3, stu.getBirthday());
        stmt.setString(4, stu.getAddress());
        stmt.setString(5, stu.getEmailNum());
        stmt.setString(6, stu.getTelephone());
        stmt.setString(7, stu.getDepartmentId());
        stmt.setString(8, stu.getMajorId());
        stmt.setString(9, stu.getGybh());
        b = stmt.execute();
    } catch (SQLException e) {
        System.out.println("插入失败");//如果插入失败,就会执行catch子句啊,可在这提示插入失败
    }finally{ //关闭对象应该放在finally里,因为不管操作成功与否,都应该关
    if(stmt!=null){
    try {
    stmt.close();//关闭statement对象链接
    } catch (SQLException e1) {
    e1.printStackTrace();
    }
    }
    if(con!=null){//con连接也应该关的,且关时,应该遵循先开的后关原则啊,否则会报异常
    try {
    con.close();//关闭statement对象链接
    } catch (SQLException e2) {
    e2.printStackTrace();
    }
    }
    }
    }
      

  6.   

    楼上的还真细心 呵呵 资源关闭我确实放错地方。con.close();我放在一个单独的方法里面了。
    现在问题是我需要一个标识来判断插入是否成功,如果成功我给request里面放ok,如果不成功放fail
    目前我用executeUpdate()方法来代替 返回的是int
    execute() 就不能来判断吗?我在网上找了很多 还是没有相关的方法。
    有没有谁知道怎么用一楼给的getResultSet 或 getUpdateCount ?
      

  7.   

        呵呵,execute()返回的是一个boolean值,代表两种不同的操作啊,getResultSet()返回的是结果集,而getUpdateCount()返回的是更新的记录书,我觉得你真得有必要标志插入是否成功的话,那就没必要execute(),再getResultSet()了,直接if(stmt.executeUpdate()>0){
      b=true;
    }else b=false;
    return b
      

  8.   

    谢谢一楼的。学习了。。原来是这么回事。。一直以为执行成功返回true,失败返回 false,many Thank !哈哈。
      

  9.   

    如果可以的话,换成executeUpdate()吧! 判断结果>=1执行成功,否则失败!!