做了如下测试:
Statement st cnt.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);--15万数据
ResultSet rs = st.executeQuery(SQL);
long x =0;
while (rs.next())
   x += rs.getString("yq01").length();--------------------------------
Statement st cnt.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);--15万数据
odbc = 164328
jdbc = 105515
jtds = 3343cnt.createStatement(); --15万数据
odbc = 2907
jdbc = 2859
jtds = 1094
--------------------------------
因为有个项目用户用了一年半以后,登录系统极慢,要5分钟才能登录(汗),因为在主界面要处理很多业务数据,所以....,其实代码也很有问题,但用了一年半了不想动代码了.这个项目是用ODBC做的数据连接看了上面的心中狂喜,以为找到救世主了.马上换了jtds
谁知登录还是要5分钟...为什么单个select语句性能这么好,整体就这么烂?
我用"事件跟踪器"查看了主要的SQL语句执行时间,其实与ODBC执行的时间一样了,差不了多少!
以为

解决方案 »

  1.   

    是不是用prepare 要好些,分批取数据,不才,没用过,
      

  2.   

    不会啊,我觉得JTDS比微软自带的好用啊,我没有发现象你这样的问题
      

  3.   

    我的项目是主要用了这种模式的
    cnt.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);li_guang(李广) :
       是不是你的数据量不大?
      

  4.   

    你就单独写一个class,以你的登录sql为对象.
    分别用这两种驱动试试看
      

  5.   

    终于找到原因了,如果只读取一小段记录时,区别不大的:Statement st cnt.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);--15万数据
    ResultSet rs = st.executeQuery(SQL);
    long x =0 , i = 0;
    //只取前100条
    while (rs.next() && i++ <100)
    x += rs.getString("yq01").length();--------------------------------
    Statement st cnt.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);--15万数据光用ResultSet读取数据的时间
    odbc = 1204       
    msJdbc = 1062     
    jdbc_jtds = 1282  
    pool = 1188       由创建连接,到读取数据,再关连接时间
    odbc = 1391           
    jdbc = 1500           
    jtds = 1750           
          
    cnt.createStatement(); --15万数据
    光用ResultSet读取数据的时间
    read -->odbc = 94
    read -->msJdbc = 234
    read -->jdbc_jtds = 109由创建连接,到读取数据,再关连接时间
    odbc = 344  -- ODBC的性能怎么....?
    jdbc = 11578
    jtds = 11484