V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
zxq1002
V2EX  ›  问与答

请教有什么好的方法可以从程序中解析出 sql 语句?

  •  
  •   zxq1002 · Mar 11, 2015 via Android · 3190 views
    This topic created in 4074 days ago, the information mentioned may be changed or developed.
    从源码目录中解析出所有文件中的sql语句
    Supplement 1  ·  Mar 11, 2015
    补充下,我是要获取应用所有代码和表之间的关联关系,所以先解析出sql,外从sql解析出表名
    12 replies    2015-03-12 09:39:35 +08:00
    sophymax
        1
    sophymax  
       Mar 11, 2015
    想不出比正则更好的方法
    router
        2
    router  
       Mar 11, 2015
    源码都有,还怕找不到地儿?
    正常情况,类似功能会写在一块儿,容易找的吧,如果访问db的写的很乱,你要解析这些干嘛呢?
    dong3580
        3
    dong3580  
       Mar 11, 2015
    @router
    你还真别说,遇到某些脑残的代码,SQL语句找不到一个。。。然后会发现各种拼接,正则无能为力,这个时候只能顺着路走代码,没办法。
    shiny
        4
    shiny  
    PRO
       Mar 11, 2015
    讲讲为什么需要这么做,应该会有更好的建议。
    liwei
        5
    liwei  
       Mar 11, 2015
    把数据库的接口加一层封装,在执行SQL前把SQL打印出来。
    linzy
        6
    linzy  
       Mar 11, 2015
    mssql的话,可以用sqlprofile工具,跑一下程序,都捕获到了~~
    xinple
        7
    xinple  
       Mar 11, 2015
    修改数据库类,每次执行sql语句的时候,把sql语句记录到log
    然后程序跑一边
    members
        8
    members  
       Mar 11, 2015 via Android
    MySQL的话,日志可以记录造成修改的sql语句。
    用--log-bin选项启动,mysqld将数据变更情况写入日志。
    通过mysqlbinlog工具查看。
    kchum
        9
    kchum  
       Mar 11, 2015
    @hackwjfz 这个效率快多了,每一个框架都不一样,有些可能还有 SQL 输出,自建框架,那就头大了。
    kchum
        10
    kchum  
       Mar 11, 2015
    还有是否考虑是否部分加密的问题。
    ETiV
        11
    ETiV  
       Mar 11, 2015 via iPhone
    关键字:mysql general-log
    自己搜
    zxq1002
        12
    zxq1002  
    OP
       Mar 12, 2015 via Android
    @ETiV
    @hackwjfz
    @linzy
    不是mysql,是oracle,程序量比较大,类型也很多,java,pro*c,shell,package等等都有
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1228 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 62ms · UTC 23:39 · PVG 07:39 · LAX 16:39 · JFK 19:39
    ♥ Do have faith in what you're doing.