2015-02-03 4 views
1

Я разрабатываю приложение, в котором я хочу сравнить список телефонных номеров с мобильного устройства с базой данных (MYSQL). Я передаю номера телефонов в виде списка массивов.Передача объекта массива в запрос jdbc

вот мой код:

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>(){ 
...... 
...... 
} 
} 

это работает прекрасно, его отдача ожидается output.But, когда я прохожу как «mobileNumbers» вместо «2222222222» его не давая ожидается output.Any один объяснить мне, мы можем передать массив список объект в JDBC Шаблон запроса(). Если так, как мы можем пройти?

Заранее спасибо

+0

Проверить эту ссылку StackOverflow: http://stackoverflow.com/questions/4504592/how-to-use-select-in-clause -in-jdbctemplates –

ответ

-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)); 

Надеется, что это помогает.

EDIT

читать далее здесь

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

+0

Спасибо @jmcg, что он работает отлично. –

1

В вашем решении вы используете

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

метод JdbcTemplate

вы можете использовать

query(PreparedStatementCreator psc, RowMapper rowMapper) 

и создать prepareStatement с вашим запросом и ArrayList сами ,

Смежные вопросы