Java数据库学习之SQL语句动态拼接

	public List<User> getUserByPage(PageInfo pif,User user){
		List<User> lu = new ArrayList<User>();
		Connection conn = DButil.getconn();
		String sql = "SELECT u.uname,u.uaddr from userinfo u ";
//		!"".equals(user.getUname()) 如果前段搜索用户名不填写,传到后端的是空值
		boolean contactAnd = false;
		String myWhere = "where";
		String myAnd = "and";
		List<String> params = new ArrayList<>();
		if(user.getUname()!=null&&!"".equals(user.getUname())) {
			if(contactAnd) {
				sql += myAnd + " uname = ? ";
			}else {
				sql += myWhere + " uname = ? ";
				contactAnd = true;
			}
			params.add(user.getUname());
		}
		if(user.getUaddr()!=null&&!"".equals(user.getUaddr())) {
			if(contactAnd) {
				sql += myAnd + " uaddr like ? ";
			}else {
				sql += myWhere + " uaddr like ? ";
				contactAnd = true;
			}
			params.add("%"+user.getUaddr()+"%");
		}
//		拼接分页查询的limit
		sql+= " Limit "+(pif.getPage()-1)*pif.getPageSize() +","+pif.getPageSize();
		try {
			PreparedStatement ps = conn.prepareStatement(sql);
//			占位符个数不确定,所以不能直接.所以需要对是否有占位符有几个进行判断
//			如果有拼接占位符号?,则在循环中对占位符进行赋值
			for(int i = 0;i<params.size();i++) {
				ps.setString(i+1,params.get(i));
			}
			ResultSet rs = ps.executeQuery();
			while(rs.next()) {
				User user1 = new User();
				user1.setUname(rs.getString("uname"));
				user1.setUaddr(rs.getString("uaddr"));
				lu.add(user1);
			}
			System.out.println(lu);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return lu;
	}

  

  

原文地址:https://www.cnblogs.com/klory/p/10775529.html

时间: 2024-08-30 04:40:51

Java数据库学习之SQL语句动态拼接的相关文章

MySQL数据库学习之SQL语句如何优化?数据库开发

1) 现场抓出慢查询语句 show full processlist; 2) 配置参数: slow_query_log_file = ON 慢查询开启开关 long_query_time =2 记录大于2秒的sql语句 log_queries_not_using_indexes = ON 没有使用索引的sql语句 slow_query_log_file = /application/mysql-5.6.34/data/db01-slow.log 慢log文件 min_examined_row_l

sqlserver 存储过程中拼接sql语句 动态执行

ALTER PROC [dbo].[Student_Friend_Get] @startRowIndexId INT, @maxNumberRows INT, @schoolId INT, @gradeId INT, @cId INT, @keyWords NVARCHAR(100), @userName VARCHAR(50) AS BEGIN DECLARE @sqlfilter VARCHAR(max) SET @sqlfilter = ' ' IF(@schoolId <> -1) S

java执行多条SQL语句

一次执行多条SQL的技术要点如下: DatabaseMetaData接口是描述有关数据库的整体综合信息,由于DatabaseMetaData是接口,所以没有构造方法,故不能使用new来创建DatabaseMetaData对象,但是可以通过Connection的getMetaData()方法创建.例如:DatabaseMetaData md=con.getMetaData(). DatabaseMetaData类的supportsBatchUpdates方法用于判断此数据库是否支持批量更新.其返回

oracle学习笔记 SQL语句执行过程剖析讲课

oracle学习笔记 SQL语句执行过程剖析讲课 这节课通过讲述一条SQL语句进入数据库 和其在数据库中的整个的执行过程 把数据库里面的体系结构串一下. 让大家再进一步了解oracle数据库里面的各个进程.存储结构以及内存结构的关联关系. 首先来讲整个体系中有客户端.实例和数据库 数据库里有三类文件 控制文件ctl.数据文件dbf.日志文件log 实例中SGA有六大池子 第一大内存区shared pool即共享池 第二大内存区buffer cache 第三块是redo log 我们主要讲上面的三

快速学习MySQL SQL语句

须知: SQL语言:结构化查询语言,是关系型数据库查询语言的标准,不同的数据库虽然有自己私有扩展,但关键词都支持:(select.update.delete.insert.where) SQL语句分类:像Oracle.MSSQL都是通用的 DDL:数据定义语言(create.alter.drop.rename) DML:数据库维护语言(select.insert.update.delete) DCL:数据库控制语言,权限(Grant.revoke) TCL:事物型语言(commt.sarepqi

通过MyEclipse工具直接操作数据库,执行sql语句,方便快捷

原文:通过MyEclipse工具直接操作数据库,执行sql语句,方便快捷 通过MyEclipse操作数据库,执行sql语句使我们不用切换多个工具,直接工作,方便快捷.效果如下: 步骤1:通过MyEclipse中的window->show View->other 调出.DB浏览器. 步骤2: 步骤3:输入db,然后选择DB Brower. 步骤4:单击空白处右键. 步骤5:选择相应的数据库类型. 步骤6: Driver name :填上自己需要的名字 Connection name :jdbc:

通过MyEclipse操作数据库,执行sql语句使我们不用切换多个工具,直接工作,方便快捷

通过MyEclipse操作数据库,执行sql语句使我们不用切换多个工具,直接工作,方便快捷.效果如下:     步骤1:通过MyEclipse中的window->show View->other 调出.DB浏览器.   步骤2:     步骤3:输入db,然后选择DB Brower.   步骤4:单击空白处右键.     步骤5:选择相应的数据库类型.     步骤6: Driver name :填上自己需要的名字 Connection name :jdbc:mysql://localhost

大数据量查询优化——数据库设计、SQL语句、JAVA编码

数据库设计方面: 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描.             如: select id from t where num is null              可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3

关于在Java代码中写Sql语句需要注意的问题

最近做程序,时不时需要自己去手动将sql语句直接写入到Java代码中,写入sql语句时,需要注意几个小问题. 先看我之前写的几句简单的sql语句,自以为没有问题,但是编译直接报错. 1 String str = "insert into XXX(a,b,c) values ('"a.getA()"','"a.getB()"','"a.getC()"');"; 研究了半天发现应该是连接字符串问题,第一次修改过后将赋值字段前后加“