public boolean doCreate(Emp emp) throws Exception {
boolean flag = false;
PreparedStatement pstmt = null;
String sql = "INSERT INTO emp(empno,ename,job,hiredate,sal,comm,photo) VALUES (?,?,?,?,?,?,?)";
try {
                           pstmt = this.conn.prepareStatement(sql);
String sql2 = "SELECT empno FROM emp WHERE empno='"+emp.getEmpno()+"'" ;
pstmt = this.conn.prepareStatement(sql2);
ResultSet rs = stmt.executeQuery() ;
if(rs.next()){
return false;
}else{
pstmt.setInt(1, emp.getEmpno());
pstmt.setString(2, emp.getEname());
pstmt.setString(3, emp.getJob());
pstmt.setDate(4, new java.sql.Date(emp.getHiredate().getTime()));
pstmt.setFloat(5, emp.getSal());
pstmt.setFloat(6, emp.getComm());
pstmt.setString(7, emp.getPhoto());
int count = pstmt.executeUpdate(); // 执行更新,返回更新的记录数
if (count > 0) {
flag = true;
}
}
} catch (Exception e) {
throw e;
} finally {
try {
pstmt.close();
} catch (Exception e) {
}
}
return flag;
}
上例报“java.sql.SQLException: 无效的列索引”问题,改为下面的顺序后,问题解决public boolean doCreate(Emp emp) throws Exception {
boolean flag = false;
PreparedStatement pstmt = null;
String sql = "INSERT INTO emp(empno,ename,job,hiredate,sal,comm,photo) VALUES (?,?,?,?,?,?,?)";
try {
String sql2 = "SELECT empno FROM emp WHERE empno='"+emp.getEmpno()+"'" ;
Statement stmt = this.conn.createStatement();
ResultSet rs = stmt.executeQuery(sql2) ;
if(rs.next()){
return false;
}else{
pstmt = this.conn.prepareStatement(sql);
pstmt.setInt(1, emp.getEmpno());
pstmt.setString(2, emp.getEname());
pstmt.setString(3, emp.getJob());
pstmt.setDate(4, new java.sql.Date(emp.getHiredate().getTime()));
pstmt.setFloat(5, emp.getSal());
pstmt.setFloat(6, emp.getComm());
pstmt.setString(7, emp.getPhoto());
int count = pstmt.executeUpdate(); // 执行更新,返回更新的记录数
if (count > 0) {
flag = true;
}
}
} catch (Exception e) {
throw e;
} finally {
try {
pstmt.close();
} catch (Exception e) {
}
}
return flag;
}

解决方案 »

  1.   

    //这样应该没错吧,都使用绑定变量,可读性更好一些
    public boolean doCreate(Emp emp) throws Exception {
    boolean flag = false;
    PreparedStatement pstmt = null;
    try {
    String sql2 = "SELECT empno FROM emp WHERE empno=:empno";
    pstmt = this.conn.prepareStatement(sql2);
    pstmt.setInt(1, emp.getEmpno());
    ResultSet rs = stmt.executeQuery();
    if (rs.next()) {
    return false;
    } else {
    String sql = "INSERT INTO emp(empno,ename,job,hiredate,sal,comm,photo) VALUES (?,?,?,?,?,?,?)";
    pstmt = this.conn.prepareStatement(sql);
    pstmt.setInt(1, emp.getEmpno());
    pstmt.setString(2, emp.getEname());
    pstmt.setString(3, emp.getJob());
    pstmt.setDate(4, new java.sql.Date(emp.getHiredate().getTime()));
    pstmt.setFloat(5, emp.getSal());
    pstmt.setFloat(6, emp.getComm());
    pstmt.setString(7, emp.getPhoto());
    int count = pstmt.executeUpdate(); // 执行更新,返回更新的记录数
    if (count > 0) {
    flag = true;
    }
    }
    } catch (Exception e) {
    throw e;
    } finally {
    try {
    pstmt.close();
    } catch (Exception e) {
    }
    }
    return flag;
    }