如何区分修改数据的SQL语句和只读的SQL语句?

时间:2010-09-14 13:50:01

标签: sql parsing jdbc

我需要编写一个符合jdbc的驱动程序包装器,其目的是记录修改数据的所有SQL语句。区分修改数据的语句和仅读取数据的语句的最简单方法是什么?我想只有这样才能动态解析SQL代码,任何可以做到这一点的库?

3 个答案:

答案 0 :(得分:1)

我认为一个很好的开始是寻找以INSERT,UPDATE或DELETE开头的查询。确保在测试字符串之前修剪前导空格。

如果要包含模式更改语句,请包含CREATE,ALTER,DROP和TRUNCATE等命令。

上述方法的细节取决于您使用的数据库。例如,一个字符串中可能有批处理命令,用分号分隔。您将需要解析字符串以查找此类实例。

答案 1 :(得分:1)

您可能会找到一些完整的SQL解析器,例如此one,但如果您的包装器只拦截单个语句,那么您可能(不够详细)将SELECT语句视为只读而其他所有语句都是修改数据。

答案 2 :(得分:0)

如果这不是通用包装器,我只记录对executeXXX()方法的每次调用,除了调用executeQuery(),然后在客户端代码中调用适当的方法。

如果您希望它是通用的并且希望避免解析SQL,则可以调查getUpdateCount()方法以及executeXXX()方法的返回值。这意味着在语句执行后记录,我认为这不会100%正确。