通过PreparedStatement调用executeQuery时,sql语句和setString的值都没有问题,在plsql中可以查到,
但是执行ps.executeQuery()后,返回给ResultSet的值得不到,非常奇怪。
在rs中使用inspect查看,发现statement的bindchars只得到了主键的id值,剩下的都没有得到,请问rs里面看哪些变量更确切些。可以看到得到的结果。我想看看executeQuery里面的实现,谢谢,急等............

解决方案 »

  1.   

    返回给ResultSet的值得不到 这个就不知道你什么意思了,是指取到的getString的值不对?一般来说executeQuery你看了也没有什么用,这个是数据库厂商做的,基本的使用应该还是没有问题的。可能是你没有在PLSQL中提交事务?
      

  2.   

    你在plsql里执行有结果,用PreparedStatement没有结果,首先怀疑你传参是不是有问题,以前我也遇到过,那次是传的java.sql.Date类型的参数,死活没结果(plsql里用to_date查的有结果),后来烦了,就直接在sql里写了to_date方法,在PreparedStatement里传字符串,居然有结果了
      

  3.   

    难到查询也需要commit,再说我的connection里面已经设为autocommit为true了
      

  4.   

    我传的是string,在数据库中就是char类型的,参数传递的没有问题,使用其他的库测试没有问题
      

  5.   

    什么数据库
    给出SQL
    给出各个参数
    说明表结构
      

  6.   

     select * FROM xxx WHERE xxcd =?oracle数据库参数是string的1
      

  7.   

    没有报错或者什么的,比如说你那个?打成中文状态的了,数据源配置正确?链接的库是你在plsql上的那个库?
      

  8.   

      <pool name="sqlserver" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@localhost:1521:orcl" username="sq" password="sq" minConnection="1" maxConnection="100" timeoutValue="600000" waitTime="30000"/>你是说?会写成中文的?么,不会吧,这个应该是程序默认给的吧
      

  9.   

    rs = ps.executeQuery();
    int count = rs.getMetaData().getColumnCount();
    while (rs.next()) {
    Object[] row = new Object[count];
    for (int step = 0; step < count; step++) {
    row[step] = rs.getObject(step + 1);
    }
    results.add(row);
    }这样试一下。。
      

  10.   


      ps = getPreparedStatement(conn, selectQuery, values);
      rs = ps.executeQuery();
    private PreparedStatement getPreparedStatement(Connection conn, String query, Object fieldValues[]) {
    PreparedStatement ps = null;
    try {
    ps = conn.prepareStatement(query);
    if (fieldValues == null)
    return ps; int size = fieldValues.length;
    for (int i = 0; i < size; i++) {
    Object field = fieldValues[i];
    Object value = field;
    if (value instanceof Integer)
    ps.setInt(i + 1, ((Integer) value).intValue());
    else if (value instanceof java.sql.Date)
    ps.setDate(i + 1, (java.sql.Date) value);
    else if (value instanceof byte[])
    ps.setBytes(i + 1, (byte[]) (byte[]) value);
    else
    ps.setString(i + 1, (String) value);
    } } catch (SQLException e) {
    e.printStackTrace();
    }
    return ps;
    }说实话,贴代码没有什么意义,里面的值都已经set进去了
      

  11.   


    int count = rs.getMetaData().getColumnCount();
    System.out.println(">>>>>>"+count);
    do {
    if (!rs.next())
    break;这样试过了,count是2,这个应该是列的值吧,还是什么,但是到了rs.next那里就false了,也就是直接break了
      

  12.   

    count = rs.getMetaData()没有异常说明程序正常执行,rs.next()为false说明没有xxcd=1的数据,你还说在plsql里能查到数据,我真怀疑是不是同一个库啊
      

  13.   

     应该没有问题。你通过遍历,getString(1),getString(2)获取列内容看看有数据输出没。
      

  14.   

    断点跟踪试试,看看rs.getString(1)有值吗?
      

  15.   


    ps = conn.prepareStatement(query);
    那你的意思是说conn有问题么
      

  16.   

    java.sql.SQLException: 结果集已耗尽
      

  17.   

    oracle.jdbc.driver.OracleResultSetImpl@7544a6
    如果单检出就会报没有next
      

  18.   

    不用PreparedStatement进行查询呢? 确认语句的确能返回查询记录
    rs.next();返回的是false还是true呢?
    先用19L的方法获得参数看看
      

  19.   

    rs.next返回的是false,所以不能得到里面get的值
      

  20.   

    无语了,贴一下Plsql用的那个库的tnsname
    贴一下plsql里你用的查询语句以及查询结果
    在程序中直接试一下select * FROM xxx 看看有没有结果
      

  21.   

    我决的这边的程序有点问题,尤其是连数据库那块,前台是用extjs实现的 
      

  22.   

    sql不加where条件,不传参数看看页面返回结果对不对?
      

  23.   

    这些都试过,没有问题
    我这边前台是用的是extjs,可能和前台页面有关系,感觉很奇怪,因为删除别的表数据库可以删除,但是删除我的表的数据就是删不掉,也没有报错,而且execute了,并且用的都是同一个删除方法
      

  24.   

    引用 30 楼 dickli1986 的回复:sql不加where条件,不传参数看看页面返回结果对不对?这些都试过,没有问题
    我这边前台是用的是extjs,可能和前台页面有关系,感觉很奇怪,因为删除别的表数据库可以删除,但是删除我的表的数据就是删不掉,也没有报错,而且execute了,并且用的都是同一个删除方法
      

  25.   

    ps = conn.prepareStatement(query);后里面的语句是DELETE FROM ST_ST58_B WHERE STCD =?
    语句没有问题,参数是string,怎么会无法删除呢,使用的是executeUpdate();
    难道和conn有关系,还是需要改成手动提交