Problema ao insirir um date no mysql

bom esse é o meu metodo:

String timeStamp = new SimpleDateFormat("yyy-MM-dd hh:mm:ss").format(Calendar.getInstance().getTime());
String sql = "INSERT INTO computador_requisicao(idusuario,nome,data_requisicao,observacao) VALUES("+Sessao.getInstancia().getUsuario().getId()+",?,"+timeStamp+",?)";
try {
    con.setAutoCommit(false);
    PreparedStatement stmt = con.prepareStatement(sql);
    stmt.setString(1, r.getNome());
    stmt.setString(2, r.getMotivo());
    stmt.executeUpdate();
    stmt.close();

}

error:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '07:02:11,'a')' at line 1

`

eu sei que o problema está no date

no bd está como datedata

não faço ideia onde está errada a sintaxe.

resolvido

String timeStamp = new SimpleDateFormat("yyy-MM-dd hh:mm:ss").format(Calendar.getInstance().getTime());
String sql = "INSERT INTO computador_requisicao(idusuario,nome,data_requisicao,observacao) VALUES("+Sessao.getInstancia().getUsuario().getId()+",?,?,?)";
try {
    con.setAutoCommit(false);
    PreparedStatement stmt = con.prepareStatement(sql);
    stmt.setString(1, r.getNome());
    stmt.setString(2, timeStamp );
    stmt.setString(3, r.getMotivo());
    stmt.executeUpdate();
    stmt.close();

Tem certeza que o formato é esse “yyy-MM-dd hh:mm:ss”? Não seria “yyyy-MM-dd hh:mm:ss”?

Uma dica a data corrente pode ser pega direto do banco assim não tem como o usuário alterar a data do sistema. Basta fazer isso:

String sql = "INSERT INTO computador_requisicao(idusuario,nome,data_requisicao,observacao) VALUES("+Sessao.getInstancia().getUsuario().getId()+",?,now(),?)";

1 curtida

Não é uma boa prática concatenar a String que será mandada como query ao DB. Coloque os values todos como "?" e mande os valores pelo stmt.setString ou setInt, setDouble etc. Fica mais fácil de entender e não deixa o código tão sujo. (Fica mais profissional:upside_down_face:)

Erro de sintaxe próximo às horas que você digitou. SeuSimpleDateFormat("yyy-MM-dd hh:mm:ss") ta faltando um y referente ao ano ai kkk só tem 3 y, sendo que ano são 4 dígitos.

vlw, do jeito que eu fiz funcionou normalmente também.

o problema não foi essa funcionou normalmente com a mesma sintaxe, a úncia coisa que eu fiz foi tirar a concatenação e setar ele no preparedstatment, depois que fiz isso sumiu o error.

Faça um teste mude a data do seu sistema operacional e veja se ele vai pegar a data corretamente. Normalmente o banco de dados fica em um servidor onde o usuário não tem acesso por isso falei para você passar a data corrente pelo SQL. Você entende a falha que existe no seu código?

1 curtida

realmente mano, funcionou, vlw mesmo.
vc poderia me dar um help como eu conseguiria pegar esse valor do bd e setar em uma string?

Normalmente quando você fizer o seu select

1 curtida

vlw man já marquei sua resposta como certa.
se tiver como me dar um help nisso:
como eu conseguiria pegar esse valor do bd e setar em uma string?

Você sabe buscar dados do banco?

1 curtida

sei sim select
setDate(rs.getDate(“data_requisicao”));

minha dúvida é pq é dateTime.

Geralmente eu faço assim:

setDate(rs.getTimestamp(“data_requisicao”).toLocalDateTime());

Só que eu uso o tipo LocalDateTime para minhas variáveis de data e hora

2 curtidas

vlwwwwwwwwwwwwwwww c é o cara.

1 curtida