【问题标题】:Replacing mysql specific functionality with HSQLDB用 HSQLDB 替换 mysql 的特定功能
【发布时间】:2011-07-06 09:34:41
【问题描述】:

我正在重构大量使用本地主机 mysql 的测试代码。可以想象这不是最优的,所以我用 hsqldb 替换 mysql(出于测试目的,生产仍然使用 mysql)。到目前为止,这(有点)进展顺利,因为代码仅使用标准 sql。然而,现在我遇到了障碍。 该代码轮询一个表以获取其最后更新时间并将其发送给所有观察者。该代码使用 mysql 特定 (AFAIK) 语法 show table status from someDb like tableName,然后从结果集中提取 update_time 列。
我需要在 HSQLDB 中实现相同的东西,但我找不到任何东西。 我查看了 java.sql.DatabaseMetaData 类,看看那里是否有任何我可以使用但无济于事的东西。

我无法将谷歌问题的格式设置得足够窄以至于有用,所以我求助于 stackoverflow! 到目前为止,我还没有找到任何关于 HSQLDB:s 特殊表的信息。

【问题讨论】:

    标签: java mysql jdbc hsqldb


    【解决方案1】:

    直到 2.1 RC4 版本,HSQLDB 没有此功能的内置功能。您可以在给定表上定义 SQL 触发器,将更新时间存储在另一个用户定义的表中。此示例存储最后一次 INSERT 时间。其他触发器(AFTER UPDATE 或 AFTER DELETE)应定义为存储上次 UPDATE 或 DELETE 时间。

    create table updatetime (table_name varchar(128) PRIMARY KEY, update_time timestamp );
    
    create trigger trig after insert on sometable
    update updatetime set update_time = current_timestamp 
    where updatetime.table_name = 'SOMETABLE'
    

    【讨论】:

    • 原话原样。那么,它就是一个触发器。谢谢
    【解决方案2】:

    我不知道我是否正确,但我知道 HSQL 中有一个信息方案:

    查看 HSQL 手册中的信息方案部分 (http://hsqldb.org/doc/2.0/guide/databaseobjects-chapt.html)

    这个方案中应该有一些视图来保存所有的元数据。 试试你是否可以在那里找到一个名为“TABLES”的视图,并检查你是否在该视图的某个列中找到了你正在寻找的信息。

    更新:找到这个问题的完美答案:

    How to see all the tables in an HSQLDB database?

    【讨论】:

    • 谢谢!我已经能够获取 INFORMATION_SCHEMA.TABLES 的元数据,我现在正在寻找一个“更新”字段。
    • INFORMATION_SCHEMA.TABLES 似乎没有任何使用信息,遗憾的是。
    • 嗯,是的,似乎没有这样的功能,至少我找不到任何东西:)。您可能必须在测试特定表中添加一个新的时间戳列,以模仿 mysql 查询。
    猜你喜欢
    • 2015-11-18
    • 2017-11-13
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 2016-04-12
    相关资源
    最近更新 更多