Erro em colocar uma data no mysql[Resolvido]

6 respostas
A

Olá sou Iniciante em JDBC
Estou com um problema em inserir uma data no banco

O erro que dá é o seguinte

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '11:10:46.0' at line 1
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:407)
	at com.mysql.jdbc.Util.getInstance(Util.java:382)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3603)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3535)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1989)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2150)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2570)
	at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:779)
	at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:622)
	at atualizacaoDataF.atuDataFim.main(atuDataFim.java:43)

A classe :

Class.forName("com.mysql.jdbc.Driver");
				System.out.println("Sem erros ");
				Connection conexao;
				conexao = DriverManager.getConnection(url, user, senha);
				Statement stmt = conexao.createStatement();
				ResultSet audioHistorico =  stmt.executeQuery("SELECT * FROM audio_historico a where acao = 3");
				while (audioHistorico.next()){
					String id = audioHistorico.getString("audio_id");
					System.out.println(id);
					
					Date data = audioHistorico.getDate(3);
					Time time = audioHistorico.getTime(3);
					 
					Timestamp dataSql = Timestamp.valueOf(data + " " + time);
					System.out.println(dataSql);
								
				boolean atualizou = stmt.execute("update audio_gravado set dt_finalizacao = " + dataSql);
					//System.out.println("Atualizou - " + atualizou);
				}
				
				conexao.close();

Alguem sabe pq q ele não aceita a variavel ?? :shock:

6 Respostas

drsmachado

A coluna dataSQL está como timestamp, time ou date?

A

acho que é um problema de formatação do campo no mysql…imagina q vc esteja tentando passar uma string em um campo Int…nao vai aceitar… acho q seu problema é esse ai… tenta tratar a variavel antes de inserir no banco…acho q resolve

A

então está como timestamp…

drsmachado

Então, faz assim.
Altera a string de

stmt.execute("update audio_gravado set dt_finalizacao = " + dataSql);

para

String sql = "update audio_gravado set dt_finalizacao = ?";

Então, troca o Statement por PreparedStatement e faz assim

PreparedStatement pstm = conexao.prepareStatement(sql);
java.sql.Timestamp timestamp = new java.sql.Timestamp(new Date().getTime());
pstm.setTimestamp(1, timestamp);
pstm.execute();
A

drsmachado …
Funcionou … nossaaa muitoooo obrigada

vlw…

drsmachado

Então, provavelmente o mysql não estava entendendo esta conversão

Timestamp dataSql = Timestamp.valueOf(data + " " + time);

Talvez você tenha importado o Timestamp do pacote java.util e não da java.sql. Embora ambas tenham nome idêntico, a forma como a data é configurada é diferente.

Dúvidas, manda aí.
Resolvido?
Edita o título do tópico e coloca [resolvido].

Criado 30 de maio de 2011
Ultima resposta 31 de mai. de 2011
Respostas 6
Participantes 3