CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  Web 开发

关于数据库,这种情况代码一般怎么组织?

楼主bjzhanghao(八进制·WS新手)2003-09-02 16:53:10 在 Java / Web 开发 提问

我这个系统里有栏目(Column)和文章(Article)两个类,每个文章都是存在数据库里的一条记录。为了方便,我给Article类写了个getInstance()方法,代码如下:  
   
          public   static   Article   getInstance(DBO   dbo,int   aid)   {  
                  Article   article   =   null;  
                  String   str   =   "select   *   from   article   where   aid="   +   aid;  
                  ResultSet   rs   =   dbo.executeQuery(str);  
                  try   {  
                          if   (rs.next())   {  
                                  article   =   new   Article();  
                                  article.setId(aid);  
                                  article.setTitle(rs.getString("title"));  
                                  article.setAuthor(rs.getString("author"));  
                                  article.setSource(rs.getString("source"));  
                                  article.setColumnName(rs.getString("columnName"));  
                                  article.setKeyword(rs.getString("keyword"));  
                                  article.setDescription(rs.getString("description"));  
                                  article.setContent(rs.getString("content"));  
                                  article.setThumb(rs.getString("thumb"));  
                                  article.setAttachment(rs.getString("attachment"));  
                                  article.setBuildDate(rs.getString("buildDate"));  
                                  article.setModifyDate(rs.getString("modifyDate"));  
                                  article.setCounter(rs.getInt("counter"));  
                          }  
                  }   catch   (SQLException   e)   {  
                          e.printStackTrace();  
                  }  
                  return   article;  
          }  
   
  在Column类里有一个方法是获得这个栏目下的所有文章,放在一个Vector里,如下:  
   
          public   Vector   getAllArticles()   {  
                  Vector   articles   =   new   Vector();  
                  DBO   dbo   =   DBO.getInstance();  
                  Util   util   =   new   Util();  
                  String   str   =   "select   *   from   article   where   columnName='"   +   util.filt(getName())   +   "'   order   by   orderNum   desc";  
                  ResultSet   rs   =   dbo.executeQuery(str);  
                  try   {  
                          while   (rs.next())   {  
                                  Article   article   =   Article.getInstance(dbo,rs.getInt(1));  
                                  articles.add(article);  
                          }  
                  }   catch   (Exception   e)   {  
                          e.printStackTrace();  
                  }  
                  dbo.closeConn();  
                  return   articles;  
          }  
   
  后来发现这个getAllArticles方法的效率比较低,原因在于每取一篇文章都要从数据库再查询一次(在Article的getInstance方法里),所以就改成了这样:  
   
          public   Vector   getAllArticles()   {  
                  Vector   articles   =   new   Vector();  
                  DBO   dbo   =   DBO.getInstance();  
                  Util   util   =   new   Util();  
                  String   str   =   "select   *   from   article   where   columnName='"   +   util.filt(getName())   +   "'   order   by   orderNum   desc";  
                  ResultSet   rs   =   dbo.executeQuery(str);  
                  try   {  
                          while   (rs.next())   {  
                                  Article   article   =   new   Article();  
                                  article.setId(rs.getInt("aid"));  
                                  article.setTitle(rs.getString("title"));  
                                  article.setAuthor(rs.getString("author"));  
                                  article.setSource(rs.getString("source"));  
                                  article.setColumnName(rs.getString("columnName"));  
                                  article.setKeyword(rs.getString("keyword"));  
                                  article.setDescription(rs.getString("description"));  
                                  article.setContent(rs.getString("content"));  
                                  article.setThumb(rs.getString("thumb"));  
                                  article.setAttachment(rs.getString("attachment"));  
                                  article.setBuildDate(rs.getString("buildDate"));  
                                  article.setModifyDate(rs.getString("modifyDate"));  
                                  article.setCounter(rs.getInt("counter"));  
                                  articles.add(article);  
                          }  
                  }   catch   (Exception   e)   {  
                          e.printStackTrace();  
                  }  
                  dbo.closeConn();  
                  return   articles;  
          }  
   
  效率是提高了不少,但代码变长了,而且可以想象以后如果给Article增加个属性什么的,要改的地方就不是Article类一处了。类似这样的问题,有没有好的解决办法呢? 问题点数:100、回复次数:5Top

1 楼bdsc()回复于 2003-09-02 17:07:51 得分 0

我们用一个manager类来专门处理bulk(集合?)操作Top

2 楼leshui(大象无形)(有物混成,先天地生)回复于 2003-09-02 17:16:14 得分 40

把   栏目(Column)和文章(Article)两个类   写到一个类里边不知道怎么样呢???  
   
  public   class   Column {  
   
   public   class   Article {  
      
   }  
  }  
  效率方面不知道有没有提高  
  但是修改起来就方便多了Top

3 楼icecloud(冰云)回复于 2003-09-02 22:11:50 得分 40

1   栏目和文章之间采用Composite模式  
      栏目是Compostie,文章是Leaf  
      构造Composite的时候通过一个Sql语句,一次添加多条  
   
  2   Article对应与数据库的一个表,  
      该表的字段维护在一个外部文件中或者在类中保存一个Static的数组  
      数组中保存数据的字段名和类型  
      添加数据的时候,添加到同样长度的一个数组  
      采用setValue(String   property,   String   value)的样子即可维持今后的扩展  
   
  3   上述方法是一种简单的O/R   mapping方法  
      也可以采用hibernate,   jdo,   等任意的一种o/R方法  
  Top

4 楼bjzhanghao(八进制·WS新手)回复于 2003-09-09 00:27:05 得分 0

to   icecloud:   好象只有第2种方案比较可行,但要多出不少代码吧。  
  有没有效率高而且代码简单的方式呢?Top

5 楼squallzeng(小呆呆)回复于 2003-09-09 09:01:50 得分 20

gzTop

相关问题

  • 代码创建数据库
  • 关于组织数据库
  • 如何用代码把access2000数据库转成access97数据库
  • 如何用代码压缩数据库。
  • vb代码里访问sql数据库
  • 如何用代码生成数据库?
  • 求救~~~~~~~!!连数据库代码错误
  • 数据库查询代码的问题?
  • 再求数据库恢复代码
  • 求助数据库链接代码!!!!!!!!!!!!!!!!!!

关键词

  • article
  • 代码
  • 数据库
  • getstring
  • 数组
  • rs
  • aid
  • 栏目
  • 添加
  • 类

得分解答快速导航

  • 帖主:bjzhanghao
  • leshui
  • icecloud
  • squallzeng

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo