Java-混合ArrayList?

问题描述

| 是否可以在ArrayList中存储混合的对象类型?如果可以,怎么办? 到目前为止,这是我尝试过的:
List<Object> list = new ArrayList<Object>();

list.add(new String(\"Hello World\"));
list.add(new Integer(1));
list.add(new Long(1l));

for (i = 0; i < list.size(); i++) {
    if (list.get(i) instanceof String){
        sqlPreparedStatement.setString((i+1),(String) list.get(i));
    } else if (list.get(i) instanceof Integer) {
        sqlPreparedStatement.setInt((i+1),(Integer) list.get(i));
    } else if (list.get(i) instanceof Long) {
        sqlPreparedStatement.setLong((i+1),(Long) list.get(i));
    }
}
但这会引发强制转换异常。 预先感谢您的任何投入!     

解决方法

        这是您应该拥有的:
List<Object> list = new ArrayList<Object>();

list.add(new String(\"Hello World\"));
list.add(new Integer(1));
list.add(new Long(1l));

for (Object obj: list) {
    if (obj instanceof String){
        sqlPreparedStatement.setString((String) obj);
    } else if (obj instanceof Integer) {
        sqlPreparedStatement.setInt((Integer) obj);
    } else if (obj instanceof Long) {
        sqlPreparedStatement.setLong((Long) obj);
    }
}
    ,        抱歉使您的游行崩溃,但您不应该一开始使用3(或任何)不同类型的ArrayList。如果信息相关,则创建一个保存相关信息的类,并创建一个仅包含一种类型的ArrayList:此类的对象。 编辑1: 例如说一个类来保存数据,如下所示:
class SqlData {
   private String textData;
   private int intData;
   private long longData;

   public SqlData(String textData,int intData,long longData) {
      this.textData = textData;
      this.intData = intData;
      this.longData = longData;
   }

   public String getTextData() {
      return textData;
   }

   public int getIntData() {
      return intData;
   }

   public long getLongData() {
      return longData;
   }

}
并像这样使用:
  List<SqlData> sqlDataList = new ArrayList<SqlData>();
  sqlDataList.add(new SqlData(\"Hello World\",1,11L));

  for (int i = 0; i < sqlDataList.size(); i++) {
     try {
        sqlPreparedStatement.setString(i + 1,sqlDataList.get(i).getTextData());
        sqlPreparedStatement.setInt(i + 1,sqlDataList.get(i).getIntData());
        sqlPreparedStatement.setLong(i + 1,sqlDataList.get(i).getLongData());
     } catch (SQLException e) {
        e.printStackTrace();
     }
  }
    ,        你为什么要这么难?
PreparedStatement
具有
setObject()
方法-只需使用:
    List<Object> list = new ArrayList<Object>();
    list.add(new String(\"Hello World\"));
    list.add(new Integer(1));
    list.add(new Long(1l));
    for (int i = 0; i < list.size(); i++)
        sqlPreparedStatement.setObject(i + 1,list.get(i)); // NOTE: columns count from 1
注意:Java SQL API从1开始计数所有内容,而不是从0开始计数,因此列的编号为1 ... size()而不是0 ... size()-1     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...