网上商城学习札记(五)

1、在学习一些新东西后者写一些新东西的的时候,要写一段,运行一段,再判断一段

2、动态方法(无static)与静态方法的区别:
动态方法有一个好处:
[color=red]
在一个类中的方法声明为动态的,则这个类中可以保留一个成员变量,当有人调用其中的一个方法时,可以把这个成员变量初始化,若初始化好了以后,再有人来用这个方法时,不用再从DB中取了!从这个成员变量直接拿出来(即内存中),前提是这个方法没有变化就可以了!也就是说这个包含动态方法的类做了一件事情——[size=x-large]缓存![/size]即缓存别人搜索过的对象!这样效率就快很多了,但是这样做消耗内存!这就是用空间换时间!
[/color]

3、在SQL语句中如果where后跟了很多的过滤条件,则这些过滤条件的前后顺序对于效率有没有影响!
[color=blue]
有一点影响!应该将过滤粒度大的放在前面!(这个仅代表个人意见!)
因为在DB中有对SQL语句的优化策略,具体怎样优化,不好意思不是很了解!没有研究过!
[/color]

4、在项目汇总涉及到的复杂查询的代码:

/**
* 这个方法提供了可以根据产品的id来查询
* 根据名字查询
* 根据描述查询
* 根据一般价格段查询
* 根据会员价格段查询
* 根据日期段查询
* 而且这个查询支持分页
*
* @param categoryId
* @param name
* @param descr
* @param lowNormalPrice
* @param highNormalPrice
* @param lowMemberPrice
* @param highMemberPrice
* @param startDate
* @param endDate
* @param pageNo
* @param pageSize
* @return
*/
public List<Product> findProducts(int[] categoryId,
String keyWord,
double lowNormalPrice,
double highNormalPrice,
double lowMemberPrice,
double highMemberPrice,
Date startDate,
Date endDate,
int pageNo,
int pageSize) {
Connection conn = null ;
ResultSet rs = null ;
List<Product> list = new ArrayList<Product>() ;
try {
conn = DB.getConn() ;
String sql = "select * from product where 1=1 " ;

String strId = "" ;
//(2,3) (2,3,4)
if(categoryId != null && categoryId.length > 0) {
strId += "(" ;
for(int i = 0 ; i < categoryId.length ; i ++) {
if(i < categoryId.length - 1) {
strId += categoryId[i] + "," ;
}else {
strId += categoryId[i] ;
}
}
strId += ")" ;
sql += " and categoryid in " + strId ;
}

if(keyWord != null && !keyWord.trim().equals("")) {
sql += " and name like '%" + keyWord + "%' or descr like '%" + keyWord + "%'" ;
}

if(lowNormalPrice >= 0) {
sql += " and normalprice > " + lowNormalPrice ;
}

if(highNormalPrice > 0) {
sql += " and normalprice < " + highNormalPrice ;
}

if(lowMemberPrice >= 0) {
sql += " and memberprice > " + lowMemberPrice ;
}

if(highMemberPrice > 0) {
sql += " and memberprice < " + highMemberPrice ;
}

if(startDate != null) {
sql += " and pdate >= '" + new SimpleDateFormat("yyyy-MM-dd").format(startDate) + "'";
}

if(endDate != null) {
sql += " and pdate <= '" + new SimpleDateFormat("yyyy-MM-dd").format(endDate) + "'";
}

sql += " limit " + (pageNo - 1) * pageSize + " , " + pageSize ;
System.out.println(sql);

//String sql = "select * from product limit " + (pageNo - 1) * pageSize + " , " + pageSize ;
rs = DB.executeQuery(conn, sql) ;
while(rs.next()) {
Product p = new Product() ;
p.setId(rs.getInt("id")) ;
p.setName(rs.getString("name")) ;
p.setDescr(rs.getString("descr")) ;
p.setNormalprice(rs.getDouble("normalprice")) ;
p.setMemberprice(rs.getDouble("memberprice")) ;
p.setPdate(rs.getTimestamp("pdate")) ;
p.setCategoryId(rs.getInt("categoryid")) ;

list.add(p) ;
}
}catch(SQLException e) {
e.printStackTrace() ;
}finally {
DB.closeRs(rs) ;
DB.closeConn(conn) ;
}
return list;
}

页面如图:
[img]http://dl.iteye.com/upload/picture/pic/77663/7666ba77-c5e6-39f0-877c-a6bce576cd5a.jpg[/img]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值