public ArrayList<Anagrafica> aggiornaAnagrafica(String nome, String cognome, String citta, int eta, int id) {
boolean verifica = false;
String queryUpdate = "update anagrafica set";
String addNome = null, addCitta = null, addCognome = null, addId = "where id = ?", virgola = ",";
int addEta = 0;
Connection dbConnection = null;
Statement statement = null;
ResultSet rSet = null;
PreparedStatement pStatement = null;
int condizione = 1;
try {
dbConnection = Database.getConnection();
statement = dbConnection.createStatement();
if (nome != null && !"".equals(nome.trim())) {
if (verifica) {
// fai l'aggiornamento della query precedente
addNome = " nome = ? ";
queryUpdate += virgola + addNome; // concatena e aggiorna
} else {
addNome = " nome = ? ";
queryUpdate += addNome; // concatena e aggiorna
}
verifica = true;
}
System.out.println(queryUpdate);
if (cognome != null && !"".equals(cognome.trim())) {
if (verifica) {
// fai l'aggiornamento della query precedente
addCognome = " cognome = ? ";
queryUpdate += virgola + addCognome; // concatena e aggiorna
} else {
addCognome = " cognome = ? ";
queryUpdate += addCognome; // concatena e aggiorna
}
verifica = true;
}
System.out.println(queryUpdate);
if (citta != null && !"".equals(citta.trim())) {
if (verifica) {
// fai l'aggiornamento della query precedente
addCitta = " citta = ? ";
queryUpdate += virgola + addCitta; // concatena e aggiorna
} else {
addCitta = " citta = ? ";
queryUpdate += addCitta; // concatena e aggiorna
}
verifica = true;
}
System.out.println(queryUpdate);
if (eta != 0) {
if(verifica) {
queryUpdate += virgola + String.valueOf(addEta);//concatena e aggiorna
}else {
queryUpdate += String.valueOf(addEta);
}
verifica = true;
}
System.out.println(queryUpdate);
if (id != 0) {
queryUpdate += addId;
verifica = true;
}
System.out.println("Update: " + queryUpdate);
// Avvia l'aggiornamento in sql oracle
pStatement = dbConnection.prepareStatement(queryUpdate);
// aggiorna nome
if (nome != null && !nome.trim().equals("")) {
pStatement.setString(condizione++, nome);
}
// aggiorna cognome
if (cognome != null && !cognome.trim().equals("")) {
pStatement.setString(condizione++, cognome);
}
// aggiorna citta
if (citta != null && !citta.trim().equals("")) {
pStatement.setString(condizione++, citta);
}
// aggiorna eta
if (eta != 0) {
pStatement.setInt(condizione++, eta);
}
// aggiorna id
if (id != 0) {
pStatement.setInt(condizione++, id);
}
System.out.println("Update: " + queryUpdate);
pStatement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (dbConnection != null && statement != null && rSet != null && pStatement != null) {
dbConnection.close();
statement.close();
rSet.close();
pStatement.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return lista;
}
L'errore che mi dà è questo:
update anagrafica set nome = ? , cognome = ? , citta = ?
update anagrafica set nome = ? , cognome = ? , citta = ? ,0
Update: update anagrafica set nome = ? , cognome = ? , citta = ? ,0where id = ?
java.sql.SQLException: Parameter index out of range (5 > number of parameters, which is 4).
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3288)
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3272)
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3314)
at com.mysql.jdbc.PreparedStatement.setInt(PreparedStatement.java:3258)
at it.daoImpl.AnagraficaImpl.aggiornaAnagrafica(AnagraficaImpl.java:250)
at it.test.MioTest.main(MioTest.java:26)