有一个使用Informix数据库的Java Swing应用程序。我为Swing应用程序授予了用户权限(即没有源代码),并且只读访问数据库的镜像。
有时我需要找到一个数据库列,它支持GUI元素(TextBox,TableField,Label ...)。找出哪个数据库列和表保存显示数据的最佳方法是什么?在TextBox中?
我的一般方法是捕获数据库的状态。使用GUI提交更改,然后再次捕获数据库的状态。然后我需要检查一下差异。我已经尝试过了:
使用nrows
的{{1}}字段:无效,因为systables
中的数字似乎不是行数的实时表示。
为所有表创建一个nrows
的脚本:由于表太多(> 5000)而无效。还试图通过删除空表进行优化,但仍然有太多左。
我有一个简单的解决方案吗?
答案 0 :(得分:1)
请查看Change Data Capture API并检查这是否符合您的需求
答案 1 :(得分:0)
可能没有一个简单的解决方案。
您可能需要自己构建数据库地图或数据字典。这听起来似乎可以消除许多表,因为它们是空的 - 至少是初步通过。如果您在文本框中处理信息,则可能是某种字符数据;您可以分析哪些(非空)表包含更长的字符串,并且它们是您搜索的主要目标。如果架构设计错误,有很多VARCHAR(255)
列,即使列通常只包含短字符串,生活也会更加困难。随着时间的推移,您可以开始对表和列进行分类,以便最终知道在哪里查找应用程序的各个部分。
要注意的一个问题是:tabid
中的informix.systables
并不一定像您所希望的那样稳定。您的数据字典需要为其描述的表记录自己的dd_tabid
,并且可以存储来自tabid
的最后一个informix.systables
,但它需要准备好找到新的{{1}偶尔的价值。您可能只应在字典中标记数据以进行逻辑删除。
在某种程度上,这假设您可以创建一个记录此信息的数据库。如果无法创建Informix数据库,则可能必须使用其他东西(可能是MySQL或SQLite)来存储数据字典。或者,转到您的DBA团队并询问他们的相关信息。除非你正在尝试一些不言自明的事情,否则他们可能会有所帮助(但是政治可能会妨碍你 - 我不知道你的团队是多么合情)。