我需要编写一个符合jdbc的驱动程序包装器,其目的是记录修改数据的所有SQL语句。区分修改数据的语句和仅读取数据的语句的最简单方法是什么?我想只有这样才能动态解析SQL代码,任何可以做到这一点的库?
答案 0 :(得分:1)
我认为一个很好的开始是寻找以INSERT,UPDATE或DELETE开头的查询。确保在测试字符串之前修剪前导空格。
如果要包含模式更改语句,请包含CREATE,ALTER,DROP和TRUNCATE等命令。
上述方法的细节取决于您使用的数据库。例如,一个字符串中可能有批处理命令,用分号分隔。您将需要解析字符串以查找此类实例。
答案 1 :(得分:1)
您可能会找到一些完整的SQL解析器,例如此one,但如果您的包装器只拦截单个语句,那么您可能(不够详细)将SELECT语句视为只读而其他所有语句都是修改数据。
答案 2 :(得分:0)
如果这不是通用包装器,我只记录对executeXXX()
方法的每次调用,除了调用executeQuery()
,然后在客户端代码中调用适当的方法。
如果您希望它是通用的并且希望避免解析SQL,则可以调查getUpdateCount()
方法以及executeXXX()
方法的返回值。这意味着在语句执行后记录,我认为这不会100%正确。