Enviar datas do tipo TIMESTAMP via Android

10 respostas Resolvido
androiddata
clicnet

Pessoal,

Estou desenvolvendo um aplicativo em android e para gravar os dados no BD Mysql estou usando um webservice restful onde faço a persistência com jdbc, gostaria de gravar em uma tabela a data atual do servidor, o tipo de dado da coluna data tá definido como timestamp, a dúvida é, como enviar do aplicativo android o comando que irá gravar a data e hora do servidor no banco?

De acordo com o código abaixo eu consigo gravar somente a data outro detalhe, ele está pegando a data do android e não do servidor:

Pedidos pedidos = new Pedidos(txt,"pendente",comentario.getText().toString(),
                        opcaoSelecionada,id, new Timestamp(System.currentTimeMillis()));

                Call<Boolean> call = ApiClient.getUsuario().criaPedido(pedidos);
                call.enqueue(new Callback<Boolean>() {
                    @Override
                    public void onResponse(Call<Boolean> call, Response<Boolean> response) {
                        if (response.body().equals(true)){
                            AlertDialog.Builder dialogo1 = new AlertDialog.Builder(PedidosActivity.this);
                            dialogo1.setTitle("Parabéns!");
                            dialogo1.setMessage("Pedido realizado com sucesso!");
                            dialogo1.setNeutralButton("ok", null);
                            dialogo1.show();
                            progressDialog.dismiss();

                            Log.d("my_tag", "Aceito: " + response.code());
                            Log.d("my_tag", "Aceito: pedido realizado com sucesso! " + response.isSuccessful());
                        }else{
                            Log.d("my_tag", "Recusado: existe um pedido em aberto!: " + response.body());
                            AlertDialog.Builder dialogo1 = new AlertDialog.Builder(PedidosActivity.this);
                            dialogo1.setTitle("Erro!");
                            dialogo1.setMessage("Você possui um pedido em aberto!");
                            dialogo1.setNeutralButton("ok", null);
                            dialogo1.show();
                            progressDialog.dismiss();
                        }
                    }
                    @Override
                    public void onFailure(Call<Boolean> call, Throwable t) {
                        if (progressDialog.isShowing())
                            progressDialog.dismiss();
                        Toast.makeText(getBaseContext(), "Falha na conexão!", Toast.LENGTH_LONG).show();
                        Log.d("my_tag", "ERROR: " + t.getMessage());
                    }
                });
            }
        });

10 Respostas

L

Por que não invoca a função now() do MySQL em vez de inserir a data vinda do android?
INSERT INTO TABELA (coluna1, coluna2, colunaN, colunaQueVaiAData) VALUES (?, ?, ?, now());

clicnet

Como fica o PreparedStatement?
Estou usando jdbc.

L

Como eu citei…
Mas, se quer que mostre na tua query, posta ela aí.

clicnet
if (numPedidos == 0){

PreparedStatement stmt = null;

try {

stmt = conn.prepareStatement ("INSERT INTO pedidos (loja, status, comentario, quantidade, id_usuario, now()) "

+ “VALUES(?,?,?,?,?,?)”);

stmt.setString(1, pedidos.getLoja());

stmt.setString(2, pedidos.getStatus());

stmt.setString(3, pedidos.getComentario());

stmt.setInt(4, pedidos.getQuantidade());

stmt.setInt(5, pedidos.getId_usuario());

stmt.setTimestamp(6, new Timestamp(calendar.getTimeInMillis()));
sucesso = stmt.executeUpdate();
        if (sucesso > 0) {
             System.out.println("PEDIDO REALIZADO COM SUCESSO!");
clicnet

Coloquei o now() depois que vc falou.

L

Tem certeza? Compara o que eu mostrei e o que você fez:
Você
INSERT INTO pedidos (loja, status, comentario, quantidade, id_usuario, **now()**) VALUES(?,?,?,?,?,?)
Eu:
INSERT INTO TABELA (coluna1, coluna2, colunaN, colunaQueVaiAData) VALUES (?, ?, ?, **now()**)

clicnet

Entendi, falta de atenção minha.

clicnet

Deixa essa linha: stmt.setTimestamp(6, new Timestamp(calendar.getTimeInMillis())); ou elimina?

L
Solucao aceita

Elimina, afinal, você não precisa mais dessa data.

clicnet

Fluiu, agora ficou bem mais tranquilo, porque enviar do android tava osso.

Criado 20 de março de 2017
Ultima resposta 20 de mar. de 2017
Respostas 10
Participantes 2