对于数据库来说2000条实在不能算多的  应该是其他原因
informix没有用过  不好说 :(

解决方案 »

  1.   

    是2000条数据,在preparestament中执行查询的时候,报出数据库共享内存不足拉!
      

  2.   

    数据库是informix数据库,2000条记录,
    执行 SELECT 需要使用 PraparedStatement??
    你开玩笑吧!!而且,数据库就down掉了!!(DOWN掉是什么意思??)
    数据库死掉了???
    看看有没有最新的JDBC驱动吧!老的INFORMAX JDBC 驱动不支持很多特性,
    例如, Statement.cancel, Statement.setQueryTimeOut() 等!现在广东移动计费业务基本上都是INFORMAX数据库,每天都至少 200多万条数据,都没有事情!
    当然,不是用的JDBC!(用的BDE)!
      

  3.   

    别老是怀疑人家说错了,爱用PraparedStatement select也没有错!说游标溢出我也遇到过,不国我是oracle,估计是JDBC驱动的问题,我比他的数据还少,大概就600条左右,后来我catch那个异常,重新链接查询一下就没有问题。
      

  4.   

    解决方法:
    1。设置数据库事务连接超时的时间;
    2。将记录拆分成小块,每次执行一小块(比如100条,可以用rownum限制),关闭数据库连接,再创建连接,再处理,依此类推。
    3。换个好的中间件。
    4。放弃该方法。
      

  5.   

    hesi726(hesi) 
    BDE 是什么东西?
      

  6.   

    程序是这样的
    public String GetCodeName(String code,String code_id)
    throws Exception
    {
    String restring=code;
    //System.out.println(code);
    //System.out.println(code_id);
    try
    {
    String getnameSQL ="";
    if (code_id.trim().equals("UC"))
    getnameSQL = "select dept_name from b_dept where dept_no='" + code.trim() + "'";
    else if (code_id.trim().equals("UD"))
    getnameSQL = "select post_name from b_position where post_no='" + code.trim() + "'";
    else if (code_id.trim().equals("A001"))
    getnameSQL = "select person_name from A001 where person_no ='" + code.trim() + "'";
    else
    getnameSQL = "select shortname from sys_codeitem where code='" + code.trim() + "' and code_id='" + code_id.trim() + "'";
    dbc.prepareStatement(getnameSQL);
    ResultSet Grs = dbc.executeQuery();
    //System.out.println(Grs);
    if (Grs.next())
    {
    restring = Grs.getString(1);
    }
    Grs.close();
    }
    catch (Exception es)
    {
    throw es;
    }
    return restring;
    }
    用的jdk是1。4,用的jdbc是2。0,还都是比较新的。应该说这个方法执行的东西不是很多,它是用来取一个代码的名字的,不过它是用在一个while循环中,循环中调用大概有2000条左右数据,我现在大概到160多条,informix 的数据库服务online就提示共享内存不足,不过现在开发用的数据哭服务器比较差,p4,128内存,resin,提示出错就是在dbc.prepareStatement(getnameSQL);
    ResultSet Grs = dbc.executeQuery();
    如果不用preparestatement,直接执行,那执行的效率太低了,半天出不来。
    请高手指点指点!
      

  7.   

    可能是物理内存小了,或者需要昨天看到一个网友说的是什么给数据库增加存储空间(好像是硬盘空间),对informix不太懂,gz并up中。
      

  8.   

    dbc.prepareStatement(getnameSQL); 这个方法你是怎么实现的?每一次都创建一个PrepareStatement?用完后有没有立即关闭呢?一个Connection创建PrepareStatement的个数是有限的,所以用完后立即关闭,具体个数视机器而定。