工作中使用SQL的时候很多,当使用hibernate的时候,经常遇到多行的SQL,通常在PL/SQL或其他地方写好SQL,测试没问题后,需要将SQL写到程序代码中,多行SQL需要拼接字符串,手动一行行添加很不方便,所以,既然经常会遇到,就写个小工具来自动处理吧。

该工具使用Java进行开发,我上传的程序已经打包成exe了(运行仍然需要系统有jre),源代码会在这里全部贴出,因为只有一个类。

先看两个实际运行图:

1.生成String类型,这个类型在大部分的编程语言中通用。

2.StringBuffer类型,这种类型适用于JAVA,从性能来看,这两种类型在执行多次时,StringBuffer效率更高。

代码很简单,就是两个textarea,通过\n分割字符串,然后一行行拼接。

代码如下:

  1. @SuppressWarnings("serial")
  2. public class CreateSqlWin extends JFrame {
  3. private JPanel contentPane;
  4. private JTextField txtStr;
  5. private JRadioButton rdbtnString;
  6. private JRadioButton rdbtnStringbuffer;
  7. private JSplitPane splitPane;
  8. private JTextArea newSql;
  9. private JTextArea oldSql;
  10. private ImageIcon ico = new ImageIcon(this.getClass().getResource("sql.png"));
  11. /**
  12. * Launch the application.
  13. */
  14. public static void main(String[] args) {
  15. EventQueue.invokeLater(new Runnable() {
  16. public void run() {
  17. try {
  18. CreateSqlWin frame = new CreateSqlWin();
  19. frame.setVisible(true);
  20. } catch (Exception e) {
  21. e.printStackTrace();
  22. }
  23. }
  24. });
  25. }
  26. /**
  27. * Create the frame.
  28. */
  29. public CreateSqlWin() {
  30. setIconImage(ico.getImage());
  31. setMinimumSize(new Dimension(840, 600));
  32. setTitle("SQL转JAVA字符串");
  33. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  34. setBounds(100, 100, 842, 605);
  35. contentPane = new JPanel();
  36. contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  37. setContentPane(contentPane);
  38. contentPane.setLayout(new BorderLayout(0, 0));
  39. JPanel panel = new JPanel();
  40. panel.setPreferredSize(new Dimension(10, 80));
  41. contentPane.add(panel, BorderLayout.NORTH);
  42. panel.setLayout(new BorderLayout(0, 0));
  43. JPanel panel_1 = new JPanel();
  44. panel_1.setBorder(new LineBorder(new Color(0, 0, 0)));
  45. panel_1.setPreferredSize(new Dimension(300, 10));
  46. panel.add(panel_1, BorderLayout.CENTER);
  47. panel_1.setLayout(null);
  48. JLabel label = new JLabel("选择生成方式:");
  49. label.setBounds(10, 10, 153, 20);
  50. panel_1.add(label);
  51. rdbtnString = new JRadioButton("String");
  52. rdbtnString.setSelected(true);
  53. rdbtnString.setBounds(52, 36, 79, 23);
  54. panel_1.add(rdbtnString);
  55. rdbtnStringbuffer = new JRadioButton("StringBuffer");
  56. rdbtnStringbuffer.setBounds(144, 36, 107, 23);
  57. panel_1.add(rdbtnStringbuffer);
  58. ButtonGroup bGroup = new ButtonGroup();
  59. bGroup.add(rdbtnString);
  60. bGroup.add(rdbtnStringbuffer);
  61. txtStr = new JTextField();
  62. txtStr.setText("str");
  63. txtStr.setBounds(313, 31, 180, 33);
  64. panel_1.add(txtStr);
  65. txtStr.setColumns(10);
  66. JLabel label_1 = new JLabel("输入变量名:");
  67. label_1.setBounds(276, 13, 87, 15);
  68. panel_1.add(label_1);
  69. JPanel panel_3 = new JPanel();
  70. panel_3.setBorder(new MatteBorder(1, 0, 1, 1, (Color) new Color(0, 0, 0)));
  71. panel_3.setPreferredSize(new Dimension(200, 10));
  72. panel.add(panel_3, BorderLayout.EAST);
  73. panel_3.setLayout(new BorderLayout(0, 0));
  74. JButton button = new JButton("生成");
  75. button.addActionListener(new ActionListener() {
  76. public void actionPerformed(ActionEvent e) {
  77. //生成SQL
  78. String oldSqlStr = oldSql.getText();
  79. if(oldSqlStr.equals("")){
  80. JOptionPane.showMessageDialog(CreateSqlWin.this, "请在左侧输入SQL再执行!");
  81. return;
  82. }
  83. //清空
  84. if(!newSql.getText().equals("")){
  85. newSql.setText("");
  86. }
  87. String valibleName = txtStr.getText();
  88. if(valibleName.trim().equals("")){
  89. JOptionPane.showMessageDialog(CreateSqlWin.this, "请输入变量名!");
  90. return;
  91. }
  92. String[] sqls = oldSqlStr.split("\n");
  93. StringBuffer result = new StringBuffer();
  94. //对SQL进行拼接
  95. if(rdbtnString.isSelected()){
  96. //string形式
  97. for(int i=0;i<sqls.length-1;i++){
  98. if(result.toString().equals("")){
  99. result.append(valibleName+" = \" "+sqls[i]+" \"\n");
  100. }
  101. else {
  102. result.append(" +\" "+sqls[i]+" \"\n");
  103. }
  104. }
  105. result.append(" +\" "+sqls[sqls.length-1]+" \";\n");
  106. }
  107. else{
  108. //string形式
  109. for(int i=0;i<sqls.length;i++){
  110. result.append(valibleName+".append(\" "+sqls[i]+" \");\n");
  111. }
  112. }
  113. newSql.setText(result.toString());
  114. }
  115. });
  116. button.setFont(new Font("楷体", Font.PLAIN, 32));
  117. panel_3.add(button, BorderLayout.CENTER);
  118. JPanel panel_2 = new JPanel();
  119. panel_2.setBorder(new MatteBorder(0, 1, 1, 1, (Color) new Color(0, 0, 0)));
  120. contentPane.add(panel_2, BorderLayout.CENTER);
  121. panel_2.setLayout(new BorderLayout(0, 0));
  122. splitPane = new JSplitPane();
  123. splitPane.addComponentListener(new ComponentAdapter() {
  124. @Override
  125. public void componentResized(ComponentEvent e) {
  126. divider();
  127. }
  128. });
  129. panel_2.add(splitPane, BorderLayout.CENTER);
  130. JScrollPane scrollPane = new JScrollPane();
  131. splitPane.setLeftComponent(scrollPane);
  132. oldSql = new JTextArea();
  133. scrollPane.setViewportView(oldSql);
  134. JScrollPane scrollPane_1 = new JScrollPane();
  135. splitPane.setRightComponent(scrollPane_1);
  136. newSql = new JTextArea();
  137. scrollPane_1.setViewportView(newSql);
  138. JPanel panel_4 = new JPanel();
  139. FlowLayout flowLayout = (FlowLayout) panel_4.getLayout();
  140. flowLayout.setAlignment(FlowLayout.LEFT);
  141. panel_4.setPreferredSize(new Dimension(10, 30));
  142. panel_2.add(panel_4, BorderLayout.NORTH);
  143. JLabel lblsql = new JLabel("请在左侧输入你要格式化的SQL语句:");
  144. lblsql.setHorizontalAlignment(SwingConstants.LEFT);
  145. panel_4.add(lblsql);
  146. }
  147. public void divider(){
  148. splitPane.setDividerLocation(0.4);
  149. }
  150. }

代码中用到了一张图片,仅仅是用来显示图标的,可以使用任意图片代替或者去掉相应代码。

程序下载:

              在发布该帖之前上传了一次,结果发现不是免费下载,需要1金币才可以,果断删除重新上传,结果就一直没反应了。

临时放个GOOGLE DRIVE的地址:https://docs.google.com/file/d/0ByAG1xopZV6kU3VfOGxQQU1LZjQ/edit?usp=sharing

CSDN地址彻底没希望了,不知道是不是有什么算法...刚上传的和已删除的一样难道就不行?

增加一个百度网盘地址:http://pan.baidu.com/share/link?shareid=181300461&uk=1325762948

SQL转Java代码小工具的更多相关文章

  1. 把调试好的SQL语句转换为JAVA代码小工具

    关键点:Pattern实现SQL拆解.ZeroClipboard.js实现复制到剪切板 主要代码: <%@ page language="java" import=" ...

  2. 三个 DAL 相关的Java代码小工具

    最近在做 DAL (Data Access Layer 数据访问层) 的服务化,发现有不少地方是人工编写比较繁琐的,因此写了几个小工具来完成. 1.  从 DAO 类自动生成 CoreService ...

  3. Java代码混淆工具ProGuard

    目录 Java代码混淆工具ProGuard 简介 描述 作用的环境 功能 工作原理 下载 使用时注意事项 版本问题 JDK位数问题 Java的字节码验证问题 关于使用类似于Hibernate的对象关系 ...

  4. JSON生成c#类代码小工具

    JSON生成c#类代码小工具 为什么写这么个玩意 最近的项目中需要和一个服务端程序通讯,而通讯的协议是基于流行的json,由于是.net,所以很简单的从公司代码库里找到了Newtonsoft.dll( ...

  5. eclipse Java代码折叠工具

      eclipse Java代码折叠工具 CreateTime--2018年5月17日15点09分 Author:Marydon 1.问题描述 eclipse自带的代码折叠工具,无法折叠try{}ca ...

  6. JS-在线运行代码小工具

    原理:window.open()方法,open一个新的空白页,然后把文本框中粘贴的代码通过DOM操作,写到新的代码页中, 再利用document.write的功能(写进去之前把其他的全部删掉,并且写进 ...

  7. java 编写小工具 尝试 学习(七)

    1.在java 编写小工具 尝试 学习(六)里学会了,控件 的随意摆放, 以及大小(x,y,width,height),又根据前面学习的按钮 被点击 的事件监控 的方法 ,点击 按钮 在显示区域显示“ ...

  8. spring MVC +freemarker + easyui 实现sql查询和执行小工具总结

    项目中,有时候线下不能方便的连接项目中的数据源时刻,大部分的问题定位和处理都会存在难度,有时候,一个小工具就能实时的查询和执行当前对应的数据源的库.下面,就本人在项目中实际开发使用的小工具,实时的介绍 ...

  9. Java代码度量分析工具:Designite简介

    前言 在Java面向对象课程的学习过程中,我们需要使用度量工具来分析自己程序的代码结构.此类的度量工具有许多,或以插件形式存在于各个IDE中,或以.jar包的形式供用户使用.在这里,笔者向大家简单的介 ...

随机推荐

  1. Hackrank Kingdom Division 树形DP

    题目链接:传送门 题意: 给你一棵树,n个点 每个点可以染成红色和蓝色 但是红色的点与其相邻的点中必须有红色节点,蓝色也是 问你有多少种染色的方案 题解: 树形dp 先转化为有根树,取1为根 设定dp ...

  2. java8--IO工具类(java疯狂讲义3复习笔记)

    Paths类 public static void pathTest(){ Path path = Paths.get("~"); System.out.println(path) ...

  3. camera闪光灯校准

    1. adb shell 2. setprop z.flash_ratio 1 3. 全黑环境下,请将手机固定,对着白墙10cm,固定. 4. 点击拍照,然后手机会自动打闪2(Duty num)次(其 ...

  4. HDU1087 Super Jumping! Jumping! Jumping! —— DP

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1087 Super Jumping! Jumping! Jumping! Time Limi ...

  5. ELF和a.out文件格式的比较

    本文讨论了 UNIX/LINUX 平台下三种主要的可执行文件格式:a.out(assembler and link editor output 汇编器和链接编辑器的输出).COFF(Common Ob ...

  6. maven配置篇

    1,windows A)安装maven之前,确认已正确安装JDK B)下载maven http://maven.apache.org/download.html C)将压缩包解压到指定目录,E:\ap ...

  7. 并不对劲的uoj276. [清华集训2016]汽水

    想要很对劲的讲解,请点击这里 题目大意 有一棵\(n\)(\(n\leq 50000\))个节点的树,有边权 求一条路径使该路径的边权平均值最接近给出的一个数\(k\) 输出边权平均值下取整的整数部分 ...

  8. C++实现二叉树(建树,前序,中序,后序)递归和非递归实现

    #include<iostream> #include<string.h> #include<stack> using namespace std; typedef ...

  9. bzoj 4184: shallot【线性基+时间线段树】

    学到了线段树新姿势! 先离线读入,根据时间建一棵线段树,每个节点上开一个vector存这个区间内存在的数(使用map来记录每个数出现的一段时间),然后在线段树上dfs,到叶子节点就计算答案. 注意!! ...

  10. 比特币搬砖对冲策略Python源码

    策略复制地址:https://www.fmz.com/strategy/21023 策略原理 比特币搬砖策略是入门程序化交易的基础策略.原理简单,是新手尝试程序化的好选择,在其黄金时期,比特币搬砖也带 ...