微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

有什么办法来添加一个触发器来插入新行上运行的shell脚本?

那么情况是这样的:

我正在使用不同程序的数据库。 说程序X创build并填充xyz.db,只要程序X向表中插入新行,我就需要执行一个小脚本。

尝试mkdir时Shellvariables问题

Bash,是隐式引用的子shell输出

如何在Python中运行bash脚本,但是如果从另一个目录运行它?

GNU / Linux中两个文件(如行集)的笛卡尔积

这里是文件:没有参数扩展

目前我的shell脚本无限循环运行,并检查是否有新行并处理它,因为插入不是很频繁,所以连续运行脚本不是一个好的select。

我的问题是类似的, 我们可以从oracle10g程序执行unix命令,但我需要在sqlite3中做同样的事情

dynamic构buildgrepstring

如何在shell脚本中读取文件并从一个文件复制到另一个文件

在Unix中向数字string添加逗号

freeTDS bash:在Microsoft sql Server中执行SQL查询

Will()构造总是启动一个子shell?

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

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

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

如果这是完全必要的,我会建议编写一个包装你的sqlite数据库驱动程序,并在那里进行系统调用

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

更新:

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

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

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

我只是想确定你问的是正确的问题

正如你所说

检查是否有新的行,并处理它,…(罕见)…连续运行脚本不是一个好的选择。

所以你现在有类似的东西

while true ; do $scriptPath/sqlCheckForNewValues.sh sleep ${sleepSecs:-60} done

(如果你没有睡眠,那么就同意了,这不是最优的,并且注意睡眠值可以根据检查时间进行调整,以超出用户的期望(所以也许300秒就足够了)。

虽然我同意这个架构的反对意见,但只有你知道真正的优先事项(这需要更多的背景信息)。

从你所描述的,你将花费大量的时间来解决这个问题,并且可能不会占用整个系统处理时间的0.001%。

这是一件好事吗?或者你真的可以量化这是值得花费的时间吗? 你有没有其他的功能,这一次会更好地花在?

IHTH

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐