Java - ArrayLists mixte?
-
22-10-2019 - |
Question
Est-il possible de stocker un mélange de types d'objets dans un ArrayList? Si oui, comment?
est ce que je l'ai essayé jusqu'à présent:
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));
}
}
Mais il jette une exception coulée.
Merci d'avance pour toute entrée!
La solution
est ce que vous devez avoir:
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);
}
}
Autres conseils
Désolé de crash de votre défilé, mais vous ne devrait pas utiliser un ArrayList de 3 (ou tout autre) différents types pour commencer. Si l'information est liée, créez une classe qui contient les informations connexes et créer un ArrayList qui détient un seul type. Les objets de cette classe
Modifier 1: Par exemple dire une classe pour contenir les données comme ceci:
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;
}
}
et utilisé comme ceci:
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();
}
}
Pourquoi faites-vous ce si dur? PreparedStatement
a une méthode setObject()
- utilise juste que:
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
Remarque: L'API SQL Java compte tout de 1, pas de zéro, les colonnes sont numérotées de 1 ... size () et non 0 ... size () - 1