将数组对象传递给jdbc查询

时间:2015-02-03 05:23:31

标签: java mysql jdbc arraylist

我正在开发一个应用程序,我希望将移动设备中的电话号码列表与数据库(MYSQL)进行比较。我将电话号码作为数组列表传递。

这是我的代码:

ArrayList<String> arrayList = new ArrayList<String>();
    arrayList.add("1212121212");
    arrayList.add("1234567890");
    arrayList.add("1515151515");
    arrayList.add("1111111111");
    arrayList.add("2222222222");
    arrayList.add("3333333333");

    List<UserDO> userDOs = userDAOImpl.getExistingMobileNumber(arrayList);

以上代码是我的测试用例,以下代码是我的数据库查询,用于选择手机号码

private static final String SELECT_MOBILE_NUMBER = "SELECT USER_ID, USER_NAME, REGISTRATION_ID, MOBILE_NUMBER FROM USER WHERE MOBILE_NUMBER IN (?)";

这是我的DAOImpl代码:

public List<UserDO> getExistingMobileNumber(ArrayList<String> mobileNumbers) throws UserDataException {
    JdbcTemplate jd = this.getJdbctemplate();
    List<UserDO> userDOs = jd.query(SELECT_MOBILE_NUMBER, new Object[] { mobileNumbers }, new RowMapper<UserDO>(){

        @Override
        public UserDO mapRow(ResultSet rs, int rowNum) throws SQLException {
            UserDO userDO = new UserDO();
            userDO.setMobileNumber(rs.getString(4));
            return userDO;
        }

    });
    return userDOs;
}

实际上我的问题是当我将移动设备作为字符串传递如下代码

     List<UserDO> userDOs = jd.query(SELECT_MOBILE_NUMBER, new Object[] { "2222222222" }, new RowMapper<UserDO>(){
......
......
}
}

它工作正常,它给出了预期的输出。但是当我通过&#34; mobileNumbers&#34;而不是&#34; 2222222222&#34;它没有给出预期的输出。任何一个解释我,我们可以在jdbc模板Query()中传递数组列表对象。如果是这样我们怎么能通过?

提前致谢

2 个答案:

答案 0 :(得分:1)

在您的解决方案中,您使用

query(String sql, Object[] args, RowMapper rowMapper) 

JdbcTemplate

的方法

你可以使用

query(PreparedStatementCreator psc, RowMapper rowMapper) 

并自己创建带有查询和arrayList的prepareStatement。

答案 1 :(得分:-1)

您的SQL查询中需要多个?,具体取决于ArrayList中的项目数。因此,使用StringBuilder构建SQL查询:

StringBuilder sql = new StringBuilder()
sql.append("SELECT USER_ID, USER_NAME, REGISTRATION_ID, MOBILE_NUMBER FROM USER WHERE MOBILE_NUMBER IN (");

for(String mobileNumber: mobileNumbers) {
      sql.append("?,");
    }
sql.append(")");

//use this to remove the extra comma at the end of your IN() clause
String query = sql.toString().replace(",)", ")");

//Convert your list to array for use with jdbcTemplate
Object[] params = mobileNumbers.toArray();

// if you have an entity class to map the resultset to, I suggest you use BeanPropertyRowMapper
List<YourEntityClass> list = jdbcTemplate.query(query, params, new BeanPropertyRowMapper<YourEntityClass>(YourEntityClass.class));

希望这有帮助。

修改

在这里阅读更多

http://www.mkyong.com/spring/spring-jdbctemplate-querying-examples/