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


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
SQL生成工具可以有很多种实现方式,这里提供一种基于Java语言的实现方式。 首先,需要定义一个数据模型类,用于描述要生成SQL语句。例如: ```java public class SqlModel { private String tableName; private List<String> columns; private String condition; // 省略getter和setter方法 } ``` 然后,可以定义一个工具类,用于根据数据模型生成SQL语句。例如: ```java public class SqlGenerator { public static String generateSql(SqlModel sqlModel) { StringBuilder sqlBuilder = new StringBuilder(); sqlBuilder.append("SELECT "); if (sqlModel.getColumns() != null && !sqlModel.getColumns().isEmpty()) { sqlBuilder.append(String.join(",", sqlModel.getColumns())); } else { sqlBuilder.append("*"); } sqlBuilder.append(" FROM ").append(sqlModel.getTableName()); if (sqlModel.getCondition() != null && !sqlModel.getCondition().isEmpty()) { sqlBuilder.append(" WHERE ").append(sqlModel.getCondition()); } return sqlBuilder.toString(); } } ``` 最后,在应用程序中使用SqlGenerator类生成SQL语句。例如: ```java public class Application { public static void main(String[] args) { SqlModel sqlModel = new SqlModel(); sqlModel.setTableName("user"); sqlModel.setColumns(Arrays.asList("id", "name", "email")); sqlModel.setCondition("age > 18"); String sql = SqlGenerator.generateSql(sqlModel); System.out.println(sql); } } ``` 以上就是一个简单的基于Java语言实现的SQL生成工具。当然,这只是一个简单的示例,实际应用中还需要考虑更多的细节和功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

isea533

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

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

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

打赏作者

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

抵扣说明:

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

余额充值