SQL转Java代码小工具
工作中使用SQL的时候很多,当使用hibernate的时候,经常遇到多行的SQL,通常在PL/SQL或其他地方写好SQL,测试没问题后,需要将SQL写到程序代码中,多行SQL需要拼接字符串,手动一行行添加很不方便,所以,既然经常会遇到,就写个小工具来自动处理吧。
该工具使用Java进行开发,我上传的程序已经打包成exe了(运行仍然需要系统有jre),源代码会在这里全部贴出,因为只有一个类。
先看两个实际运行图:
1.生成String类型,这个类型在大部分的编程语言中通用。
2.StringBuffer类型,这种类型适用于JAVA,从性能来看,这两种类型在执行多次时,StringBuffer效率更高。
代码很简单,就是两个textarea,通过\n分割字符串,然后一行行拼接。
代码如下:
- @SuppressWarnings("serial")
- public class CreateSqlWin extends JFrame {
- private JPanel contentPane;
- private JTextField txtStr;
- private JRadioButton rdbtnString;
- private JRadioButton rdbtnStringbuffer;
- private JSplitPane splitPane;
- private JTextArea newSql;
- private JTextArea oldSql;
- private ImageIcon ico = new ImageIcon(this.getClass().getResource("sql.png"));
- /**
- * Launch the application.
- */
- public static void main(String[] args) {
- EventQueue.invokeLater(new Runnable() {
- public void run() {
- try {
- CreateSqlWin frame = new CreateSqlWin();
- frame.setVisible(true);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- });
- }
- /**
- * Create the frame.
- */
- public CreateSqlWin() {
- setIconImage(ico.getImage());
- setMinimumSize(new Dimension(840, 600));
- setTitle("SQL转JAVA字符串");
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- setBounds(100, 100, 842, 605);
- contentPane = new JPanel();
- contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
- setContentPane(contentPane);
- contentPane.setLayout(new BorderLayout(0, 0));
- JPanel panel = new JPanel();
- panel.setPreferredSize(new Dimension(10, 80));
- contentPane.add(panel, BorderLayout.NORTH);
- panel.setLayout(new BorderLayout(0, 0));
- JPanel panel_1 = new JPanel();
- panel_1.setBorder(new LineBorder(new Color(0, 0, 0)));
- panel_1.setPreferredSize(new Dimension(300, 10));
- panel.add(panel_1, BorderLayout.CENTER);
- panel_1.setLayout(null);
- JLabel label = new JLabel("选择生成方式:");
- label.setBounds(10, 10, 153, 20);
- panel_1.add(label);
- rdbtnString = new JRadioButton("String");
- rdbtnString.setSelected(true);
- rdbtnString.setBounds(52, 36, 79, 23);
- panel_1.add(rdbtnString);
- rdbtnStringbuffer = new JRadioButton("StringBuffer");
- rdbtnStringbuffer.setBounds(144, 36, 107, 23);
- panel_1.add(rdbtnStringbuffer);
- ButtonGroup bGroup = new ButtonGroup();
- bGroup.add(rdbtnString);
- bGroup.add(rdbtnStringbuffer);
- txtStr = new JTextField();
- txtStr.setText("str");
- txtStr.setBounds(313, 31, 180, 33);
- panel_1.add(txtStr);
- txtStr.setColumns(10);
- JLabel label_1 = new JLabel("输入变量名:");
- label_1.setBounds(276, 13, 87, 15);
- panel_1.add(label_1);
- JPanel panel_3 = new JPanel();
- panel_3.setBorder(new MatteBorder(1, 0, 1, 1, (Color) new Color(0, 0, 0)));
- panel_3.setPreferredSize(new Dimension(200, 10));
- panel.add(panel_3, BorderLayout.EAST);
- panel_3.setLayout(new BorderLayout(0, 0));
- JButton button = new JButton("生成");
- button.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- //生成SQL
- String oldSqlStr = oldSql.getText();
- if(oldSqlStr.equals("")){
- JOptionPane.showMessageDialog(CreateSqlWin.this, "请在左侧输入SQL再执行!");
- return;
- }
- //清空
- if(!newSql.getText().equals("")){
- newSql.setText("");
- }
- String valibleName = txtStr.getText();
- if(valibleName.trim().equals("")){
- JOptionPane.showMessageDialog(CreateSqlWin.this, "请输入变量名!");
- return;
- }
- String[] sqls = oldSqlStr.split("\n");
- StringBuffer result = new StringBuffer();
- //对SQL进行拼接
- if(rdbtnString.isSelected()){
- //string形式
- for(int i=0;i<sqls.length-1;i++){
- if(result.toString().equals("")){
- result.append(valibleName+" = \" "+sqls[i]+" \"\n");
- }
- else {
- result.append(" +\" "+sqls[i]+" \"\n");
- }
- }
- result.append(" +\" "+sqls[sqls.length-1]+" \";\n");
- }
- else{
- //string形式
- for(int i=0;i<sqls.length;i++){
- result.append(valibleName+".append(\" "+sqls[i]+" \");\n");
- }
- }
- newSql.setText(result.toString());
- }
- });
- button.setFont(new Font("楷体", Font.PLAIN, 32));
- panel_3.add(button, BorderLayout.CENTER);
- JPanel panel_2 = new JPanel();
- panel_2.setBorder(new MatteBorder(0, 1, 1, 1, (Color) new Color(0, 0, 0)));
- contentPane.add(panel_2, BorderLayout.CENTER);
- panel_2.setLayout(new BorderLayout(0, 0));
- splitPane = new JSplitPane();
- splitPane.addComponentListener(new ComponentAdapter() {
- @Override
- public void componentResized(ComponentEvent e) {
- divider();
- }
- });
- panel_2.add(splitPane, BorderLayout.CENTER);
- JScrollPane scrollPane = new JScrollPane();
- splitPane.setLeftComponent(scrollPane);
- oldSql = new JTextArea();
- scrollPane.setViewportView(oldSql);
- JScrollPane scrollPane_1 = new JScrollPane();
- splitPane.setRightComponent(scrollPane_1);
- newSql = new JTextArea();
- scrollPane_1.setViewportView(newSql);
- JPanel panel_4 = new JPanel();
- FlowLayout flowLayout = (FlowLayout) panel_4.getLayout();
- flowLayout.setAlignment(FlowLayout.LEFT);
- panel_4.setPreferredSize(new Dimension(10, 30));
- panel_2.add(panel_4, BorderLayout.NORTH);
- JLabel lblsql = new JLabel("请在左侧输入你要格式化的SQL语句:");
- lblsql.setHorizontalAlignment(SwingConstants.LEFT);
- panel_4.add(lblsql);
- }
- public void divider(){
- splitPane.setDividerLocation(0.4);
- }
- }
代码中用到了一张图片,仅仅是用来显示图标的,可以使用任意图片代替或者去掉相应代码。
程序下载:
在发布该帖之前上传了一次,结果发现不是免费下载,需要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代码小工具的更多相关文章
- 把调试好的SQL语句转换为JAVA代码小工具
关键点:Pattern实现SQL拆解.ZeroClipboard.js实现复制到剪切板 主要代码: <%@ page language="java" import=" ...
- 三个 DAL 相关的Java代码小工具
最近在做 DAL (Data Access Layer 数据访问层) 的服务化,发现有不少地方是人工编写比较繁琐的,因此写了几个小工具来完成. 1. 从 DAO 类自动生成 CoreService ...
- Java代码混淆工具ProGuard
目录 Java代码混淆工具ProGuard 简介 描述 作用的环境 功能 工作原理 下载 使用时注意事项 版本问题 JDK位数问题 Java的字节码验证问题 关于使用类似于Hibernate的对象关系 ...
- JSON生成c#类代码小工具
JSON生成c#类代码小工具 为什么写这么个玩意 最近的项目中需要和一个服务端程序通讯,而通讯的协议是基于流行的json,由于是.net,所以很简单的从公司代码库里找到了Newtonsoft.dll( ...
- eclipse Java代码折叠工具
eclipse Java代码折叠工具 CreateTime--2018年5月17日15点09分 Author:Marydon 1.问题描述 eclipse自带的代码折叠工具,无法折叠try{}ca ...
- JS-在线运行代码小工具
原理:window.open()方法,open一个新的空白页,然后把文本框中粘贴的代码通过DOM操作,写到新的代码页中, 再利用document.write的功能(写进去之前把其他的全部删掉,并且写进 ...
- java 编写小工具 尝试 学习(七)
1.在java 编写小工具 尝试 学习(六)里学会了,控件 的随意摆放, 以及大小(x,y,width,height),又根据前面学习的按钮 被点击 的事件监控 的方法 ,点击 按钮 在显示区域显示“ ...
- spring MVC +freemarker + easyui 实现sql查询和执行小工具总结
项目中,有时候线下不能方便的连接项目中的数据源时刻,大部分的问题定位和处理都会存在难度,有时候,一个小工具就能实时的查询和执行当前对应的数据源的库.下面,就本人在项目中实际开发使用的小工具,实时的介绍 ...
- Java代码度量分析工具:Designite简介
前言 在Java面向对象课程的学习过程中,我们需要使用度量工具来分析自己程序的代码结构.此类的度量工具有许多,或以插件形式存在于各个IDE中,或以.jar包的形式供用户使用.在这里,笔者向大家简单的介 ...
随机推荐
- 百度Fex webuploader.js上传大文件失败
项目上用百度webuploader.js上传文件,option选项里面已经设置单个文件大小,但是上传低于此阈值的文件时仍然不成功. 我现在的理解是,框架是将文件post到后台服务器端的.. 百度发现是 ...
- 解决IOS滑动页面fixed浮动问题
<div style="position: fixed"></div> <div style="height: 100%; overflow ...
- redis缓存数据库的详解
1,什么是redis? Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库 Redis与其他key-value缓存产品有以下三个特点: Redis支持数据的持久化,可以 ...
- 【SCOI 2005】 最大子矩阵
[题目链接] 点击打开链接 [算法] 动态规划 我们发现,M只有两种取值,1和2,那么,只需分类讨论即可 当M = 1时,其实这个问题就成了就最大连续子段和的问题,只不过要选K段而已 用f[i][j] ...
- c#自动登录
c#自动登录 http://blog.csdn.net/eastmount/article/details/9703757
- light oj 1205(数位DP)
题目描述: 求给定区间中的回文数有多少个? 首先明确一点,如果一个数是回文数,那么给这个数两边加上相同的数,那么这个数还是回文数. 根据这点就可以进行递推了,p[start][end]=9*p[sta ...
- 【184】FileZilla 搭建 FTP 及访问
参考:FileZilla 下载中心 参考:使用FileZilla Server轻松搭建个人FTP服务器 建好后,Windows 访问:Windows徽标键+R打开运行窗口,输入ftp://*** ,* ...
- [PKUWC2018]猎人杀
题解 感觉是一道神题,想不出来 问最后\(1\)号猎人存活的概率 发现根本没法记录状态 每次转移的分母也都不一样 可以考虑这样一件事情: 如果一个人被打中了 那么不急于从所有人中将ta删除,而是给ta ...
- bzoj 1858: [Scoi2010]序列操作 || 洛谷 P2572
记一下:线段树占空间是$2^{ceil(log2(n))+1}$ 这个就是一个线段树区间操作题,各种标记的设置.转移都很明确,只要熟悉这类题应该说是没有什么难度的. 由于对某区间set之后该区间原先待 ...
- 递推DP UVA 1291 Dance Dance Revolution
题目传送门 题意:给一串跳舞的动作,至少一只脚落到指定的位置,不同的走法有不同的体力消耗,问最小体力消费多少分析:dp[i][j][k] 表示前i个动作,当前状态(j, k)的最小消费,状态转移方程: ...