Erro de perda de dados ao inserir no banco

Galera eu insiro os dados no sql server e alguns dados de alguns campos se perdem, mas eu debuguei e os dados estao la nos beans!!! e o estranho e porque ele perde so alguns numeros de um campo exemplo cnpj ele perde os 3 primeiros numeros!!!

[code]
public void inserirDados(Collection list) {

	Sindical_Bean beanInterno = new Sindical_Bean();
	Iterator it = list.iterator();
	
	try {
		stmt = conexaoSQLServer.createStatement();
		int pos = 30000;
		while (it.hasNext()) {
			beanInterno = (Sindical_Bean) it.next();
					stmt.execute("INSERT INTO tblBaixaSindical (idPagamento,cnpj"
							+ ",valorJuro,valorMulta,valorDaGuia,exercicio,tipo,meio"
							+ ",banco,entidadeSindical,usuario,capitalSocial,dataVencimento"
							+ ",dataPagamento,dataBaixa) VALUES("
							+ pos
							+ ","
							+ beanInterno.getCnpj()
							+ ",0,0,"
							+ beanInterno.getValorContribuicao()
							+ ","
							+ beanInterno.getExercicio()
							+ ",'guia','normal','bb','Fecomercio',63,0,"
							+ beanInterno.getDataVencimento()
							+ ","
							+ beanInterno.getDataPagamento()
							+ ","
							+ beanInterno.getDataBaixa() + ");");
			pos++;
		}
		System.out.println(beanInterno.getCnpj());
		System.out.println(beanInterno.getDataPagamento());
	} catch (SQLException e) {
		e.printStackTrace();
	}
	
	
}[/code]

Se alguem souber!!!

Falow!!!

Verifique o tamanho dos campos no seu bd, o tamanho que vc está mandando inserir pode ser maior que a capacidade do campo, e outra dica use PreparedStatement.

Ex:


String sql = "insert into palpites (cod_jogo,cod_usuario,resultado)values(?,?,?)";
PreparedStatement stmt = this.connection.prepareStatement(sql);
stmt.setInt(1, palpite.getCodigoJogo());
stmt.setInt(2,palpite.getCodigoUsuario());
stmt.setString(3, palpite.getResultado());
		

Já foi sugerido para você usar PreparedStatements. Até quando vai ficar se debatendo com strings?

Cara, o título do seu post está errado: é “Erro de perda de dados”, não “perca de dados”.

Eu troquei para preparedStatement e funcionou(nao perde mais dados), mas em compensação ele nao consegue inserir o ultimo registro so inserindo 7 em vez de 8 registros!

[code]public void inserirDados(Collection list) {

	Sindical_Bean beanInterno = new Sindical_Bean();
	Iterator it = list.iterator();
	
	try {
		PreparedStatement stmt = conexaoSQLServer.prepareStatement("INSERT INTO tblBaixaSindical (idPagamento,cnpj"
				+ ",valorJuro,valorMulta,valorDaGuia,exercicio,tipo,meio"
				+ ",banco,entidadeSindical,usuario,capitalSocial,dataVencimento"
				+ ",dataPagamento,dataBaixa) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);");
		int pos = 30000;
		while (it.hasNext()) {
			beanInterno = (Sindical_Bean) it.next();
							
			stmt.setInt(1,pos);
			stmt.setString(2,beanInterno.getCnpj());
			stmt.setString(3,"0");
			stmt.setString(4,"0");
			stmt.setString(5,beanInterno.getValorContribuicao());
			stmt.setString(6,beanInterno.getExercicio());
			stmt.setString(7,"guia");
		    stmt.setString(8,"boleto");
		    stmt.setString(9,"bb");		
		    stmt.setString(10,"Fecomercio");
		    stmt.setString(11,"63");		
		    stmt.setString(12,"0");
		    stmt.setString(13,"31/02/2006");
		    stmt.setString(14,beanInterno.getDataPagamento());
		    stmt.setString(15,"18/05/2006");
		    stmt.execute();
		    pos++;
		}
		} catch (SQLException e) {
		e.printStackTrace();
	}
	
	
}[/code]

se alguem souber1!!
Falow!1

Tem certeza que sua lista tem exatamente 8 elementos distintos ?
Dica: imprima o tamanho da lista que você recebeu como parâmetro.

Thingol eu imprimi e sairam os 8 elementos da lista!!! :shock:
Mas no banco so aparecem 7 mesmo!!!
Se tiver alguma ideia!!!

Valeu!!!

O código está correto, portanto três chances:

  1. Uma exceção é capturada antes de inserir o último elemento, mas neste caso o stackTrace seria impresso no console.
  2. Alguma outra Thread altera a lista antes do iterator ser inicializado.
  3. Você está enganado e a lista tem 7 elementos ou no banco são inseridos 8 elementos.

Dica: você pode declarar variáveis dentro do laço assim

while (it.hasNext()) { Sindical_Bean beanInterno = (Sindical_Bean) it.next(); // .. }
O Java é esperto e não vai gastar memória à toa, então você ganha todas as vantagens de declarar a variável no escopo certo \o/