本帖最后由 Rabsia 于 2013-07-24 18:28:22 编辑

解决方案 »

  1.   

    问题一:
    很大概率是 OracleJDBC 驱动问题,也许要去官网上重新找个 Linux 版本的,另外要注意下JVM是32bit还是64bit。
    其实最好编译跟运行是完全相同的JDK,甚至运行在Linux的话,你就在Linux上进行编译是最安全的。问题二:
    不清楚,用别的语言,或者直接用SQLPlus试试看什么效果?
      

  2.   

    String umid = "0-1";
    String s = "DELETE FROM TZ_EXPORT_SQL WHERE ROW_ID = ?";
    PreparedStatement stmt = conn.prepareStatement(s);
    stmt.setString(1, umid);------->
    String umid = "0-1";
    String s = "DELETE FROM TZ_EXPORT_SQL WHERE ROW_ID =:umid";
    NamedParameterStatement p = new NamedParameterStatement(conn, s);
    p.setString("umid", umid);
    p.executeUpdate();

    第二个可能是有些字段长度、类型什么的有问题
      

  3.   

    JVM是32bit的
    在运行环境编译, 嗯这个可以去试试, 不过还是有问题, 下面会提到OracleJDBC驱动我也不知道要用哪个版本了, 这个运行环境很怪, 虽然在配置的JVM DLL路径里, -version显示是1.5的, 但是只有用1.4编译好的代码才能跑, 这就是我之前没法在运行环境编译的原因.但目前用的ojdbc14这个驱动在文档里显示是同时支持1.4和1.5的啊, 而且PrepareStatement可以用, 只有setInt, setString等方法不能用, 这个很费解SQLPlus试过了, 查询要列出全部结果集跟JDBC是同样的问题, 都是在那几个点卡住一小会
      

  4.   


    这个以前没有用过, 明天尝试下, 先在此谢过了, 可否告知出现这个问题的原因?要取结果集的表是一个扁平化表, 与其他几个表进行了一些关联操作. 执行不同查询的SQL语句表关联基本差不多. 如果是字段长度, 类型的问题, 按理说每个查询都该有类似的问题. 但其中一些操作的耗时又很少, 过程很流畅, 会否还有另外的原因呢?
      

  5.   

    For 1.5 的,可以到这里下载:
    http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html兼容性问题,很不好说。有时候换个运行环境的JDK版本,所有问题就消失了,真的碰到过这种情况。如果SQLPlus也是这种情况,说明是数据库层面的问题,跟程序无关了。
    这个很难猜测,也许跟数据存储块划分有关,建议请教Oracle数据库板块的同学。
    顺便问一句,查询条件所在字段建了索引么?
      

  6.   


    非常感谢, 由于运行环境可能同时在跑其他的服务, 所以换JDK不是太现实, 明天先换jdbc驱动试试. 不过我打算额外装一个jdk, 先看看是否这就是问题所在, 请问libjvm.so这个文件是做什么用的? 我还没在linux装过jdk
    查询字段是建了索引的.
    另外刚才看了下, 还得多问一句, NamedParameterStatement使用这个需要什么包么?
      

  7.   


    JDK直接提供,这个就是把 “?” 换成命名参数。
    “而把绑定变量换成直接拼字符串的形式就运行正常”
    有点好奇,你直接拼字符串最后形成的完整SQL啥样?
      

  8.   

    说错了,参见:http://m.oschina.net/blog/117633
      

  9.   

    完整SQL是这样:DELETE FROM TZ_EXPORT_SQL WHERE ROW_ID = '0-1'看到这个实现的泛型就觉得没戏了, 因为1.4还不支持泛型......
    而且, 粗略看了下, 好像底层实现还是用的PrepareStatement的方法?
      

  10.   


    非常感谢, 由于运行环境可能同时在跑其他的服务, 所以换JDK不是太现实, 明天先换jdbc驱动试试. 不过我打算额外装一个jdk, 先看看是否这就是问题所在, 请问libjvm.so这个文件是做什么用的? 我还没在linux装过jdk
    查询字段是建了索引的.
    另外刚才看了下, 还得多问一句, NamedParameterStatement使用这个需要什么包么?
    关于JDK,Linux下可以装多个的,然后Oracle用户下配置.cshrc环境变量,使用新的JDK。
      

  11.   


    非常感谢, 由于运行环境可能同时在跑其他的服务, 所以换JDK不是太现实, 明天先换jdbc驱动试试. 不过我打算额外装一个jdk, 先看看是否这就是问题所在, 请问libjvm.so这个文件是做什么用的? 我还没在linux装过jdk
    查询字段是建了索引的.
    另外刚才看了下, 还得多问一句, NamedParameterStatement使用这个需要什么包么?
    关于JDK,Linux下可以装多个的,然后Oracle用户下配置.cshrc环境变量,使用新的JDK。不是很可行, 因为在实际环境里往服务器配个JDK比较麻烦, 虽然如果能解决问题的话我也很想, 但是工作中不太可能这么做......
      

  12.   


    非常感谢, 由于运行环境可能同时在跑其他的服务, 所以换JDK不是太现实, 明天先换jdbc驱动试试. 不过我打算额外装一个jdk, 先看看是否这就是问题所在, 请问libjvm.so这个文件是做什么用的? 我还没在linux装过jdk
    查询字段是建了索引的.
    另外刚才看了下, 还得多问一句, NamedParameterStatement使用这个需要什么包么?
    关于JDK,Linux下可以装多个的,然后Oracle用户下配置.cshrc环境变量,使用新的JDK。不是很可行, 因为在实际环境里往服务器配个JDK比较麻烦, 虽然如果能解决问题的话我也很想, 但是工作中不太可能这么做......
    嗯,我们这边分配多个账户,对jdk的需求不一样,所以每个账户都单独安了一个jdk的,没用系统自带的。不晓得你们是啥情况呢,呵呵~