2013-04-25 383 views
0

如果在执行我的sql crud操作期间出现问题或者无法使用shell脚本进行提交,我试图进行回滚。如何在shell脚本中获取sqlite命令的输出

我有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 

没有名为Table 1表中,我期望能获得SQL错误输出test.sh和回滚。

但它给错误:rollback:command not found。 我如何得到错误并进行回滚?或者是这样,我遵循吗?

回答

1

您的test2.sh脚本失败,因为shell正在尝试执行名为rollback的程序,因此“未找到命令”。你想使用sqlite的指令回滚,伟驰意味着你必须至少做到这一点:

sqlite3 dB.sqlite << EOF 
rollback; 
EOF 

但我不认为这会工作。正如我所见,回滚必须在test.sh启动的sqlite会话中发生,才能起作用。你的test.sh脚本已经让sqlite犁过这些命令,直到它到达EOF,当你用test2.sh grep错误时,它已经太晚了。您无法通过位于sqlite会话之外的test2.sh脚本进行回滚。

因此,为了完成我的答案,我建议您摆脱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() 
+0

感谢您的回复。 – Brknl 2013-04-26 06:29:54

相关问题