java绑定变量的问题,求解。

我看见佛 2016-07-31 02:55:38

select * from tab where r1 = ? and r2=? and r3=? and r4 = ?

pstmt.setObject(i + 1, params.get(i));
----
问题1:上面的方法好像只能根据参数索引赋值?

------------------------------------------------------------------------------------------
上面的SQL格式改写成下面的SQL格式的话

select * from tab where r1=:V_r1 and r2=:V_r2 and r3 = :v_r3 and r4=:Vr1

问题2:怎么实现根据参数名称赋值呢?V_r1 、V_r2 、v_r3 、Vr1填入的样子。
即:pstmt.setObject(“V_r1 ”, 参数1的值);
即:pstmt.setObject(“参数2的名称v_r2”, 参数2的值)

ParameterMetaData pmd=ps.getParameterMetaData();
测试:
ParameterMetaData 好像也没有提供获取V_r1 绑定变量参数名的方法。
...全文
194 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
NewMoons 2016-08-01
  • 打赏
  • 举报
回复
楼主java的jdbc确实没有提供这样的方法。 其实自己把jdbc封装一下也不是很难,如果你不想重复造轮子,网上有很多已经实现的第三方库。 我记得spring得dao实现类也有这样的工具,但想不起具体类名了。 麻烦你自己百度下吧。
OPPPPOP 2016-08-01
  • 打赏
  • 举报
回复
没有。。。。。。
我看见佛 2016-08-01
  • 打赏
  • 举报
回复
引用 1 楼 antiwise 的回复:
java 确实没有这样的方法 之前也有过类似的想法,最终是拼接sql,以下测试的代码,仅供参考
String s = "select * from tab where r1=:V_r1 and r2=:V_r2 and r3 = :v_r3 and r4='Vr1'";
		Map<String, String> m = new HashMap<>();
		m.put("V_r1", "V_r1_val");
		m.put("V_r2", "V_r2_val");
		m.put("v_r3", "v_r3_val");
		m.put("Vr1", "Vr1_val");
		StringBuilder rg = new StringBuilder();
		boolean f = true;
		for(String k : m.keySet()) {
			if(!f) {
				rg.append('|');
			} else {
				f = false;
			}
			rg.append(':' + k);
		}
		Matcher mcr = Pattern.compile("('(''|[^'])*'|("+ rg.toString() +"))").matcher(s);
		StringBuffer sb = new StringBuffer();
		for (; mcr.find();) {
			String g = mcr.group();
			if(g.length() < 2 || g.charAt(0) != ':') {
				continue;
			}
			String v = m.get(g.substring(1));
			if(v == null) {
				continue;
			}
			mcr.appendReplacement(sb, '\'' + v + '\'');
		}
		mcr.appendTail(sb);
		System.out.println(sb.toString());
你们用这个方案正式用于系统了吗?
逗泥丸的平方 2016-08-01
  • 打赏
  • 举报
回复
找个框架吧
OPPPPOP 2016-08-01
  • 打赏
  • 举报
回复
java 确实没有这样的方法 之前也有过类似的想法,最终是拼接sql,以下测试的代码,仅供参考
String s = "select * from tab where r1=:V_r1 and r2=:V_r2 and r3 = :v_r3 and r4='Vr1'";
		Map<String, String> m = new HashMap<>();
		m.put("V_r1", "V_r1_val");
		m.put("V_r2", "V_r2_val");
		m.put("v_r3", "v_r3_val");
		m.put("Vr1", "Vr1_val");
		StringBuilder rg = new StringBuilder();
		boolean f = true;
		for(String k : m.keySet()) {
			if(!f) {
				rg.append('|');
			} else {
				f = false;
			}
			rg.append(':' + k);
		}
		Matcher mcr = Pattern.compile("('(''|[^'])*'|("+ rg.toString() +"))").matcher(s);
		StringBuffer sb = new StringBuffer();
		for (; mcr.find();) {
			String g = mcr.group();
			if(g.length() < 2 || g.charAt(0) != ':') {
				continue;
			}
			String v = m.get(g.substring(1));
			if(v == null) {
				continue;
			}
			mcr.appendReplacement(sb, '\'' + v + '\'');
		}
		mcr.appendTail(sb);
		System.out.println(sb.toString());

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧