Java:JdbcTemplate使用in进行更新

开篇

很久没发东西,主要是不知道写啥,有点词穷了…(囧)

这是前几天遇到的一个问题,然后找到了解决方案.

贴在这做个记录吧.

另外,使用Python 3+的话,格式化字符串可以使用,如下方式了[更多官方例子(英文)]:

1
2
'{0}{1}'.format(abc,def)
'{name}{age}'.format(newName,newAge)

想来,我用着Python3.5的版本,却还在用百分号格式化字符串(……..).

好了,回归正题.

下面是Java代码,使用的…………..自然是Spring的JdbcTemplate了……[官方的介绍(英文)]

java
image-2490

重点在这..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
        /*
            userids: 以逗号分隔的字符串,例如:'1,2,3,4,5'
            stata:状态数字,例如:'5'
        */
        void updateState(String userids, String state) {
            JdbcTemplate jdbcTemplate = new JdbcTemplate();
            StringBuffer sql = new StringBuffer();
            String[] xmlId = xmlids.split(",");
            /*
                在这不能用Arrays.asList()将数组转换为List.
                因为Arrays.asList()会将整个数组作为List的第一个元素.
            */
            final List<String> lists = new ArrayList<>();
            // 动态拼接sql.也就是在这拼接占位符
            sql.append(" UPDATE topuser SET state=? WHERE XMLID in  (  ");
            lists.add(state);
            for(int i = 0,j=xmlId.length;i<j;i++){
                lists.add(xmlId[i]);
                if(i!=0)sql.append(",");
                sql.append("?");
            }
            sql.append(" )");
            jdbcTemplate.update(sql.toString(),new PreparedStatementSetter(){
                     
                    @Override  
                    public void setValues(PreparedStatement ps) throws SQLException {  
                        for(int i = 0,j=lists.size();i<j;i++){ // 使用这种方式为占位符填充值.
                            ps.setString((i+1), lists.get(i));
                        }
                    }});
    }

数据库是MySQL.差点忘了……