如果在执行sql crud操作期间出现问题或者无法使用shell脚本进行提交,我试图进行回滚。
我有test2.sh和test.sh test.sh:
#!/bin/sh
sqlite3 dB.sqlite << EOF
begin;
select * from Table1;
和test2.sh
#!/bin/sh
if echo `./test.sh`|grep -q "SQL error"; then
rollback;
else
err=commit;
if echo $err |grep -q "error"; then
rollback;
fi
fi
没有名为Table1的表,我希望得到test.sh和rollback的sql错误输出。
但是它给出了错误:rollback:找不到命令。 我怎样才能得到错误并进行回滚?或者这是我遵循的方式吗?
答案 0 :(得分:1)
您的test2.sh脚本失败,因为shell正在尝试执行名为rollback
的程序,因此“找不到命令”。你想使用 sqlite指令回滚,这意味着你至少要做到这一点:
sqlite3 dB.sqlite << EOF
rollback;
EOF
但我认为这不会起作用。正如我所看到的,回滚必须发生在与test.sh启动的sqlite会话相同的sqlite会话中才能产生任何效果。你的test.sh脚本已经使sqlite通过命令直到它达到EOF,当你用test2.sh grep错误时,它已经太晚了。你无法从test2.sh脚本进行回滚,该脚本位于sqlite会话之外。
因此,为了完成我的回答,我建议您远离Bash脚本并使用编程语言,这将允许您打开sqlite会话,执行命令并控制事务。 Python中的简单示例:
import sqlite3
conn = sqlite3.connect('dB.sqlite')
c = conn.cursor()
try:
c.execute('INSERT INTO Table1 VALUES(1)')
conn.commit()
except:
conn.rollback()
c.close()