`

网上商城学习札记(五)

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

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


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


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;
	}

页面如图:

分享到:
评论

相关推荐

    LabView学习札记

    PDF文件包含了学习札记的序言和五个章节,分别是“一(上)、一(下)、二、三(上)、三(下)”。这些章节可能涵盖了LabView的基础知识,如G语言基础、界面设计、数据处理、控制流与结构以及可能深入到的高级主题...

    labview 学习札记2

    本学习札记的第二卷,将深入介绍LabVIEW的基本概念和核心功能,旨在帮助初学者快速入门。以下是可能涵盖的知识点: 1. **G语言**:LabVIEW的核心编程语言称为G语言,通过拖拽和连接不同的函数框图来实现代码编写。G...

    labview学习札记

    LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种图形化编程环境,主要用于开发虚拟...希望这个学习札记能帮助你在虚拟仪器的学习道路上找到方向,不断进步,最终在LabVIEW的世界里游刃有余。

    LabVIEW学习札记

    这个“LabVIEW学习札记”显然是一份关于掌握LabVIEW核心概念和技术的详细资料。下面我们将深入探讨LabVIEW的一些关键知识点。 1. **G语言**: LabVIEW的核心编程语言称为G,它是一种基于图形的编程语言。通过连接...

    Simulink代码生成学习札记[汇编].pdf

    Simulink代码生成学习札记[汇编].pdf

    虚拟仪器LabVIEW 教程PPT资料 学习札记 应用设计等学习资料.zip

    虚拟仪器LabVIEW 教程PPT资料 学习札记 应用设计等学习资料: LabVIEW 学习札记 - 序.pdf LabVIEW 学习札记 - 第三卷 上.pdf LabVIEW 学习札记 - 第三卷 下.pdf LabVIEW_学习札记_-_第一卷_上.pdf LabVIEW_学习札记_...

    LabVIEW 学习札记 - 第一卷 上

    本札记“LabVIEW学习札记 - 第一卷 上”将带你逐步走进LabVIEW的世界,揭示其核心概念和常见问题。 首先,LabVIEW的核心在于它的G图形化编程语言。与传统的文本编程语言不同,LabVIEW使用的是图标和连线来表示程序...

    Simulink代码生成学习札记.zip

    这个“Simulink代码生成学习札记”可能包含了关于如何使用Simulink从模型直接生成可执行代码的重要知识,这对于工程师和开发者来说是一个极其有用的资源,特别是对于初学者。 Simulink的主要功能之一就是代码生成,...

    公司法学习札记.pdf

    公司法学习札记.pdf

    labview论坛-LabVIEW 学习札记 - 第二卷

    "LabVIEW 学习札记 - 第二卷"是针对LabVIEW进阶学习的一份珍贵资料,包含了丰富的实践案例和深入的技术解析。 在这一卷中,你可能会学习到以下几个关键知识点: 1. **G语言与程序结构**:LabVIEW的核心是G语言,一...

    Nios II 学习札记

    【Nios II 学习札记】 Nios II 是由 Altera 公司开发的一种软核处理器,广泛应用于 FPGA(Field-Programmable Gate Array)设计中,它提供了高效的嵌入式处理解决方案。Nios II 提供了三种不同的内核类型,分别是 ...

    微机操作札记十五篇(CHM格式)

    《微机操作札记十五篇》是一份详细记录了操作系统及办公软件日常技巧的文档集,旨在帮助用户提升计算机操作的效率和技能。这个CHM格式的文件包含了十五篇文章,每一篇都专注于一个特定的主题,涵盖了从基础到进阶的...

    labview 学习札记3a

    "labview 学习札记3a"显然是一个关于LabVIEW的教程资源,旨在帮助初学者掌握这个平台的基础知识,并通过实际工程实例加深理解。 在LabVIEW的学习过程中,有几个关键的知识点是必须掌握的: 1. **基本概念**:理解...

    mysql学习札记.zip

    这份"mysql学习札记.zip"文件显然包含了作者在学习MySQL过程中积累的知识和经验,可能是笔记、示例代码或者教程。虽然没有具体的标签来细化主题,但我们可以根据常见的MySQL学习路径来探讨一些关键知识点。 首先,...

    5-学习札记快速整理软件-使用说明书1

    学习札记快速整理软件是一款专为学习者设计的高效笔记管理工具,旨在帮助用户快速整理、记录和检索学习内容。本文将详细介绍该软件的各个功能、运行环境以及使用方法,以便用户更好地利用这款软件提升学习效率。 **...

    labview 学习札记1b

    在"LabVIEW学习札记1b"中,我们可以预期会涵盖以下几个关键知识点: 1. **基本概念**:LabVIEW的基本结构包括前面板和程序框图。前面板是用户与VI(Virtual Instrument)交互的界面,包含各种控件(Controls)如...

    EXT学习札记--京华志

    EXT学习札记 ExtJs学习--京华志 京华志出品 必数精华

    复变函数札记

    《复变函数札记》是作者梁昌洪继《矢算场论札记》(科学出版社,2007)之后的第二本工程...《复变函数札记》适合理工科的本科生和硕士、博士研究生学习使用,也可作为相关专业的广大科技和工程人员的入门读物和工具书。

    2-学习札记快速整理软件-项目概要1

    《学习札记快速整理软件——打造高效笔记新体验》 学习札记快速整理软件,是一款专为学生群体及需要频繁记录信息的用户设计的APP,旨在解决信息快速记录、整理和分类的难题。这款软件以创新的功能和贴心的设计,...

Global site tag (gtag.js) - Google Analytics