我们可以从sqlite3执行操作系统命令吗?

Joh*_*hn 5 unix sqlite shell

我的要求是:在将新条目添加到表时运行shell脚本.

有没有办法在插入新行时添加触发器来运行shell脚本?


嗯,情况是:

我正在使用不同程序的数据库.假设程序X创建并填充xyz.db,我只需要在程序X将新行插入表中时执行一个小脚本.

目前我的shell脚本在循环中无限运行并检查是否有任何新行并对其进行处理,因为插入不是很频繁,连续运行脚本不是一个好的选择.

我的问题类似于我们可以从oracle10g程序执行unix命令,但我需要在sqlite3中执行相同的操作

rog*_*oom 4

首先,我完全同意这些评论,这听起来像是一个糟糕的架构。如果 shell 脚本操作不独立于与数据库交互的程序,则应通过调用某种系统命令将该调用嵌入到您的代码中、程序使用的驱动程序中或作为主代码的一部分。

在 Java 中,可以通过ruby​​ 和python中的ProcessBuilder类、方法来完成。system(<command>)os.system(<command>)

在oracle中,可以用java编写触发器,您可以使用它来进行系统调用,但是sqlite中不存在此功能。

如果完全有必要,我建议在 sqlite 数据库驱动程序周围编写一个包装器,并在其中进行系统调用。

也许您可以扩展您实际需要做的事情,我们可以提供替代方法

更新:

您可以使用 c/c++ sqlite 接口在 c/c++ 中创建回调函数(请参阅http://www.sqlite.org/capi3ref.html中的数据更改通知回调),您可以在触发器中调用该函数

CREATE TRIGGER <trigger name>
    INSERT ON <table_name>
    BEGIN
        SELECT callback_function()
    END;
Run Code Online (Sandbox Code Playgroud)

然后你可以使用这个callback_function来调用你的shell脚本,听起来相对复杂,但很有趣。