public void delEmp(String ename) throws SQLException, ClassNotFoundException {  String name = "test4";  String sql = "delete from emp where ename=?";  Db db = new Db();  Connection con = db.getCon();  PreparedStatement ps = null;    ps = con.prepareStatement(sql);  ps.setString(1, name);   ps.executeUpdate();  con.commit();  if(ps != null){   ps.close();  ps = null;  con.close();  con = null;  }  }  复制代码我的目的是使用rs.setString(1,name)用name替换上面sql语句中的占位符,但是试了语句执行完了,但是数据库中的内容还在。  反复的试,最后试出如果直接把test4写入sql语句中是可以成功的  哪位高手能帮忙看看!!!
  
  

解决方案 »

  1.   

    ps.setString(1, name);
    不清楚setString的第一个参数下标是从0开始还是从1开始的?
    没有怎么用过jdbc。你确认一下看看!
      

  2.   

    你的表结构中ename是char(N)型的吧。
    这样,用setString肯定有问题。
    解决办法,一是使用varchar(N)。
    二是,如你所说,拼sql
    三是,使用另一个API, ((OraclePreparedStatement)pstmt).setFixedCHAR(1, name);详情见我的短文:
    http://hi.baidu.com/hexiong/blog/item/9b716b60404d1d48ebf8f884.html
      

  3.   

    我用你的代码执行没错呀。我估计你程序执行连接的DB和你查看的DB不是同一个
      

  4.   

    唯一有可能的就是emp中的ename字段是一个像char(N)这样的定长字段类型。就有可能出那样的错。这是oracle的一个特性。
      

  5.   

    嗯,iihero说的对。
    楼主,试一下"delete from emp where trim(ename)=?"吧
      

  6.   

    你带入的参数是干什么用的 ename?
    难道不是 ps.setString(1, ename);吗?
    是从 1开始啊   你的问题我没碰过..
      

  7.   

    我试了一下,这个,结果可以了。
    我在数据库里面它是char
    然后在myeclipse对它的定义是 long
    试了一下
    ps=ct.prepareStatement("select * from goods where trim(goodsId)=?");
    ps.setString(1,id);
    rs=ps.executeQuery();
    问题解决
    谢谢啊。
    这个问题今天困扰了一个晚上。