Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数组对象传递给jdbc查询_Java_Mysql_Jdbc_Arraylist - Fatal编程技术网

Java 将数组对象传递给jdbc查询

Java 将数组对象传递给jdbc查询,java,mysql,jdbc,arraylist,Java,Mysql,Jdbc,Arraylist,我正在开发一个应用程序,其中我希望将移动设备上的电话号码列表与数据库(MYSQL)进行比较。我将电话号码作为数组列表传递 这是我的密码: ArrayList<String> arrayList = new ArrayList<String>(); arrayList.add("1212121212"); arrayList.add("1234567890"); arrayList.add("1515151515"); arrayList.a

我正在开发一个应用程序,其中我希望将移动设备上的电话号码列表与数据库(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);
这是我的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;
}
公共列表getExistingMobileNumber(ArrayList mobileNumbers)抛出UserDataException{
JdbcTemplate jd=this.getJdbctemplate();
List userDOs=jd.query(选择_MOBILE_NUMBER,新对象[]{mobileNumbers},新行映射器(){
@凌驾
public UserDO mapRow(ResultSet rs,int rowNum)抛出SQLException{
UserDO UserDO=new UserDO();
setMobileNumber(rs.getString(4));
返回userDO;
}
});
返回userDOs;
}
实际上,我的问题是当我将mobile作为字符串传递时,如下代码所示

     List<UserDO> userDOs = jd.query(SELECT_MOBILE_NUMBER, new Object[] { "2222222222" }, new RowMapper<UserDO>(){
......
......
}
}
List userDOs=jd.query(选择移动电话号码,新对象[]{“2222”},新行映射器(){
......
......
}
}
它工作正常,提供了预期的输出。但是当我作为“mobileNumbers”而不是“2222”传递时,它没有提供预期的输出。有人解释我,我们可以在jdbc Template Query()中传递数组列表对象吗?如果可以,我们如何传递


提前感谢您使用的解决方案

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

你可以用

query(PreparedStatementCreator psc, RowMapper rowMapper) 

并使用查询和arrayList自己创建prepareStatement。

根据
arrayList
中的项数,SQL查询中将需要多个
。因此,请使用
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));
StringBuilder sql=new StringBuilder()
append(“从手机号所在的用户(“)中选择用户号、用户名、注册号、手机号);
用于(字符串mobileNumber:mobileNumber){
追加(“?,”);
}
sql.append(“)”;
//使用此选项删除IN()子句末尾的多余逗号
字符串查询=sql.toString().replace(“,)”,”);
//将列表转换为数组,以便与jdbcTemplate一起使用
Object[]params=mobileNumbers.toArray();
//如果要将结果集映射到实体类,我建议您使用BeanPropertyRowMapper
List List=jdbcTemplate.query(查询,参数,新BeanPropertyRowMapper(YourEntityClass.class));
希望这有帮助

编辑

在这里阅读更多


检查此StackOverflow链接:
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));