JAVA里map的key值和value值怎么放到SQL文里作条件

我现在Map t = new HashMap();
String[] a = new String[31]();
String[] b = new String[31]();
for(int j=0 , int k =0 ; j<31 ; j++ , k++){
t.put( "a[j]", b[k]);
}
大概意思是这样,a和b在表里有分别对应的字段,假设a在表里的数据是从1到31,现在这个t的key值也是从1到31,b也是不同的。我现在想做的SQL文内容大概是
update 表A
set A = a[i]
WHERE
B = b[i]
我就是想把map里的key值当作判定条件,然后分别把value值更新到表里的对应数据上。但是在SQL里写的时候,后面a和b应该是个数组,这样的话,怎么写到SQL文里呢?在线等大神帮忙!!

第1个回答  2013-07-22

你a[i],b[i]都对应了,为啥还要先放在MAP然后再从MAP里取出来呢。

Map<String,String> t = new HashMap<String,String>();
String[] a = new String[31];
String[] b = new String[31];
for (int j = 0, k = 0; j < 31; j++, k++) {
t.put(a[j], b[k]);
}
Set<String> set = new HashSet<String>();
set = t.keySet();
Connection conn = DBUtil.getConnection();
for (String key : set) {
String sql = "update xx_table set xxx=? where yyy=? ";
PreparedStatement prep = conn.prepareStatement(sql);
prep.setString(1, key);
prep.setString(2, t.get(key));
prep.executeUpdate();
}

用MAP就这样的意思?

第2个回答  2013-07-22
个人觉得你a,b都是字符串类型的数组,你就直接放在2个map中不行吗?
或者把a,b存在对应关系的一对数据拼接成一个字符串在放入map中,方便取值。取得字符串在分割开来就可以了
第3个回答  推荐于2018-04-24
Map at = new HashMap();
Map bt = new HashMap();
String[] a = new String[31]();
String[] b = new String[31]();
for(int j=0 , int k =1 ; j<31 ; j++ , k++){
at[j] = k;
bt[j] = k;
bt.put( "a["+j+"]", at[j]);
bt.put( "b["+j+"]", bt[j]);
}
for(int i=0 ; i<31 ; i++){
a[i] = t.get( "a["+i+"]");
b[i] = t.get( "b["+i+"]");
sql = update 表A set A = a[i] WHERE B = b[i]
}

附注:按照你的要求是这么写的,其实map就没必要搞,你需要优化代码的思路追问

不好意思可能提问的有点问题,是这样,现在我通过别的方法取到了一个map,t.map(key[i],value);这里的key是个数组,我能得到,value的值是不知道的。
SQL大概是
update 表A
set
VALUE = /*value*/
where
KEY = /*key*/,
我现在想通过循环把每一条的key 和value取出来放到SQL文里。就是这样。。。上午我也没明白,所以提问的有些模糊。

追答

哦,还是不太明白你的需求,你看是不是这样嘛:

Map t = new HashMap();

//map的key会形成这样的一个数组 :
String[] key = {1,2,3,4,5,6,……31};

//map的value可以通过key来访问,形成这样的一个数组:
//Object[] value = {key{0},key[1],……,key{30}};

//如果是这样的话,就可以这样处理了:
for(int i=0 , i<key.length ;i++){
sql = "update 表A set VALUE=" + map.get(key[i]) +" WHERE KEY=" + key[i];
}

另外,java中map的key只能是一个字符串,不会是别的,所以map的key不会是数组形式,只是map中有很多个key按照顺序排列,看起来像数组而已。

本回答被提问者和网友采纳
第4个回答  2013-07-22
集合类 都有 key的对象, ketSet之类的东西;
不知道你的sql不能一条一条修改吗? 如果非要用数组,哪自己根据ketSet自己组合这样的数组。追问

现在要求是只调用这一个SQL,而且里面的判定条件或者set条件是数组里的值,现在假如说有一个数组a[4],里面有 1 2 3 4 5 这5个对象,怎么写个SQL文能把这5个对象分别赋到5个数据里?
UPDATE 表A
SET A = ??
WHERE
1=1
像这样,??地方应该怎么写

追答

你的意思 就是写一句sql 同时更改 这 5条记录???
UPDATE TABLE SET A = A[1],A[2],A[3] WHERE B= B[1],B[2],B[3];???? 这样的 这个意思吗??

这个明显不可能实现的,你从数据库的角度上去想一想?

你能用一个条件查出需要更新的记录,但是如何让对应的记录知道他要被改成多少呢?
只有唯一确定一条记录时,才能明确知道改那条,该那个字段,改成什么内容。

从数据库方面想,更新只能是更改一条或一批,但改的结果(修改的内容)肯定是相同的,不可能那么智能的知道那个条件的改成对应的,你这样的需求只能一条一条改。

相似回答