新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     >>计算机科学论坛<<     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论Java, J2SE, J2ME, J2EE, 以及Eclipse, NetBeans, JBuilder等Java开发环境,还有JSP, JavaServlet, JavaBean, EJB以及struts, hibernate, spring, webwork2, Java 3D, JOGL等相关技术。
    [返回] 计算机科学论坛计算机技术与应用『 Java/Eclipse 』 → 求助jsp读写查询数据库的办法 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 8335 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 求助jsp读写查询数据库的办法 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     xiongbajian 帅哥哟,离线,有人找我吗?处女座1983-8-26
      
      
      头衔:低头赶路
      等级:大三(面向对象是个好东东!)
      文章:131
      积分:690
      门派:XML.ORG.CN
      注册:2005/10/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给xiongbajian发送一个短消息 把xiongbajian加入好友 查看xiongbajian的个人资料 搜索xiongbajian在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看xiongbajian的博客楼主
    发贴心情 求助jsp读写查询数据库的办法

    我最近在学习jsp,jsp读取数据库的知识我只知道一些大路边上的,甚至多数是网上的一些源代码被我照葫芦画瓢给拿来用了。这样的结果就是有时候很难优化程序,因为我只虽然用那些方法,但是细节的东西我不知道。于是,当操作简单的时候程序速度还行,而遇到一些比较麻烦的操作的时候,就明显感觉速度慢了。今天发贴问一个jsp读取数据库记录中所以值的问题,希望得到一个好一些的办法。

        
        下面是我常用的一种查询数据库中记录值的方法,其中为了让你看的方便,让我删除了一些代码:

    for(i=1;i<=50;i++){
     
          String xinxilie = "xinxi" + String.valueOf(i);
          ResultSet rsYhXinxi2 = yonghuDBConn.executeQuery("select * from xinxi where yonghuming ='abc'");
            if(yonghuDBConn.rs_next()){
                 xinxiShuzu[i] = rsYhXinxi2.getString(xinxilie);
              }

    }

        像上面似的,我都是每循环一次就查询一次数据库,然后提取那可怜的一个值存到数组当中。这样做的缺点很明显,就是每循环一次,都要查询一次数据库,循环50次,则查询50次。速度慢的和蜗牛一样。于是我该成了下面的样子。

    ResultSet rsYhXinxi2 = yonghuDBConn.executeQuery("select * from xinxi where yonghuming ='abc'");

       if(yonghuDBConn.rs_next()){
             for(i=1;i<=50;i++){
                 String xinxilie = "xinxi" + String.valueOf(i);
                 xinxiShuzu[i] = rsYhXinxi2.getString(xinxilie);
         }
    }


    改成这样,执行时候却提示说“java.sql.SQLException:[Microsoft][ODBC SQL Server Driver]无效的描述父索引”。我不知道是什么原因,只知道程序在 i=1 时候执行没有问题,但是到了 i=2 时候就不行了,我也不知道无效的描述符索引是什么意思。

    因此还请各位高手指点迷津,最好告诉我这个“java.sql.SQLException:[Microsoft][ODBC SQL Server Driver]无效的描述父索引”是怎么回事,是由于那些问题造成的,这样我就可以把我的程序改成先查询在循环了。

    当然,如果还有其他的方法,可以只查询一次就能完成上面的任务,那么也很好,还请不吝赐教。谢谢各位了,^_^


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    恰恰首页:http://www.qaqaa.com

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/5/31 19:20:00
     
     binaryluo 帅哥哟,离线,有人找我吗?
      
      
      威望:6
      等级:研二(Pi-Calculus看得一头雾水)(版主)
      文章:679
      积分:5543
      门派:IEEE.ORG.CN
      注册:2005/2/19

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给binaryluo发送一个短消息 把binaryluo加入好友 查看binaryluo的个人资料 搜索binaryluo在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看binaryluo的博客2
    发贴心情 
    1.满足查询条件的结果是被保存在ResultSet对象中的,用循环的方法将记录一条一条的从ResultSet对象中读出来是唯一的方法。至于你说的"循环50次,则查询50次。速度慢的和蜗牛一样",怕没有那么夸张,就算你在一个jsp页面里直接循环50次读出50条记录,从点了查询按钮到得到结果显示,你也只会感到那点时延是由于网络时延引起的。

    2.发生“java.sql.SQLException:[Microsoft][ODBC SQL Server Driver]无效的描述父索引”错误,是因为你的“if(yonghuDBConn.rs_next()){”是错的,应该改为“rsYhXinxi2.rs_next()”。

    3.如果想提高数据库访问的效率,可以考虑使用存储过程来执行数据库操作,而不是直接写sql语句。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/6/1 8:49:00
     
     xiongbajian 帅哥哟,离线,有人找我吗?处女座1983-8-26
      
      
      头衔:低头赶路
      等级:大三(面向对象是个好东东!)
      文章:131
      积分:690
      门派:XML.ORG.CN
      注册:2005/10/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给xiongbajian发送一个短消息 把xiongbajian加入好友 查看xiongbajian的个人资料 搜索xiongbajian在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看xiongbajian的博客3
    发贴心情 
    谢谢版主的指点,学到了很多。不过我现在发现出现那个错误的原因可能是循环查询的时候顺序打乱造成的。因为我在数据库中放了50条xinxi列,分别是xinxi1,xinxi2,……,然后又有50条yonghu列,分别为yonghu1,yonghu2,……。
    每次查询的时候,总是同时查询xinxiN和yonghuN,这样到第二循环就错了,因为xinxi2在yonghu1的前面,于是我把数据库的结构改成了xinxi1,yonghu1,xinxi2,yonghu2,……的形式,然后再用先查询,再循环读取的方式,竟然通过了。

    不知道我说的对不对,因为我对数据库的掌握都是用到的时候才去查找使用的方法,从来没有系统的仔细学过,因此总结出来的东西也多是根据经验,因此不对的地方也在所难免。如果说的不对,还请各位指正。

    再次感谢版主的指点,真的学到了很多。

    ----------------------------------------------
    恰恰首页:http://www.qaqaa.com

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/6/2 18:04:00
     
     binaryluo 帅哥哟,离线,有人找我吗?
      
      
      威望:6
      等级:研二(Pi-Calculus看得一头雾水)(版主)
      文章:679
      积分:5543
      门派:IEEE.ORG.CN
      注册:2005/2/19

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给binaryluo发送一个短消息 把binaryluo加入好友 查看binaryluo的个人资料 搜索binaryluo在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看binaryluo的博客4
    发贴心情 
    ResultSet rsYhXinxi2 = yonghuDBConn.executeQuery("select * from xinxi where yonghuming ='abc'");

    从这句中看出:
    yonghuDBConn是Statement对象,rsYhXinxi2是ResultSet对象。
    而next()方法是在ResultSet中的,所以要用rsYhXinxi2对象来引用。

    我昨天把rs_next()方法看成是ResultSet中的next()方法了。

    在你的第一个代码片断中把查询放在循环中是不行的,逻辑上也不对,那样写相当于是同一个查询结果你查询了50次,应该把查询放在循环外面来做。然后用循环来处理查询的结果集——ResultSet。
    通常处理方法是:

    String xinxilie = "xinxi" + String.valueOf(i);
    ResultSet rsYhXinxi2 = yonghuDBConn.executeQuery("select * from xinxi where yonghuming ='abc'");
    while(rsYhXinxi2.next()){
           xinxiShuzu[i] = rsYhXinxi2.getString(xinxilie);
    }


    处理查询结果集一般用rsYhXinxi2的next()方法(Statement中的rs_next()方法我是第一次见)。而且最好把这段放到try_catch块中,不然编译可能会报错。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/6/3 9:13:00
     
     xiongbajian 帅哥哟,离线,有人找我吗?处女座1983-8-26
      
      
      头衔:低头赶路
      等级:大三(面向对象是个好东东!)
      文章:131
      积分:690
      门派:XML.ORG.CN
      注册:2005/10/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给xiongbajian发送一个短消息 把xiongbajian加入好友 查看xiongbajian的个人资料 搜索xiongbajian在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看xiongbajian的博客5
    发贴心情 
    很惭愧,其实rs_next()方法,我也不知道,我只是在网上见到了一个源代码,觉得不错,就拿来用了。由于我不是计算机专业,因此学习这些东西也往往是用到什么找什么,从来都是不求甚解。数据库这样,jsp这样,xml也这样。真的很惭愧,但是又觉得只能这样了,什么都学的很精通,感觉真的好困难。
    谢谢版主的指导,也向曾经指导过我的所有的网上的,网下的朋友表示感谢。

    ----------------------------------------------
    恰恰首页:http://www.qaqaa.com

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/6/3 16:12:00
     
     GoogleAdSense处女座1983-8-26
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Java/Eclipse 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/28 16:41:46

    本主题贴数5,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    93.750ms