我如何验证数据库的结构是我的C ++程序所期望的?我们的源代码控制在过去非常弱,所以我们在那里使用缺少列和表的数据库进行了许多生产安装,这些数据库现在在当前版本的C ++程序中是必需的。我想让我的应用程序检查以确保数据库的结构与启动时的预期方式相同。理想情况下,这适用于SQL,Oracle,Access,MySql DB。
答案 0 :(得分:4)
困难似乎出现在跨DBMS中。 ODBC驱动程序提供了所有数据库所需的大多数功能。 在这种情况下,我使用ODBC SQLTables和SQLDescribeColumn来提取数据库上所有表,列和索引的定义,然后将其与针对已知 good 数据库运行的进程的输出进行比较。
如果你只想验证结构,修复这样一个数据库的代码,通过逻辑上添加列和索引,但这样做有点困难,这很容易。
答案 1 :(得分:2)
假设您可以使用SQL查询数据库,那么您可以使用DESCRIBE sql语句来请求您正在查看的表的描述,例如。
DESCRIBE table1;
使用您的代码检查描述以分析它是否正确..
这将为您提供字段列表,类型和其他信息,例如
Field |Type |NULL |Key |Default| Extra
Col 1 |int(11) |NO |PRI |NULL | auto_increment
Co1 2 |time |No | |NULL |
然后您可以查看此表。
答案 2 :(得分:0)
“我想让我的应用程序检查以确保数据库的结构与启动时的预期方式相同。”
你认为这会解决什么问题?
如果数据库的结构不符合程序的预期,那么我会说你的程序几乎肯定会失败(可能很早就开始了)。
假设你可以做检查(而且我很确定你可以走很长的路来实现这一目标,甚至远远超出此处的建议),你认为还有什么留给你的但是要中止你的程序说“无法运行,数据库不按预期”?
在两种情况下几乎可以保证结果相同:您的程序将无法运行。如果您遇到“数据库未按预期构建”的问题,那么您需要查看(并修复故障)整个过程。软件不是“在自己的世界中”,也不是数据库。