文档章节

JDBC PreparedStatement 预编译语句 动态添加条件-SQL参数不定

周田
 周田
发布于 2016/05/26 19:30
字数 348
阅读 793
收藏 4

我是看这个帖子来做的,我只是把过程写的更小白一点。 JDBC查询动态封装

实现的效果是:动态添加xx=?这些条件

SELECT id FROM t_table WHERE id=? AND sex = ?

拼接预编译语句

开始我们要用到两个Vector来存储 参数值和参数类型

Vector<Object> vParamValue =	new Vector<Object>();
Vector<String> vParamType =	new Vector<String>();

接着声明一个带初始条件的SQL字符串,目的是之后拼接条件时,就不用考虑是否加AND的问题

String 	sql	=	"SELECT id FROM t_table WHERE id > 0 ";

接着判断条件参数是否获取到,以决定是否拼接该条件

if(!name.equals(""))
{
	sql += " AND name=? ";
	vParamValue.add(name);
	vParamType.add("String");
	conditionCount++;//用来统计拼接的条件个数,方便后面给预编译语句的条件参数遍历赋值
}

再接着是给语句对象参数赋值

(之前不明白这里怎么把参数一一对应起来的。 后来想了下,其实很简单。

因为SQL条件位置与放在Vector中的参数值,参数类型,三者是一一一对应的。)

for(int i = 0; conditionCount > i; i++)
		{
			if("String".equals(vParamType.get(i).toString()))
			{
				ps.setString(i+1, vParamValue.get(i).toString());//参数所以从1开始,所以是i+1
			}
			if("int".equals(vParamType.get(i).toString()))
			{
				ps.setInt(i+1, Integer.parseInt(vParamValue.get(i).toString()));
			}
		}

最后就是执行啦

rs = ps.executeQuery();

完毕

© 著作权归作者所有

周田
粉丝 4
博文 123
码字总数 23374
作品 0
德阳
私信 提问
mybatis 中 # 与 $ 区别

mybatis 框架使用好处之一就是可以动态的改变 sq l语句,而动态的 sql 语法 #{ } 和 ${ } 则有所不同。 #:因为mybatis是基于 jdbc 封装的,# 解析为 jdbc 预编译(preparedstatement)的参数...

几个栗子
2017/11/11
30
0
JDBC:深入理解PreparedStatement和Statement

前言 最近听一个老师讲了公开课,在其中讲到了PreparedStatement的执行原理和Statement的区别。 当时听公开课老师讲的时候感觉以前就只知道PreparedStatement是“预编译类”,能够对sql语句进...

小七奇奇
2018/11/01
0
0
preparedStatement和Statement区别

原文:https://blog.csdn.net/xuebing1995/article/details/72235380 一、概念 PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement、PreparedStatement 和 CallableSt......

minose
2018/12/16
0
0
JDBC为什么要使用PreparedStatement而不是Statement

本文由 ImportNew - 刘志军 翻译自 Javarevisited。如需转载本文,请先参见文章末尾处的转载要求。 PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement、PreparedState...

编走编想
2013/07/25
204
0
PreparedStatement和Statement区别

JDBC驱动的最佳化是基于使用的是什么功能. 选择PreparedStatement还是Statement取决于你要怎么使用它们。对于只执行一次的SQL语句选择Statement是最好的. 相反, 如果SQL语句被多次执行选用P...

偶尔诗文
2015/11/10
35
0

没有更多内容

加载失败,请刷新页面

加载更多

好程序员web前端教程分享web前端入门基础知识

  好程序员web前端教程分享web前端入门基础知识,作为合格的Web前端工程师必须得掌握HTML、CSS和JavaScript。只懂其中一两个还不行,必须对这三门语言都要熟悉。下面我们一起来看一看吧! ...

好程序员官网
2分钟前
0
0
elasticsearch 中文分词插件IK-Analyze

elasticsearch 版本 7.3 安装中文分词插件 插件对应的版本需要和elasticsearch的版本一致 插件各个版本下载地址 https://github.com/medcl/elasticsearch-analysis-ik/releases 使用elastic...

kdy1994
6分钟前
0
0
只用一套解决方案,就可解决80%的交通物流行业信息难题

行业背景 新中国成立70多年来,中国交通运输总体上已经形成了多节点、全覆盖的综合运输网络,“五纵五横”综合运输大通道基本贯通,一大批综合客运、货运枢纽站场(物流园区)投入运营,取得...

朕想上头条
8分钟前
0
0
spring-boot结合AOP实现数据源动态配置

Spring-Boot+AOP方式实现多数据源切换 设计总体思路:Spring-Boot+AOP方式实现多数据源切换,继承AbstractRoutingDataSource实现数据源动态的获取,在service层使用注解指定数据源。 一、多数...

蜗牛伊
9分钟前
0
0
干货 | 京东技术中台的Flutter实践之路

在 2019 年,Flutter 推出了多个正式版本,支持的终端越来越多,使用的项目也越来越多。Flutter 正在经历从小范围尝鲜到大面积应用的过程,越来越多的研发团队加入到 Flutter 的学习热潮中,...

京东云技术新知
12分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部