3

Javaで2つの日付を比較する必要がありますが、データベースから取得した日付は、挿入されたものと同じ値ではありません。

@Test
public void testCompareHoraHardcore() {
    String sql = "update solicitacao_viagem set "
            + "hora_retorno=?, id_veiculo=?, id_responsavel_solicitacao=?, "
            + "id_responsavel_autorizante=? where id_solicitacao_viagem=? ";
    Timestamp timestamp1 = new Timestamp(System.currentTimeMillis());
    try {
        PreparedStatement stmt = connection.prepareStatement(sql);
        stmt.setTimestamp(1, timestamp1);
        stmt.setInt(2, 90);
        stmt.setInt(3, 337);
        stmt.setInt(4, 337);
        stmt.setInt(5, 91);
        stmt.executeUpdate();
        stmt.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    Timestamp timestamp2 = null;
    try {
        sql = "select * from solicitacao_viagem where id_solicitacao_viagem=?";
        PreparedStatement stmt = connection.prepareStatement(sql);
        stmt.setInt(1, 91);
        stmt.executeQuery();
        ResultSet rs = stmt.executeQuery();
        rs.next();
        timestamp2 = rs.getTimestamp("hora_retorno");
        stmt.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }

    assertEquals(timestamp1.getTime(), timestamp2.getTime());
}

このテストは次のように戻ります。

Testcase: testCompareHoraHardcore(com.model.dao.SolicitacaoViagemDAOTest):  FAILED
expected:<1360553289573> but was:<1360553289000>
junit.framework.AssertionFailedError: expected:<1360553289573> but was:<1360553289000>
at com.model.dao.SolicitacaoViagemDAOTest.testCompareHoraHardcore(SolicitacaoViagemDAOTest.java:349)

MySQLが最後の3つの数字を削減しているのはなぜですか?

MySQL 5.5.22とJava(TM)SEランタイム環境(ビルド1.7.0_11-b21)を使用しています。

列「hora_retorno」はTIMESTAMPです。

前もって感謝します。

4

2 に答える 2

3

MySqlは秒単位の精度で保存DATETIMEします。これがドキュメントからの引用ですTIMESTAMP

A DATETIME or TIMESTAMP value can include a trailing fractional seconds
part in up to microseconds(6 digits) precision. 

Although this fractional part is recognized, 
it is discarded from values stored into DATETIME or TIMESTAMP columns
于 2013-02-11T03:57:33.483 に答える
2

これによると、MySQLはタイムスタンプ列(または他の日時タイプ)に秒の小数部を格納しません。 http://dev.mysql.com/doc/refman/5.0/en/fractional-seconds.html

于 2013-02-11T03:57:01.713 に答える