ResultSetMetaData和DatabaseMetaData

         MetaData的意思是元数据,即描述其他数据的数据,因此ResultSetMetaData封装了描述ResultSet对象的数据,这些描述ResultSet对象的数据包括列名、列类型、列数、表名等信息;而DatabaseMetaData则封装了描述Database的数据,这些描述数据库的元数据包括表类型、数据库的全部数据表、表的主键、表的外键、数据库里的存储过程、某个表的全部数据列等待信息。

1.ResultSetMetaData

          ResultSet里包含一个getMetaData()方法,该方法返回该ResultSet对应的ResultSetMetaData对象。一旦获得了ResultSetMetaData对象,就可通过ResultSetMetaData提供大量的方法来返回ResultSet的描述信息,常用的方法有如下三个: 

  (1)int getColumnCount():返回该ResultSet的列数量。

  (2)String getColumnName(int column):返回指定索引的列名。

  (3)int getColumnType(int column):返回指定索引的列类型。

import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileInputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; import java.util.Properties; import java.util.Vector;

import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.table.DefaultTableModel;

public class QueryExecutor {  JFrame jf=new JFrame("查询执行器");  private JScrollPane scrollPane;  private DefaultTableModel model;  private JButton execBn=new JButton("查询");  //用于输入查询语娥句的文本框  private JTextField sqlField=new JTextField(45);  private static Connection conn;  private static Statement stmt;  private ResultSet rs;   static  {   try   {    Properties prop=new Properties();    FileInputStream in=new FileInputStream("mysql.ini");    prop.load(in);    in.close();    String driver=prop.getProperty("driver");    String url=prop.getProperty("url");    String username=prop.getProperty("user");    String password=prop.getProperty("pass");    //加载数据库驱动    Class.forName(driver);    //取得数据库连接    conn=DriverManager.getConnection(url,username,password);    stmt=conn.createStatement();   }   catch(Exception e)   {    e.printStackTrace();   }  }  //初始化界面

 public 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(640, 480);   jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   jf.setVisible(true);  }  class ExceListener implements ActionListener  {

  @Override   public void actionPerformed(ActionEvent event) {    // TODO Auto-generated method stub    if(scrollPane!=null)    {     jf.remove(scrollPane);    }    try    {     //根据用户输入的Sql语句执行查询     rs=stmt.executeQuery(sqlField.getText());     //取出ResultSet的MetaData     ResultSetMetaData rsmd=rs.getMetaData();     Vector<String> columnNames=new Vector<String>();     Vector data=new Vector();

//把ResultSet的所有列名添加到Vector里     int columnCount=rsmd.getColumnCount();     for(int i=1;i<=columnCount;i++)     {      columnNames.add(rsmd.getColumnName(i));     }     while(rs.next())     {      Vector v=new Vector();      for(int i=1;i<=columnCount;i++)      {       v.add(rs.getString(i));      }      data.add(v);     }     //更新TableModel     model=new DefaultTableModel(data,columnNames);     //创建新的JTable     JTable table=new JTable(model);     scrollPane=new JScrollPane(table);     //添加新的Table     jf.add(scrollPane);     jf.pack();     //更新窗口     jf.setVisible(true);    }    catch(Exception e)    {     e.printStackTrace();    }   } } public static void main(String[] args)  {   new QueryExecutor().init();  } }

   上面程序中蓝色斜体代码就是根据ResultSetMetaData分析ResultSet的关键代码,使用ResultSetMetaData查询ResultSet包含多少列,并把所有数据列的列名添加到一个Vector里,再把ResultSet里的所有数据添加到Vector里,并使用这两个Vector来创建新的TableModel,并利用该TableModel生成新的JTable,最后将该JTable显示出来. chengxuyunxingjieguoruxiasuoshi:

ResultSetMetaData和DatabaseMetaData - quanquan127@126 - 学无止境

  2.DatabaseMetaData
    JDBC提供了DatabaseMetaData来封装数据库连接对应数据库的信息,同过Connection提供的getMetaData()方法就可以获取到数据库对应的DatabaseMetaData对象。
    许多DatabaseMetaData方法以ResultSet对象的形式返回查询的信息,使用ResultSet的常规方法(例如getString和getInt)即可从这些ResultSet对象中获取数据。如果查询的信息不可用,则返回一个空的ResultSet对象。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值