pstmt = conn.prepareStatement("select * from TBM_STUDENT where STUDENT_NO =?");
pstmt.setString(1,sno)
rs = pstmt.executeQuery();其中sno是传进来的String:"004",这样执行后为什么检索不到?将问号改成‘004’试一下是可以检索的。为什么会出现这样的情况?

解决方案 »

  1.   

      prepareStatement st=new prepareStatement();
      st.SetInt(); //表示是int 参数
      st.SetString() //是String 参数 
     你确定你参数是String 类型的吗?
      

  2.   

    我确定 debug的时候一步一步看的,我从键盘输入的,传进去是“004”
      

  3.   

    补充一下, 我用的是Oracle的数据库,这个应该没有什么关系吧
      

  4.   

    STUDENT_NO 是varchar型的吗,感觉不太可能出这种问题啊
      

  5.   

    有点妖.先不传,写死setString(1,"004");看看
      

  6.   

    我试了一下,写死也不对,写成setString(1,"004 ");就可以了,就是后面要有一个空格.
    这也是预编译语句的好处,它会首先检传入的参数的合法性,认为004不满足char(4).
    其实真正执行SQL时是可以通过的,但在预编译语句还没有执行SQL前参数检查就已经拦截掉了.
      

  7.   

    char 在db中是定长的,你怎么不用varchar呢?