SQL轉Java程式碼小工具
阿新 • • 發佈:2019-01-03
工作中使用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