sql多重查询的嵌套语句

前提:

假设现在有一个提交表单,里面有n个查询条件,用户可以填写几个或者不填写来提交。

思想“

判断每个条件用户输入是否为空,不为空则使用sql语句拼接

这是期末项目中用来查询图片的函数的代码:


public List<Image> watchImageDao(Image img){		Connection conn=null;		PreparedStatement ps=null;		ResultSet rs=null;		List<Image> li=null;		int index=-1;		int flag=0;		int count=0;		String table_name="t_image";		String sql=table_name;		String[] paramater= {img.getCountry(),img.getName(),img.getPosition(),				img.getResolution(),img.getLongitude(),img.getLatitude(),				img.getAcquisition_time(),img.getScale()				};		boolean[] empty=new boolean[8];		for(int i=0;i<8;i++)			empty[i]=true;		try {			Class.forName("com.mysql.jdbc.Driver");			conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/happy","root", "root");

			if(img.getCountry()!="") {				sql="select* from "+table_name+" where country=?";				empty[0]=false;				flag=1;				count++;			}			if(img.getName()!="") {				if(flag==0) 				 sql="select* from "+table_name +" where name=?";				else					sql="select* from" + "(" + sql + ")subset_name" + " where name=?";				empty[1]=false;				flag=1;				count++;			}			if(img.getPosition()!="") {					if(flag==0) 					 sql="select* from "+table_name +" where position=?";				else					sql="select* from" +"(" + sql + ")subset_position" + " where position=?";				empty[2]=false;				flag=1;				count++;			}			if(img.getResolution()!="") {				if(flag==0) 					sql="select* from "+table_name +" where resolution=?";				else					sql="select* from" +"(" + sql + ")subset_resolution" + " where resolution=?";				empty[3]=false;				flag=1;				count++;			}			if(img.getLongitude()!="") {				if(flag==0) 					sql="select* from "+table_name +" where longitude=?";				else					sql="select* from" +"(" + sql + ")subset_longitude" + " where longitude=?";				empty[4]=false;				flag=1;				count++;			}			if(img.getLatitude()!="") {				if(flag==0) 					sql="select* from "+table_name +" where latitude=?";				else					sql="select* from" +"(" + sql + ")subset_latitude" + " where latitude=?";				empty[5]=false;				flag=1;				count++;			}						if(img.getAcquisition_time()!="") {				if(flag==0) 					sql="select* from "+table_name +" where acquisition_time=?";				else					sql="select* from" +"(" + sql + ")subset_acquisition_time" + " where acquisition_time=?";				empty[6]=false;				flag=1;				count++;			}				if(img.getScale()!="") {				if(flag==0) 					sql="select* from "+table_name +" where scale=?";				else					sql="select* from" +"(" + sql + ")subset_scale" + " where scale=?";				empty[7]=false;				flag=1;				count++;			}				if(count==0) {				sql="SELECT* FROM "+table_name;			}			ps=conn.prepareStatement(sql);			for(int i=0;i<count;i++) {				for(int j=0;j<8;j++) {					if(!empty[j]) {						ps.setString(i+1, paramater[j]);						empty[j]=true;						break;					}				}			}

			rs=ps.executeQuery();			li=new ArrayList<>();			while(rs.next()) {				Image i=new Image();				i.setCountry(rs.getString("country"));				i.setName(rs.getString("name"));				i.setPosition(rs.getString("position"));				i.setResolution(rs.getString("resolution"));				i.setLongitude(rs.getString("longitude"));				i.setLatitude(rs.getString("latitude"));				i.setAcquisition_time(rs.getString("acquisition_time"));				i.setScale(rs.getString("scale"));				li.add(i);			}			} catch (Exception e) {				e.printStackTrace();			}finally{				try {					rs.close();				} catch (SQLException e) {					e.printStackTrace();				}				try {					ps.close();				} catch (SQLException e) {					e.printStackTrace();				}				try {					conn.close();				} catch (SQLException e) {					e.printStackTrace();				}			}

		return li;

	}

原文地址:https://www.cnblogs.com/Athelens/p/12111012.html

时间: 2024-10-10 09:43:24

sql多重查询的嵌套语句的相关文章

sql子查询和嵌套查询

子查询和嵌套查询 标签: it   嵌套查询就是在外部还有一个查询. 子查询是在select 内部还有一个select 查询常常也被称为内查询 下面的错误示例: select name from [user] where age <= (select age from [user] where id>1 ) 子查询返回的值多于一个.当子查询跟随在 =.!=.<.<=.>.>= 之后,或子查询用作表达式时,这种情况是不允许的. 1.语法 子查询的句法如下: (SELECT

SQL数据查询之——嵌套查询

一.概念描述 在SQL语言中,一个 SELECT-FROM-WHERE 语句称为一个查询块.将一个查询块嵌套在另一个查询块的 WHERE 子句或 HAVING 短语的条件中的查询称为 嵌套查询.例如: SELECT Sname /*外层查询或父查询*/ FROM Student WHERE Sno IN (SELECT Sno /*内层查询或子查询*/ FROM SC WHERE Cno='2'); SQL语言允许多层嵌套查询,即一个子查询中还可以嵌套其他子查询. 注意:子查询的SELECT语句

SQL高级查询:嵌套和分页

1.嵌套子查询 --查询最近一次oop考试没有参加考试的学生select StudentName from Student where StudentNo not in( select StudentNo from Result where SubjectId=( select SubjectId from Subject where SubjectName='oop' ) and ExamDate=( select MAX(ExamDate) from Result where Subject

mybatis的嵌套查询与嵌套结果查询的不同

原文:https://blog.csdn.net/qq_39706071/article/details/85156840 实体类: 嵌套查询mapper方法:嵌套查询的弊端:即嵌套查询的N+1问题尽管嵌套查询大量的简化了存在关联关系的查询,但它的弊端也比较明显:即所谓的N+1问题.关联的嵌套查询显示得到一个结果集,然后根据这个结果集的每一条记录进行关联查询.现在假设嵌套查询就一个(即resultMap 内部就一个association标签),现查询的结果集返回条数为N,那么关联查询语句将会被执

sql子查询 嵌套SELECT语句

嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值.子查询不但能够出现在Where子句中,也能够出现在from子句中,作为一个临时表使用,也能够出现在select list中,作为一个字段值来返回. 1.单行子查询 :单行子查询是指子查询的返回结果只有一行数据.当主查询语句的条件语句中引用子查询结果时可用单行比较符号(=, >, <, >=, <=, <>)来进行比较. 例:select ename,deptno,salfrom

一道SQL笔试题:使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位

S (SNO,SNAME,SDD,SAGE) SNO,SNAME,SDD,SAGE 分别代表学号.学 员姓名.所属单位.学员年龄 C (CNO,CNAME ) CNO,CNAME 分别代表课程编号.课程名称 SC(SNO,CNO,SCORE ) SNO,CNO,SCORE 分别代表学号. 所选修的 课程编号.学习成绩 三个表的数据如下: 问题: 使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位 自己写的SQL: SELECT SNO,SDD FROM S WHERE SNO IN( s

sql子查询 嵌套SELECT实用语句

嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值.子查询不但能够出现在Where子句中,也能够出现在from子句中,作为一个临时表使用,也能够出现在select list中,作为一个字段值来返回. 1.单行子查询 :单行子查询是指子查询的返回结果只有一行数据.当主查询语句的条件语句中引用子查询结果时可用单行比较符号(=, >, <, >=, <=, <>)来进行比较. 例:select ename,deptno,sal fro

SQL点滴10—使用with语句来写一个稍微复杂sql语句,附加和子查询的性能对比

原文:SQL点滴10-使用with语句来写一个稍微复杂sql语句,附加和子查询的性能对比 今天偶尔看到sql中也有with关键字,好歹也写了几年的sql语句,居然第一次接触,无知啊.看了一位博主的文章,自己添加了一些内容,做了简单的总结,这个语句还是第一次见到,学习了.我从简单到复杂地写,希望高手们不要见笑.下面的sql语句设计到三个表,表的内容我用txt文件复制进去,这里不妨使用上一个随笔介绍的建立端到端的package的方法将这些表导入到数据库中,具体的就不说了. 从这里下载文件employ

python 3 mysql sql逻辑查询语句执行顺序

python 3 mysql sql逻辑查询语句执行顺序 一 .SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <havin