加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell – 我们可以从sqlite3执行操作系统命令

发布时间:2020-12-15 21:40:42 所属栏目:安全 来源:网络整理
导读:我的要求是: 在将新条目添加到表时运行 shell脚本. 有没有办法在插入新行时添加触发器来运行shell脚本? 嗯,情况是: 我正在使用不同程序的数据库. 假设程序X创建并填充xyz.db,我只需要在程序X将新行插入表中时执行一个小脚本. 目前我的shell脚本在循环中无
我的要求是:
在将新条目添加到表时运行 shell脚本.

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

嗯,情况是:

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

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

我的问题类似于can we execute unix command from oracle10g procedure,但我需要在sqlite3中做同样的事情

解决方法

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

在Java中,可以使用Ruby中的ProcessBuilder类,系统(< command>)方法和python中的os.system(< command>)来完成.

在oracle中,可以在java中编写可用于进行系统调用的触发器,但sqlite中不存在此功能.

如果完全有必要,我建议在sqlite db驱动程序周围编写一个包装器并在那里进行系统调用.

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

更新:

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

CREATE TRIGGER <trigger name>
    INSERT ON <table_name>
    BEGIN
        SELECT callback_function()
    END;

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读