对于C语言的数据库脚本使用system()是一种好方法吗?

时间:2009-08-11 10:06:51

标签: c database system

我正在寻找从C程序连接数据库。但我认为ODBC连接,登录和所有需要一些库。另外我有一个像Tiny C Compiler这样的最小编译器,速度非常快。我不想使用连接和查询数据库所需的任何ODBC逻辑等。

所以我使用的方法如下。

我使用的是bteq脚本(teradata),其中包含登录,查询和注销命令。 (FYI bteq是一个命令行数据库实用程序。你可以通过转到exe的路径在命令提示符中使用它类似于mysql.exe。你可以用mysql.exe等替换bteq)。我用

system("bteq <myscript.txt >out.txt");

myscript.txt将如下所示..

.logon boxname/user,password;
select date;
.logoff;

上面的脚本将登录到数据库和查询日期(您可以根据数据库引擎和需要更改查询和编写脚本)并将输出输出到out.txt。

现在我将使用fgetc,fscanf或fgets解析我想要的行X列的out.txt。 并使用数据检查并在任何服务器上使用PHP发送邮件

system("c:/server/php/php.exe sendmail.php");

我们可以通过一个简单的C程序为许多数据库引擎(如mysql,...等)做同样的事情。

现在我的问题是上述方法是否有任何缺陷。 如果是,那么我该如何克服它。我问这个问题因为我认为这种方法是非常规的。请对此方法发表意见。我不打算执行所需的时间,使用的RAM,性能问题等。我知道system()函数是耗时的,这不是我关心的问题。我还开发了访问查询结果的特定函数(类似于访问平面文件)。如果您对此方法有任何改进,请告诉我。如果您知道这方面的任何缺陷,请告诉我。欢迎各种建议。

我的环境是:使用Tiny C编译器的Windows上的teradata bteq

3 个答案:

答案 0 :(得分:3)

只要您的需求很简单,这是访问外部数据库的绝佳方式。如果你已经知道这样做的表现和记忆含义,那就没什么好说的了。

答案 1 :(得分:1)

如果您的调用代码正在运行setuid或setgid,我不建议这样做,但在这种情况下,您可以使用其中一个exec()函数。 (您可能希望考虑其他一些注意事项,详见man 3 system。)

答案 2 :(得分:1)

方法很好:通过以适当的语言实现它们来解耦db子系统和解析器子系统是很好的。

只有这个小小的东西 - 但我可能会弄错,因为我不熟悉bteq:程序需要在执行文件夹中安装bteq脚本;此脚本将包含用户名和密码。如果这些不是以某种方式编写的,则可能存在安全漏洞。