数据库中:存有表orgData,表有一个列名detectTime,类型是datetime的。程序中:有Alert类类型变量aAlert,用来存放一个已从数据库中读出的记录。
    另外,还有一个Alert类类型变量temp,用来循环读出orgData表中的所有记录。现想,对aAlert变量中读出的detectTime,与temp循环读出的所有记录的detectTime做比较,判断时间   相差是否相差在10秒以内,是的调用merge()函数,不是的不做任何处理。这个程序如何实现啊?Alert.detectTime应该设置成什么java类型呢?

解决方案 »

  1.   

    不赞成在JAVA中处理,应该在数据库层处理,就是用SQL语句。
    因为,
    如果orgData表中记录很多,几万条的话,读数据速度就慢;数据全部放到JAVA变量中,显然消耗大量内存;再用JAVA方法逐个要比较detectTime内容,又要花费很多时间,占用CPU功率,算法再好,也避免不了记录大的时候要密集运算。
    而用SQL语句,显然一、两个语句就可以搞定,效率又高,速度又快。
      

  2.   

    查询数据出来的结果只有几条的的,因为查询时用做了许多限制。
    结果存在ResultSet rs中,temp循环读取rs中的记录。
    因为aAlert变最的信息不在数据库中上。所有要在java中时间比较。PS:对数据库的查询返回的rs,这是一个流吧,其实流是不是就是将所有查询的结果都放到主机内存中 的?
      

  3.   

    把aAlert中的detectTime拼到SQL中就可以了
      

  4.   

    不知道你的merge()函数做什么工作。
      

  5.   

    MERGE()随便当成一个函数就行了。
    在JAVA中与在数据库中分别如何实现啊?
      

  6.   

    假设aAlert中detectTime对应的值是vDetectTime,并且我假定你熟悉JDBC。
    用下面的SQL:
    select * from orgData
    where (detectTime-to_date(vDetectTime,'YYYY-MM-DD HH24:MI:SS'))*24*60*60 < 10
      

  7.   

    假设aAlert中detectTime对应的值是vDetectTime,并且我假定你熟悉JDBC。
    用下面的SQL:
    select * from orgData
    where (detectTime-to_date(vDetectTime,'YYYY-MM-DD HH24:MI:SS'))*24*60*60 < 10
    取得的是所有字段detectTime值与vDetectTime值相差10秒内的记录
      

  8.   

    detectTime-to_date(vDetectTime,'YYYY-MM-DD HH24:MI:SS')
    to_date()函数返回的是什么啊?
    相减后得到的又是什么啊?
    detectTime是datetime类型的。
    居士大侠