java语言,jdbcTemplate.queryForMap查询,如何传入两个参数到SQL中

StringBuffermemberSql=newStringBuffer();memberSql.append("SELECTNAMEFROMmemberWHEREca... StringBuffer memberSql = new StringBuffer();
memberSql.append("SELECT NAME FROM member WHERE card_num=? and app_id=?");
Map cardNameMap=jdbcTemplate.queryForMap(memberSql.toString(),Object ... args);
我想问一下,上面第三句中Object ... args处该填什么。
sql应该是这样的SELECT NAME FROM member WHERE card_num=card_num and app_id=“app_id”
其中card_num 是int类型,app_id是字符串类型。
如果只传入一个参数,我知道直接在Object ... args处填入参数就行,如果要传两个或多个该怎么写呢,是按这样的格式吗,jdbcTemplate.queryForMap(String sql,Object...args,int[]argTypes),那其中的三个参数该怎么填呢
展开
 我来答
匿名用户
2019-07-12
展开全部

1、使用Map<String,Object>   jdbcTemplate.queryForMap查询,其返回结果必须有且只有1个map值,否则会抛出异常。若抛出异常,则肯定不会得到返回值。

例如“控制台提示错误Incorrect result size: expected 1, actual 0”。

问题原因参考(1)字符串的Jdbctemplate查询:EmptyResultDataAccessException:结果大小不正确:预期1,实际0网页链接

问题原因参考(2)JdbcTemplate queryForObject结果大小不正确:预期为1,实际为0网页链接

2、推荐使用jdbcTemplate.query或List<Map<String,Object>> jdbcTemplate.queryForList查询。

/**
 * 
* @Title: querySpxxMap_dbBySsflbm 
* @Description: TODO(根据税收分类编码、企业id,联查商品信息表、税收分类编码表的,商品id+商品名称+规格型号+计量单位+税率+税收分类编码) 
* @param ssflbm
* @param qyid
* @return    设定文件 
* @return Map<String,Object>    返回类型 
* @throws
*/ 
public List<Map<String, Object>> querySpxxMap_dbBySsflbm(String ssflbm, String qyid) {
String sql="select spxx.id,spxx.spmc,spxx.ggxh ,spxx.jldw,ss.slv ,ss.hbbm ssflbm "
+ "from t_jc_ssflbm ss "
+ "left join t_qy_spxx  spxx on spxx.ssflbm=ss.hbbm  "
+ "where ss.hbbm=? and spxx.qyid=?";
//queryForList  参数写法1
List<Object> conditionList = new ArrayList<Object>();
conditionList.add(ssflbm);
conditionList.add(qyid);
List<Map<String, Object>> list1=jdbcTemplate.queryForList(sql,conditionList.toArray());
//queryForList  参数写法2
List<Map<String, Object>> list2=jdbcTemplate.queryForList(sql,new Object[] {ssflbm,qyid});
return list1;
}
百度网友200b114
推荐于2016-09-06 · TA获得超过261个赞
知道小有建树答主
回答量:324
采纳率:66%
帮助的人:175万
展开全部
Object...args:这个格式的参数是变长参数,相当于是一个数组,并且这种格式的参数只能放在最后,也就是jdbcTemplate.queryForMap(String sql,Object...args,int[]argTypes),这个形式是不合法的。

调用时候这样用就行了:jdbcTemplate.queryForMap(memberSql.toString(),1,"abc");
更多追问追答
追问

这是写方法时Eclipse给的提示,如果按你说的写(jdbcTemplate.queryForMap(memberSql.toString(),1,"abc");)这样我试过,会报错,执行不了该语句,我百度过这方法,网上说Object[] args就是设置参数用的,而int[] argTypes则是指定参数类型,但是我不知道怎么写

追答

这里写着'constants from java.sql.Types',

应该是这样调用的

Object [] bb = {new Integer(1), new String("sss")};

int [] aa = {Types.INTEGER, Types.VARCHAR};//这里的Types对应的应该是数据库列的类型

jdbcTemplate.queryForMap(memberSql.toString, bb ,aa);

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
九方疏然4w
2015-08-14 · 超过33用户采纳过TA的回答
知道答主
回答量:58
采纳率:0%
帮助的人:13.4万
展开全部
为什么要这么写呢?如果只是单纯的传入值的话可以不用键值对啊;
Connection conn=连接方式;
PrepareStatment pst=conn prepareStatment(Sql语句);
按照你上面的问号的话我就可以这么传:
pst.setString(1,card_num);
其中1代表第一个问号,后面的card_num则是String变量;
如果传入整型好像还有setInteger方法把
追问
系统是采用框架弄的,我是在做系统功能改进吧,本身就是一个完整的项目,项目最开始开发人员没有使用你这种原生的方法肯定是有他的理由,所以我也没必要用吧。你说的方法我知道,但是总是要接触新的东西,不可能一直用这一种方法连接数据库吧。不过还是谢谢你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式