• 一个通用的SQL客户程序


    能够与任何关系数据库建立连接,并且交互地执行SQL命令,该客户程序能够连接任何jdbc数据源,也可以提交要执行的sqlSELECT命令和非SELECT命令。对于SELECT查询命令,显示执行结果;对于非select命令,显示执行状态。(我的电脑上只有mysql,所以只测了mysql,没有问题)

    如下图所示:

    代码实现:

      1 import java.awt.*;
      2 import java.awt.event.ActionEvent;
      3 import java.awt.event.ActionListener;
      4 import java.sql.*;
      5 import javax.swing.*;
      6 import javax.swing.border.*;
      7 
      8 
      9 public class SQLClient extends JApplet{
     10     //连接数据库
     11     private Connection connection;
     12     //执行sql命令
     13     private Statement statement;
     14     //输入sql命令 的文本框
     15     private JTextArea jtaSQLCommand=new JTextArea();
     16     //显示sql命令的执行结果的文本框
     17     private JTextArea jtaSQLResult=new JTextArea();
     18     //连接数据库的JDBC相关信息,包括用户名,密码,数据库url,数据库驱动器
     19     JTextField jtfUserName=new JTextField();
     20     JPasswordField jpfPassword=new JPasswordField();
     21     JComboBox jcboURL=new JComboBox(new String[]{
     22             "jdbc:mysql://localhost/world",
     23             "jdbc:odbc:exampleMDBDataSource",
     24             "jdbc:oracle:thin:@liang.armstrong.edu:1521:orcl"
     25     });
     26     JComboBox jcboDriver = new JComboBox(new String[]{
     27             "com.mysql.jdbc.Driver",
     28             "sun.jdbc.odbc.jdbcOdbcDriver",
     29             "oracle.jdbc.driver.OracleDriver"
     30     });
     31     
     32     JButton jbtExecuteSQL =new JButton("Execute SQL Command");
     33     JButton jbtClearSQLCommand=new JButton("Clear");
     34     JButton jbtConnectDB1=new JButton("Connect to DataBase");
     35     JButton jbtClearSQLResult=new JButton("Clear Result");
     36     
     37     //create titled borders
     38     Border titledBorder1=new TitledBorder("Enter an SQL Command");
     39     Border titledBorder2=new TitledBorder("SQL Execute Result");
     40     Border titledBorder3=new TitledBorder("Enter Database Information");
     41     
     42     JLabel jlblConnectionStatus=new JLabel("No connection now");
     43     
     44     public void init(){
     45         JScrollPane jScrollPane1=new JScrollPane(jtaSQLCommand);
     46         jScrollPane1.setBorder(titledBorder1);
     47         JScrollPane jScrollPane2=new JScrollPane(jtaSQLResult);
     48         jScrollPane2.setBorder(titledBorder2);
     49         
     50         JPanel jPanel1=new JPanel(new FlowLayout(FlowLayout.RIGHT));
     51         jPanel1.add(jbtClearSQLCommand);
     52         jPanel1.add(jbtExecuteSQL);
     53         
     54         JPanel jPanel2=new JPanel();
     55         jPanel2.setLayout(new BorderLayout());
     56         jPanel2.add(jScrollPane1,BorderLayout.CENTER);
     57         jPanel2.add(jPanel1,BorderLayout.SOUTH);
     58         jPanel2.setPreferredSize(new Dimension(100,100));
     59         
     60         JPanel jPanel3=new JPanel();
     61         jPanel3.setLayout(new BorderLayout());
     62         jPanel3.add(jlblConnectionStatus,BorderLayout.CENTER);
     63         jPanel3.add(jbtConnectDB1,BorderLayout.EAST);
     64         
     65         JPanel jPanel4=new JPanel();
     66         jPanel4.setLayout(new GridLayout(4,1,10,5));
     67         jPanel4.add(jcboDriver);
     68         jPanel4.add(jcboURL);
     69         jPanel4.add(jtfUserName);
     70         jPanel4.add(jpfPassword);
     71         
     72         JPanel jPanel5=new JPanel();
     73         jPanel5.setLayout(new GridLayout(4,1,10,5));
     74         jPanel5.add(new JLabel("JDBC Driver"));
     75         jPanel5.add(new JLabel("Database URL"));
     76         jPanel5.add(new JLabel("UserName"));
     77         jPanel5.add(new JLabel("Password"));
     78         
     79         JPanel jPanel6 = new JPanel();
     80         jPanel6.setLayout(new BorderLayout());
     81         jPanel6.setBorder(titledBorder3);
     82         jPanel6.add(jPanel4,BorderLayout.CENTER);
     83         jPanel6.add(jPanel5,BorderLayout.WEST);
     84         
     85         JPanel jPanel7 = new JPanel();
     86         jPanel7.setLayout(new BorderLayout());
     87         jPanel7.add(jPanel3,BorderLayout.SOUTH);
     88         jPanel7.add(jPanel6,BorderLayout.CENTER);
     89         
     90         JPanel jPanel8 = new JPanel();
     91         jPanel8.setLayout(new BorderLayout());
     92         jPanel8.add(jPanel2,BorderLayout.CENTER);
     93         jPanel8.add(jPanel7,BorderLayout.WEST);
     94         
     95         JPanel jPanel9=new JPanel(new FlowLayout(FlowLayout.LEFT));
     96         jPanel9.add(jbtClearSQLCommand);
     97         
     98         jcboURL.setEditable(true);
     99         jcboDriver.setEditable(true);
    100         
    101         add(jPanel8,BorderLayout.NORTH);
    102         add(jScrollPane2,BorderLayout.CENTER);
    103         add(jPanel9,BorderLayout.SOUTH);
    104         //点击execute按钮执行sql语句
    105         jbtExecuteSQL.addActionListener(new ActionListener(){
    106             public void actionPerformed(ActionEvent arg0) {
    107                 executeSQL();
    108             }
    109         });
    110         //连接数据库
    111         jbtConnectDB1.addActionListener(new ActionListener(){
    112             public void actionPerformed(ActionEvent e) {
    113                 // TODO Auto-generated method stub
    114                 connectToDB();
    115             }
    116         });
    117         //中兴清除命令的
    118         jbtClearSQLCommand.addActionListener(new ActionListener(){
    119             public void actionPerformed(ActionEvent e) {
    120                 jtaSQLCommand.setText(null);
    121             }
    122         });
    123         
    124         jbtClearSQLResult.addActionListener(new ActionListener(){
    125             public void actionPerformed(ActionEvent e){
    126                 jtaSQLResult.setText(null);
    127             }
    128         });
    129     }
    130     
    131     private void connectToDB(){
    132         String driver=(String)jcboDriver.getSelectedItem();
    133         String url=(String)jcboURL.getSelectedItem();
    134         String userName=jtfUserName.getText().trim();
    135         String password=new String(jpfPassword.getPassword());
    136         
    137         //连接数据库
    138         try{
    139             Class.forName(driver);
    140             connection=DriverManager.getConnection(url,userName,password);
    141             jlblConnectionStatus.setText("Connected to "+url);
    142         }catch(java.lang.Exception ex){
    143             ex.printStackTrace();
    144         }
    145     }
    146     
    147     private void executeSQL(){
    148         if(connection==null){
    149             jtaSQLResult.setText("Please connect to a database first");
    150             return;
    151         }else{
    152             String sqlCommands=jtaSQLCommand.getText().trim();
    153             //trim返回字符串的副本,忽略前导空白和尾部空白。
    154             String[] commands=sqlCommands.replace('\n', ' ').split(";");
    155             
    156             for(String aCommand: commands){
    157                 if(aCommand.trim().toUpperCase().startsWith("SELECT")){
    158                     //是否以前缀SELECT开始
    159                     processSQLSelect(aCommand);
    160                 }
    161                 else{
    162                     processSQLNonSelect(aCommand);
    163                 }
    164             }
    165         }
    166     }
    167 //执行选择命令
    168     private void processSQLSelect(String sqlCommand) {
    169         
    170         try{
    171             statement = connection.createStatement();
    172             ResultSet resultSet=statement.executeQuery(sqlCommand);
    173             
    174             int columnCount=resultSet.getMetaData().getColumnCount();
    175             String row=" ";
    176             for(int i=1;i<=columnCount;++i)
    177                 row+=resultSet.getMetaData().getColumnName(i)+"\t";
    178             
    179             jtaSQLResult.append(row+"\n");
    180             while(resultSet.next()){
    181                 row=" ";
    182                 for(int i=1;i<=columnCount;++i)
    183                     row+=resultSet.getString(i)+"\t";
    184                 jtaSQLResult.append(row+'\n');
    185             }
    186         }catch(SQLException ex){
    187             jtaSQLResult.setText(ex.toString());
    188         }
    189     }
    190     //执行非选择命令
    191     private void processSQLNonSelect(String sqlCommand) {
    192         try{
    193             statement=connection.createStatement();
    194             statement.executeUpdate(sqlCommand);
    195             jtaSQLResult.setText("SQL command excuted");
    196         }catch(SQLException ex){
    197             jtaSQLResult.setText(ex.toString());
    198         }
    199     }
    200     
    201 }
  • 相关阅读:
    【GitHub】上传代码通用操作等(附下载单个文件夹或文件)
    【Git】之分支合并命令
    【FFmpeg】之Mac系统爬取所有M3U8视频下载方法
    i2c超时
    linux下串口调试
    cgminer分析
    i2c驱动理解
    STM32(三十七)SPI读取W25Q128flash的厂商ID、设备ID以及读写数据(硬件SPI)
    驱动静态和动态加载
    I2C基本原理及对I2C Adapter的理解
  • 原文地址:https://www.cnblogs.com/redlight/p/2592194.html
Copyright © 2020-2023  润新知