Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 创建一个日期,插入数据库,比较,它是不同的 目标_Sql_Oracle_Unit Testing_Date_Dbunit - Fatal编程技术网

Sql 创建一个日期,插入数据库,比较,它是不同的 目标

Sql 创建一个日期,插入数据库,比较,它是不同的 目标,sql,oracle,unit-testing,date,dbunit,Sql,Oracle,Unit Testing,Date,Dbunit,我有一个很奇怪的问题。我的目标是使用dbunit比较数据库中的动态日期。该数据库是Oracle数据库。这个动态日期是比较静态日期的今天日期 实验 为了比较日期,我使用以下非常简单的代码: @Test public void simpleDateTest() throws DatabaseUnitException, SQLException { // create a date corresponding to today Date today = new Date();

我有一个很奇怪的问题。我的目标是使用dbunit比较数据库中的动态日期。该数据库是Oracle数据库。这个动态日期是比较静态日期的今天日期

实验 为了比较日期,我使用以下非常简单的代码:

@Test
public void simpleDateTest() throws DatabaseUnitException, SQLException {
    // create a date corresponding to today
    Date today = new Date();

    // load a dataset
    IDataSet expectedDataSet = new FlatXmlDataSetBuilder().build(getClass()
            .getResource("/dataset.xml"));

    // replace [TODAY] by the today date
    ReplacementDataSet rDataSet = new ReplacementDataSet(expectedDataSet);
    rDataSet.addReplacementObject("[TODAY]", today);

    // insert the dataset
    DatabaseConnection connection = getConnection();
    DatabaseOperation.CLEAN_INSERT.execute(connection, rDataSet);

    // do a simple query to get some fields, em is the entity manager which uses the same connection as above
    Query q = em
            .createNativeQuery("SELECT ID, MY_DATE FROM MY_TABLE");
    List<Object[]> result = q.getResultList();

    // compare the date with today date
    assertEquals(today.getTime(), ((Date) result.get(0)[1]).getTime());
}
使用以下数据集:

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
    <MY_TABLE ID="1" MY_DATE="[TODAY]" />
</dataset>
问题 我不知道为什么,但是断言失败了!在比较这两个日期时,有几毫秒的差异。错误是这样的:

java.lang.AssertionError: expected:<1358262234801> but was:<1358262234000>
我不明白为什么会有不同的日期,因为它们通常是相同的!
有什么线索可以理解这个问题以及如何解决它吗?

Oracle日期类型的分辨率不是毫秒,而是秒。 在为数据库节省时间时,毫秒被简单地去除。当您查看实际值时,您会看到最后三位数字都是零。

假设今天是java.util.Date,java日期的精度为毫秒。另一方面,甲骨文日期没有毫秒精度。因此,当您在Oracle中存储java.util.Date并将其检索回来时,可能会丢失一些精度


您可以将数据存储在Oracle时间戳列中,该列的精度为毫秒。或者,在将Java日期写入数据库之前,您可以去掉它的毫秒数。

似乎在两个日期之间经过了一段时间calls@Quassnoi:事实上,它引用的是同一个日期,因此该日期一旦实例化,就无法更改