代码之家  ›  专栏  ›  技术社区  ›  Dan

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

  •  1
  • Dan  · 技术社区  · 14 年前

    我需要编写一个兼容jdbc的驱动程序包装器,其目的是记录所有修改数据的SQL语句。区分那些修改数据的语句和那些只读取数据的语句的最简单方法是什么?我想唯一的方法就是动态解析SQL代码,有没有库可以做到这一点?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Unreason    14 年前

    您可能会发现一些完整的sql解析器,例如 one ,但如果包装器只截获单个语句,则可能(不够详细)将SELECT语句视为只读语句,而将其他所有语句视为修改数据的语句。

        2
  •  1
  •   D'Arcy Rittich    14 年前

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

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

        3
  •  0
  •   gpeche    14 年前

    如果这不是一个通用包装器,我只会记录对 executeXXX() executeQuery() ,然后只需在客户端代码中调用appropiate方法。

    如果您希望它是通用的,并且希望避免解析SQL,那么可以研究 getUpdateCount() 方法的返回值 executeXXX() 方法。那就意味着伐木 声明被执行了,我不认为它是100%正确的。