【问题标题】:Error inserting DateTime values on database在数据库中插入 DateTime 值时出错
【发布时间】:2019-05-23 08:52:35
【问题描述】:

我在网上搜索了这个,甚至在 StackOverflow 上的一些帖子都谈到了这个,但从未解决我的问题。 我在将 DateTime 插入数据库时​​遇到问题。第一个问题是我只知道如何从 java 制作 StringRequests,所以我将日期转换为字符串(输出示例:“2000-04-23 10:25:06”)。

这是我的java代码:

StringRequest stringRequest = new StringRequest(Request.Method.GET, testInserirPontoURL,
    new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Toast.makeText(getApplicationContext(), response, Toast.LENGTH_SHORT).show();
        }
    },
    new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {}
    }) {
  @RequiresApi(api = Build.VERSION_CODES.O)
  @Override
  public Map<String, String> getHeaders() throws AuthFailureError {
      String codColab = getIntent().getStringExtra("codigo colaborador");
      LocalDate ldHoraEntrada = LocalDate.of(ponto.getEntrada().get(Calendar.YEAR), ponto.getEntrada().get(Calendar.MONTH) + 1, ponto.getEntrada().get(Calendar.DAY_OF_MONTH));
      String horaEntrada = ldHoraEntrada + " " + sdfHora2.format(ponto.getEntrada().getTime());
      LocalDate ldSaidaAlmoco = LocalDate.of(ponto.getSaidaAlmoco().get(Calendar.YEAR), ponto.getSaidaAlmoco().get(Calendar.MONTH) + 1, ponto.getSaidaAlmoco().get(Calendar.DAY_OF_MONTH));
      String saidaAlmoco = ldSaidaAlmoco + " " + sdfHora2.format(ponto.getSaidaAlmoco().getTime());
      LocalDate ldEntradaTarde = LocalDate.of(ponto.getEntradaTarde().get(Calendar.YEAR), ponto.getEntradaTarde().get(Calendar.MONTH) + 1, ponto.getEntradaTarde().get(Calendar.DAY_OF_MONTH));
      String entradaTarde = ldEntradaTarde + " " + sdfHora2.format(ponto.getEntradaTarde().getTime());
      LocalDate ldHoraSaida = LocalDate.of(ponto.getSaida().get(Calendar.YEAR), ponto.getSaida().get(Calendar.MONTH) + 1, ponto.getSaida().get(Calendar.DAY_OF_MONTH));
      String horaSaida = ldHoraSaida + " " + sdfHora2.format(ponto.getSaida().getTime());

      Map<String, String> map = new HashMap<String, String>();
      map.put("horaEntrada", horaEntrada);
      map.put("saidaAlmoco", saidaAlmoco);
      map.put("entradaTarde", entradaTarde);
      map.put("horaSaida", horaSaida);
      map.put("cod_colab", codColab);
      return map;
  }
};
RequestQueue requestQueue = Volley.newRequestQueue(PontoActivity.this);
requestQueue.add(stringRequest);

注意:codColab 在这里是一个字符串,但在数据库中是一个 int,但它工作得很好,因为我已经用它来登录了。

这是我的php代码:

    if($_SERVER['REQUEST_METHOD']=='GET'){

    $horaEntrada = $_GET['horaEntrada'];
    $saidaAlmoco = $_GET['saidaAlmoco'];
    $entradaTarde = $_GET['entradaTarde'];
    $horaSaida = $_GET['horaSaida'];
    $cod_colab = $_GET['cod_colab'];

    $sql= "INSERT INTO ponto (hora_entrada,saida_almoco,entrada_tarde,hora_saida,cod_colab) VALUES ('".$horaEntrada."', '".$saidaAlmoco."', '".$entradaTarde."', '".$horaSaida."', '".$cod_colab."')";
    //$sql= "INSERT INTO `ponto` (`id`, `hora_entrada`, `saida_almoco`, `entrada_tarde`, `hora_saida`, `cod_colab`) VALUES (NULL, '2019-05-15 10:25:41', '2019-05-09 14:25:37', '2019-05-16 11:20:13', '2019-05-09 13:25:30', '1')";
    //$sql= "INSERT INTO ponto (hora_entrada,saida_almoco,entrada_tarde,hora_saida,cod_colab) VALUES ('$horaEntrada', '$saidaAlmoco', '$entradaTarde', '$horaSaida', '$cod_colab')";

    if (mysqli_query($conn, $sql)){
        echo "registado";
    } else {
        echo "erro a registar";
    }

注意:注释行是我尝试过的。第一个注释行有效,但我想要变量的值

【问题讨论】:

  • @Dharman 这不是问题,问题是它没有插入。
  • 您是否已经修复了 SQL 语句,但您仍然面临原来的问题?那么请更新有问题的代码。
  • 顺便说一句,在您的 Java 代码中,您混合了旧的和现代的日期时间类,这不是一个好主意。如果您无法让 ponto.getEntrada() 返回现代类型,我建议您执行 ((GregorianCalendar) ponto.getEntrada()).toZonedDateTime()(API 级别 26+)或 DateTimeUtils.toZonedDateTime(ponto.getEntrada())(如果使用 ThreeTenABP)转换为 ZonedDateTime,然后使用格式化DateTimeFormatter.
  • 尝试失败后$conn-&gt;error 的值是多少?

标签: java php android mysql


【解决方案1】:

由于 $horaSaida 可以为 NULL,输出将是这样的:

INSERT INTO ponto (hora_entrada,saida_almoco,entrada_tarde,hora_saida,cod_colab) VALUES ('',...)

而 '' 不是正确的数据时间值

你可以这样得到正确的 SQL:

$sql= "INSERT INTO ponto (hora_entrada,saida_almoco,entrada_tarde,hora_saida,cod_colab) VALUES (". (null === $horaEntrada ? "NULL" : "'$horaEntrada'") . ", '".$saidaAlmoco."', '".$entradaTarde."', '".$horaSaida."', '".$cod_colab."')";

【讨论】:

    猜你喜欢
    • 2019-10-11
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2014-06-12
    相关资源
    最近更新 更多