天天看點

Mybatis 執行後 參數 未拼接到 SQL語句中

每次生産有問題,看日志拿到sql,如果參數太多,把參數拼接到sql中費很長時間,于是寫了一個小工具!

-----------------來自小馬哥的故事

直接上代碼

package com.mantis.hc.sale.service.pay.util;


import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.*;

public class sqlTools extends JFrame implements ActionListener {




    private JPanel jp=new JPanel();

    private JLabel[] jlArray={new JLabel("SQL"),

            new JLabel("字段值"),new JLabel("結果"),new JLabel("") };

    private JButton[] jbArray={new JButton("執行"),

            new JButton("清空")};

    private JTextField jtxtSql =new JTextField();

    private JTextField JTextValue= new JTextField();


    private JTextArea resultSQL= new JTextArea();

    public sqlTools(){
        jp.setLayout(null);

        for(int i=0;i<2;i++){

            jlArray[i].setBounds(30, 20+i*50, 80, 26);

            jbArray[i].setBounds(120+i*110, 660, 80,26);

            jp.add(jlArray[i]);

            jp.add(jbArray[i]);

            jbArray[i].addActionListener(this);

        }


        for(int i=2;i<3;i++){

            jlArray[i].setBounds(30, 20+i*50, 80, 26);

            jp.add(jlArray[i]);
        }
        jtxtSql.setBounds(80,20,500,30);
        jp.add(jtxtSql);
        jtxtSql.addActionListener(this);
        JTextValue.setBounds(80,70,500,30);
        jp.add(JTextValue);
        JTextValue.addActionListener(this);
        resultSQL.setBounds(80,120,500,500);
        resultSQL.setLineWrap(true);
        jp.add(resultSQL);
        jlArray[3].setBounds(10, 250, 700, 30);
        jp.add(jlArray[3]);
        this.add(jp);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("小馬哥工具");
        this.setResizable(false);
        this.setBounds(100, 230, 700, 800);
        this.setVisible(true);

    }


    public void actionPerformed(ActionEvent e){



        if(jtxtSql.getText().equals("")&&String.valueOf(JTextValue.getText()).equals("")){

            resultSQL.setText("參數不能為空!,請重新參數!");

        }else{

            try{
                String resultStr =  getResultSQL(jtxtSql.getText(),JTextValue.getText());
                resultSQL.setText(resultStr);
            }catch (Exception a){
                System.out.println(a.getMessage());
                resultSQL.setText("參數錯誤,請檢查參數!");
            }

        }

    }

    //主函數入口
    public static void main(String[] args) {

        new sqlTools();

    }








    public static  String getResultSQL(String  text,String  str) {

        Pattern pattern = Pattern.compile("\\?");
        StringBuffer buffer = new StringBuffer();

        //參數轉換成數組
        String[] words = ClearBracket(str).split(",");
        for (int i = 0; i < words.length; i++) {

            Matcher matcher = pattern.matcher(text);
            while (matcher.find()) {
                //?号 替換成資料中對應的資料
                matcher.appendReplacement(buffer, "'"+words[i++].trim()+"'");
            }
            matcher.appendTail(buffer);
        }

        return buffer.toString();


    }




    //删除括号及括号中的資料
    private static String ClearBracket(String context) {
        String pattern = "\\([^)]*\\)";
        context = context.replaceAll(pattern, "");
        return context;
    }









}           

複制

生成class 檔案

javac ResSql.java           

複制

打包成jar

jar cvf sqlTools.jar ResSql.class           

複制

修改 MANIFEST.MF 檔案

Manifest-Version: 1.0
Created-By: 1.8.0_131 (Oracle Corporation)
Main-Class: ResSql           

複制

打包壓縮 ZIP 修改字尾 JAR

編寫Bat檔案

@echo off

SET javaw="%JAVA_HOME%\bin\javaw"

start javaw -jar "sqlTools.jar" 

exit           

複制

本文由 小馬哥 創作,采用 知識共享署名4.0 國際許可協定進行許可

本站文章除注明轉載/出處外,均為本站原創或翻譯,轉載前請務必署名