Executa if e else ,salva e altera no banco [RESOLVIDO]

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:

[code]public void salvar(Turma turma) throws Exception
{
try
{
PreparedStatement p = conexao.prepareStatement(“select * from turma where nome=’”+turma.getNome()+"’ and id_ensino=’"+turma.getId_ensino()+"’ and id_tipoturma=’"+turma.getId_tipoturma()+"’");
ResultSet resultado = p.executeQuery();
if(resultado.next())
turma.setId(resultado.getInt(“id”));
if(turma.getId()>0)
{
alterar(turma);
}
else
{
PreparedStatement ps = 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(Exception e)
{
e.printStackTrace();

		throw e;
	}
}[/code]

Método alterar:

public void alterar(Turma turma) { 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.executeUpdate(); } catch(Exception e) { e.printStackTrace(); } }
Obrigada =D

Bom dia Paty,

no seu método alterar o statment não deveria ser

?

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

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

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

Capaz!
mas eu estava fazendo ps.setInt(1, turma.getId());
Obrigada =D

Nossa desculpe mesmo, boiei aqui … não reparei que você tinha mais de um ps … manda o código completo do update …

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 =)

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 …

Bah!mas como eu posso arrumar isso?
da para encontrar o valor do q esta sobre escrevendo?

sera que eu nao estou fazendo algo errado no sql da pesquisa?
no banco ele executa correto…olha o print


O id deve ser auto_increment no banco e daí você não seta ele na inclusão (é gerado automaticamente).

O problema era o setId() na hora de inserir a nova turma mesmo!
removi e agora esta funcionando!
Obrigada pela ajuda meninos =D

Exatamente.

De nada paty, desculpe o rodeio … estava meio ocupado e te ajudei nas coxas … :lol:

Capaz!
obrigada =D