我需要一个存储过程来比较数据库表中的手机号码列表。
例如我的表包含 100 行,我将 java
字符串数组传递给存储过程以获得匹配的行值返回。
该数组包含多个手机号码。
如果任何手机号码与我的表格手机号码列值匹配,它会返回行值。
有什么可能性吗?
如果有的话请帮助我..
我有其他解决方案,它在 spring Jdbc
和 mysql
中工作。
private static final String GET_MATCHING_MOBILE_NUMBERS = "SELECT USER_ID, USER_NAME, REGISTRATION_ID, IMEI_CODE, MOBILE_NUMBER FROM USER WHERE MOBILE_NUMBER IN (";
@Override
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
public List<UserDO> getMatchingExistingUsers(final String[] mobileNumbers) throws UserDataException {
JdbcTemplate jd = this.getJdbctemplate();
Object[] params = mobileNumbers;
List<UserDO> userDOs = jd.query(getSqlQuery(GET_MATCHING_MOBILE_NUMBERS, mobileNumbers), params, new BeanPropertyRowMapper<UserDO>(UserDO.class));
return userDOs;
}
private String getSqlQuery(String query_string, String[] array_values) {
StringBuilder query_builder = new StringBuilder();
query_builder.append(query_string);
for (@SuppressWarnings("unused")
String values : array_values) {
query_builder.append("?,");
}
query_builder.append("*");
String formated_query = query_builder.toString().replace(",*", ")");
return formated_query;
}
如果可能的话,我想要 Mysql
存储过程用于上面的代码..
预先感谢..
最佳答案
选择查询是
private static final String GET_MATCHING_MOBILE_NUMBERS = "SELECT USER_ID, USER_NAME, REGISTRATION_ID, IMEI_CODE, MOBILE_NUMBER FROM USER WHERE FIND_IN_SET(MOBILE_NUMBER,?);";
Jdbc代码是
List<UserDO> userDOs = jd.query(GET_MATCHING_MOBILE_NUMBERS, new Object[] { formatedSqlText }, new BeanPropertyRowMapper<UserDO>(UserDO.class));
它在不使用 String Builder 和存储过程的情况下工作正常。
关于java - 带有java字符串数组的Mysql存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28411605/