Java + MySQL (data)

8 respostas
C

Oiii pessoal, estou com um probleminha…

Tenho um sistema construido em Java com MySQL, para um cinema. Portanto, tem uma parte onde se é adastrada a programação do cinema onde se insere uma data inicial e uma data final e os dados para a gravação das sessões que são armazenadas em tabelas distintas, uma tb para a programaçao (data inicio e data fim) e outra para as sessoes (possui a data da sessao e seus dados) até ai tudo bem… O problema é quando eu insiro uma programação de um mes ao outro. Por exemplo, se eu colcoar como data inicial o dia ‘30/03/2007’ até ‘01/04/2007’ na tabela da programação os dados são gravados certos, ams na tabela das sessoes, em vez de gravar o dia ‘01/04/2007’ ele grava como ‘01/03/2007’. E agora? Alguem tem alguma susgestão???

// Classe de Negocio - Sessao

	public void setDataSessao(String data) {
		if(data==null||data==""){
			throw new IllegalArgumentException("Erro em " + this.getClass()
					+ ". A data da sessão não pode ser vazia ou nula.");
		}else{
			// Validacao
			int dia, mes, ano;
			try {
				String tdata[] = data.split("/");
				dia = Integer.parseInt(tdata[0]);
				mes = Integer.parseInt(tdata[1]) - 1;
				ano = Integer.parseInt(tdata[2]);
		} catch (Exception e) {
				throw new IllegalArgumentException("Erro em " + this.getClass()
						+ ". A data da Sessão não foi informada corretamente.") ;
			}
			dataHora.set(Calendar.DAY_OF_MONTH, dia);
			dataHora.set(Calendar.MONTH, mes);
			dataHora.set(Calendar.YEAR, ano);
			
			if (dia != dataHora.get(Calendar.DAY_OF_MONTH)
					|| mes != dataHora.get(Calendar.MONTH)
					|| ano != dataHora.get(Calendar.YEAR)) {
				throw new IllegalArgumentException("Data da Sessao é inválida");
			}
		}
	}

	public String getDataSessao() {
		SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy");
		return f.format(this.dataHora.getTime());
	}
//MySQLSessao

	public long inserirSessao(Sessao s) throws SQLException {
		String sql = "insert into tb_sessao(id_programacao, dt_sessao, " +
				"hr_horario_sessao, id_filme, id_sala, ic_ativo) values (?,?,?,?,?,?)";
		PreparedStatement stmt = this.connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
		stmt.setLong(1, s.getIdProgramacao());
		try {
			stmt.setString(2, ConverteData.parseDataBrToIso(s.getDataSessao()));
		} catch (ConverteDataException e) {
			throw new SQLException("Erro " + this.getClass()
					+ ". " + e.getMessage());
		}
		stmt.setString(3, s.getHorarioSessao());
		stmt.setLong(4, s.filme.getId());
		stmt.setLong(5, s.sala.getId());
		stmt.setString(6, "S");
		
		stmt.execute();
		ResultSet rs = stmt.getGeneratedKeys();
		long idSessao;
		if(rs.next()){
			idSessao = rs.getLong(1);
		}else{
			idSessao = -1;
		}
		
		rs.close();
		stmt.close();
		
		return idSessao;
	}

8 Respostas

marciobarroso

Oi … Isto esta mto estranho. Eu te aconselho a dar uma revisada na lógica de manipilação de datas, pois é onde parece haver problema. Não acredito ser no MySql, e sim antes de chegar nele.

[]'s

marcioa1

Camila,

Você sabia que na interface Calendar o mês janeiro é 0, fevereiro é 1, março é2 e abril é 3 ?

Se Calendar.MONTH==2, estamos em março

Espero ter ajudado

Márcio

C

marciobarroso:
Oi … Isto esta mto estranho. Eu te aconselho a dar uma revisada na lógica de manipilação de datas, pois é onde parece haver problema. Não acredito ser no MySql, e sim antes de chegar nele.

[]'s

Oii Marcio… o problema é que nã tneho tempo para isto :cry:
Preciso entregar este projeto até o final da tarde =/ mass obrigado mesmo assim

C

marcioa1:
Camila,

Você sabia que na interface Calendar o mês janeiro é 0, fevereiro é 1, março é2 e abril é 3 ?

Se Calendar.MONTH==2, estamos em março

Espero ter ajudado

Márcio

Sim pensei nisto, até coloquei o + 1 em vez do - 1 no mês, mas não funcionou… o meu maior problema é que não fui eu quem fiz o projeto, apenas estou dando manutenção do sistema, e comecei agora na empresa =/

Bom brigado mesmo assim

P

oi…
fiz um teste com os metodos setDataSessao e setDataSessao e, apesar das gambiarras, esta funcionando.

String data1 = "01/04/2007";
		String data2 = "01/4/2007";
		
		System.out.println(data1);
		setDataSessao(data1);
		System.out.println(getDataSessao());
		System.out.println(data2);
		setDataSessao(data2);
		System.out.println(getDataSessao());

Saida

01/04/2007
01/04/2007
01/4/2007
01/04/2007

Tente colocar um System.out.prinln antes da execução do insert para ver se o problema não esta ali.

[EDITADO]
O que o metodo ConverteData.parseDataBrToIso faz ?

C

pm:
oi…
fiz um teste com os metodos setDataSessao e setDataSessao e, apesar das gambiarras, esta funcionando.

String data1 = "01/04/2007";
		String data2 = "01/4/2007";
		
		System.out.println(data1);
		setDataSessao(data1);
		System.out.println(getDataSessao());
		System.out.println(data2);
		setDataSessao(data2);
		System.out.println(getDataSessao());

Saida

01/04/2007
01/04/2007
01/4/2007
01/04/2007

Tente colocar um System.out.prinln antes da execução do insert para ver se o problema não esta ali.

[EDITADO]
O que o metodo ConverteData.parseDataBrToIso faz ?

Ele converte a data para o formato yyyy/mm/dd para armazenar no banco de dados

Então acho que você nao entendeu meu problema… o problema é qdo eu insiro a data 1 como 30/03/2007 e a data 2 como 01/04/2007 a saida vem como:

30/03/2007
01/03/2007 &gt&gt&gt&gt&gt&gt&gt&gt&gt Deveria ser 01/04/2007

testei o insert e está tudo ok com ele…

P

Desculpe-me, mas agora ki eu naum entendi…alias, o campo no mysql esta definido como Date, ne ?

se sim, use setDate do PreparedStatement , e tire estas gambiarras !!

coloque o codigo que faz a chamada destes metodos para inclusao !!

att,

C

pm:
Desculpe-me, mas agora ki eu naum entendi…alias, o campo no mysql esta definido como Date, ne ?

se sim, use setDate do PreparedStatement , e tire estas gambiarras !!

coloque o codigo que faz a chamada destes metodos para inclusao !!

att,

Oii então esta definido sim como Date, essas gambiarras rs são apenas para que seja mostrado a data no formato BR para o usuario

Criado 28 de fevereiro de 2007
Ultima resposta 28 de fev. de 2007
Respostas 8
Participantes 4