Mysql日志转SQL页面

此HTML代码实现了一个简单的JavaScript功能,用于处理Mybatis打印的日志,提取SQL语句中的问号并替换为具体的参数值。用户需输入包含Prepareing和Parameters的日志文本,工具将处理SQL语句,尤其适合处理含有括号的复杂参数。注意,输入值不能包含小括号,需要预先处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title></title>
</head>
<style>
  input[type=text], select {
    width: 100%;
    padding: 12px 20px;
    margin: 8px 0;
    display: inline-block;
    border: 1px solid #ccc;
    border-radius: 4px;
    box-sizing: border-box;
  }

  /* 4CAF50 */
  input[type=submit] {
    width: 100%;
    background-color: #2a1f8b;
    color: white;
    padding: 14px 20px;
    margin: 8px 0;
    border: none;
    border-radius: 4px;
    cursor: pointer;
  }

  input[type=submit]:hover {
    background-color: #45a049;
  }

  div {
    border-radius: 5px;
    background-color: #f2f2f2;
    padding: 20px;
  }
</style>
<body>

<h3>替换SQL语句中问号</h3>

<div>
  <label for="inputSQL">请输入SQL语句:</label>
  <input type="text" id="inputSQL" placeholder="请复制输入Mybatis打印的日志,须完整 Prepareing 语句和 Parameter 语句">

  <br><br>
  <input type="submit" value="转换" onclick="show()">
  <br><br>

  <label for="result" id="test">转换结果</label>
  <input type="text" id="result" placeholder="转换结果...">


</div>


<!-- 该函数使用时,SQL语句中的值不能有小括号'..(..)..',
  如遇到这种情况,请手动删除括号,替换完成后再输入括号 -->
<script type="text/javascript">
  function show() {

    //裁剪字符串
    var sql = document.getElementById('inputSQL').value

    var result = sql.substring(sql.indexOf('Preparing') + 11, sql.indexOf('Parameters') - 4)
    var matchList = sql.substring(sql.indexOf('Parameters') + 12, sql.lastIndexOf(')') + 5).split(",")

    // \( 为匹配 左括号(
    // ([^)]+) 为匹配一个或多个非右括号的字符
    // \) 为匹配右括号
    // 连起来就是:匹配第一个括号中一个或多个字符
    var regExp_type = /\(([^)]+)\)/

    // ([^(]+) 为匹配1个或多个非左括号的字符
    // \( 为匹配左括号
    // 连起来就是:匹配第一个左括号左边的字符
    var regExp_value = /([^(]+)\(/
    var previous = ''

    // 检测使用逗号分割后的每个元素
    for (index in matchList) {
      value = ''

      // 如果该元素为null,则该元素应直接被替换进SQL语句中
      if (matchList[index].trim() == 'null') {
        value = matchList[index].trim()
      } else {
        // 在该元素中寻找是否有括号元素:(...)
        var typeTest = regExp_type.exec(matchList[index])
        // 如果没有括号元素,且previous中没有值,则该元素作为起始值
        if (typeTest == null && previous == '') {
          previous = matchList[index]
          continue
        }
        // 如果没有括号元素,且previous中有值,则该元素追加到该值中
        if (typeTest == null && previous != '') {
          previous = previous + ',' + matchList[index]
          continue
        }
        // 如果有括号元素,检测previous是否有值,有则过继该值,成为一个完整元素
        if (typeTest != null && previous != '') {
          matchList[index] = previous + ',' + matchList[index]
        }
        // 获取括号中的值、括号左边的值,这两个值为执行正则匹配后结果中的分组1
        var type = regExp_type.exec(typeTest)[1].trim()
        value = regExp_value.exec(matchList[index])[1].trim()
        if (type == "String") {
          value = "'" + value + "'"
        }
      }
      result = result.replace("?", value)
      // 执行完一次替换后,previous的值应替换成''
      previous = ''
    }
    document.getElementById('result').setAttribute('value', result)
    document.getElementById('test').innerText = '转换成功...'
    setTimeout("document.getElementById('test').innerText = '转换结果'", 300)
  }
</script>
</body>
<!--by 王晓鹏-->
</html>

效果图:

切记,输入Mybatis打印的日志,须完整Prepareing语句和Parameter语句

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚霞虽美不如你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值