ResultSetMetaData和DatabaseMetaData

来源:互联网 发布:吊顶软件下载 编辑:程序博客网 时间:2024/06/05 08:16

         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对象。