Executa if e else ,salva e altera no banco [RESOLVIDO]
14 respostas
P
paty_trind
Ola,
tenho um método salvar que pesquisa e verifica se já existe uma turma exatamente igual ele altera, se não ele insere uma nova.O problema é que ele esta alterando a turma já existente e inserindo uma nova :S
Alguém poderia me ajudar a encontrar o erro?
O código do método salvar é o seguinte:
publicvoidsalvar(Turmaturma)throwsException{try{PreparedStatementp=conexao.prepareStatement("select * from turma where nome='"+turma.getNome()+"' and id_ensino='"+turma.getId_ensino()+"' and id_tipoturma='"+turma.getId_tipoturma()+"'");ResultSetresultado=p.executeQuery();if(resultado.next())turma.setId(resultado.getInt("id"));if(turma.getId()>0){alterar(turma);}else{PreparedStatementps=conexao.prepareStatement("insert into turma (nome,id,ano,semestre,id_ensino,id_periodo,id_tipoturma,totalAlunosTurma) values(?,?,?,?,?,?,?,?) ");ps.setString(1,turma.getNome());ps.setInt(2,turma.getId());...ps.executeUpdate();}}catch(Exceptione){e.printStackTrace();throwe;}}
Método alterar:
publicvoidalterar(Turmaturma){try{StringBuffersql=newStringBuffer();sql.append("update turma set nome = ?,ano = ?, semestre = ?,id_ensino = ?, id_periodo = ?, id_tipoturma = ?,totalAlunosTurma = ? where id = ? ");PreparedStatementps=conexao.prepareStatement(sql.toString());ps.setString(1,turma.getNome());...ps.executeUpdate();}catch(Exceptione){e.printStackTrace();}}
E também pode ser que quando ele não encontra , devido ao nome estar com espaço ou alguma coisa assim, ele não entra naquele if para o update e vai em insert novamente. Você tem que conferir se o nome está vindo correto … tipo acentuação, espaços essas coisas
P
paty_trind
Bom dia Rodrigo,
Fiz esta alteração no método alterar mas acusa o seguinte erro:
java.sql.SQLException: No value specified for parameter 2
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929)
at com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2560)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2536)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2383)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2327)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2312)
at TurmaDAO.alterar(TurmaDAO.java:164)
at TurmaDAO.salvar(TurmaDAO.java:127)
...
Aponta para as linhas ps.executeUpdate();//linha 164 e alterar(turma);//linha 127
obg =D
rodrigocolasso
Desculpe, era para ser assim
mas só ter essa linha, parece que ali (o erro) você coloca um outro parâmetro e não coloca valor para ele
P
paty_trind
Capaz!
mas eu estava fazendo ps.setInt(1, turma.getId());
Obrigada =D
rodrigocolasso
Nossa desculpe mesmo, boiei aqui … não reparei que você tinha mais de um ps … manda o código completo do update …
P
paty_trind
haha
o código completo do update:
public void alterar(Turma turma)throws Exception
{
try{
StringBuffer sql = new StringBuffer();
sql.append("update turma set nome = ?,ano = ?, semestre = ?,id_ensino = ?, id_periodo = ?, id_tipoturma = ?,totalAlunosTurma = ? where id = ? ");
PreparedStatement ps = conexao.prepareStatement(sql.toString());
ps.setString(1, turma.getNome());
ps.setInt(2, turma.getAno());
ps.setInt(3, turma.getSemestre());
ps.setInt(4, turma.getId_ensino());
ps.setInt(5, turma.getId_periodo());
ps.setInt(6, turma.getId_tipoturma());
ps.setInt(7, turma.getTotalAlunosTurma());
ps.setInt(8, turma.getId());
ps.executeUpdate();
}
catch(Exception e)
{
e.printStackTrace();
throw e;
}
}
obg =)
rodrigocolasso
Hum, no seu insert você passa um id, mas da onde ver esse id, sendo que se não existe no banco ele deve estar na memória sobre escrevendo algum registro seu …
P
paty_trind
Bah!mas como eu posso arrumar isso?
da para encontrar o valor do q esta sobre escrevendo?
P
paty_trind
sera que eu nao estou fazendo algo errado no sql da pesquisa?
no banco ele executa correto…olha o print