public static void deleteUser(User user) {
        // TODO Auto-generated method stub
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            String sql = "delete from testuser where userid=?";
            System.out.println(sql+" ");
            conn = JDBCUtils.getInstance().getConnection();//获得数据库连接
            stmt = conn.prepareStatement(sql);
            stmt.setString(1, user.getUserid());//设置条件
            int i = stmt.executeUpdate();//删除的记录条数
            System.out.println("i = " + i);
        } catch (SQLException e) {
            e.printStackTrace();
        } 
    }
然后在main方法中如此调用  User user = new User();
        user.setUserid("100003");
                user.setName("hh");
        user.setBirthday(new Date());
        user.setMoney(1000000);
        deleteUser(user);
数据表如下create table TESTUSER
(
  USERID   CHAR(20) primary key,
  NAME     VARCHAR2(20) not null,
  BIRTHDAY DATE,
  MONEY    NUMBER(10,2)
);
create sequence seq_userid  start with 100001 increment by 1 nocycle;
控制台打印的i值总是0,可是数据库中有‘100003’这条记录,查看了数据库,的确没删掉,各位大虾帮忙!!!新手很纠结啊。

解决方案 »

  1.   

    USERID CHAR(20) primary key,
    char的长度是固定的,比如说,你定义了char(20),即使你你插入abc,不足二十个字节,数据库也会在abc后面自动加上17个空格,以补足二十个字节;  
    nvarchar和nvarchar2是长度不固定的  
    nvarchar不区分中英文,比如说:你定义了nvarchar(20),你可以存入20个英文字母/汉字或中英文组合,这个20定义的是字符数而不是字节数将USERID 字段改成VARCHAR2试试吧  
      

  2.   

    你从stmt获得sql语句看看对不对。如果对,那将“=”改为 like 试试
      

  3.   

    "delete * from testuser where userid=?";试试
      

  4.   

    你试一下,把catch后面加上一个试试finally {
                JdbcUtils.free(rs, stmt, conn);
            }
      

  5.   

    你可以试试 delete from testuser where username=?,来验证下面说的是否正确。
    看看是否执行。另外,数据库是否是自动提交的。
      

  6.   

    没删了?难道是开启了setAutoCommit(false)了?
      

  7.   

    用事务:要不就 setAutoCommit(true);不过最好还是自己控制 事务的提交吧。
      

  8.   

    setAutoCommit(false)
    请检查这个
      

  9.   


    的确如你所说,改成varchar2可以,谢谢