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

14 respostas
P
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:
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;
		}
	}
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

14 Respostas

rodrigocolasso

Bom dia Paty,

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

?

rodrigocolasso

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

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

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

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

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

P

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


isaiaspf

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

P

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

rodrigocolasso

Exatamente.

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

P

Capaz!
obrigada =D

Criado 5 de agosto de 2011
Ultima resposta 5 de ago. de 2011
Respostas 14
Participantes 3