ResultSetMetaData的经典例子

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package queryexecutor;
import java.awt.BorderLayout;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.util.Properties;
import java.sql.*;
import java.util.Vector;
import javax.swing.*;

/**
 *
 * @author 91152
 */
public class QueryExecutor {
    JFrame jf = new JFrame("查询执行器");
    private JTextField sqlField = new JTextField(45);
    private JButton execBn = new JButton("查询");
    private JScrollPane scrollPane;
    private static Connection conn;
    private static Statement stmt;
    static{
        
        try{
            Properties prop = new Properties();
            prop.load(new FileInputStream("mysql.ini"));
            String drivers = prop.getProperty("driver");
            String url = prop.getProperty("url");
            String username = prop.getProperty("user");
            String password = prop.getProperty("pass");
            Class.forName(drivers);
            conn = DriverManager.getConnection(url, username, password);
            stmt = conn.createStatement();
        }
        catch(Exception e){
            e.printStackTrace();
        }
        
    }
    
    private void init(){
        JPanel top = new JPanel();
        top.add(new JLabel("输入查询语句:"));
        top.add(sqlField);
        top.add(execBn);
        execBn.addActionListener(new ExceListener());
        sqlField.addActionListener(new ExceListener());
        jf.add(top,BorderLayout.NORTH);
        jf.setSize(700,480);
        //jf.pack();
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setVisible(true);
    }
    class ExceListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            if(scrollPane != null){
                jf.remove(scrollPane);
            }
            try(ResultSet rs = stmt.executeQuery(sqlField.getText())){
                ResultSetMetaData rsmd = rs.getMetaData();
                Vector<String> columnNames = new Vector<>();
                Vector<Vector<String>> data = new Vector<>();
                for(int i =0; i<rsmd.getColumnCount();i++){
                    columnNames.add(rsmd.getColumnName(i+1));
                }
                while (rs.next()){
                    Vector<String> v= new Vector<>();
                    for(int i =0;i < rsmd.getColumnCount();i++){
                        v.add(rs.getString(i+1));
                    }
                    data.add(v);
                }
                JTable table = new JTable(data,columnNames);
                scrollPane = new JScrollPane(table);
                jf.add(scrollPane);
                jf.validate();
            }
            catch(SQLException sl){
                sl.printStackTrace();
            }
        }
} 
    public static void main(String[] args) {
        new QueryExecutor().init();
    }
    
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值