ResultSetMetaData和DatabaseMetaData
来源:互联网 发布:java 生成xml格式报文 编辑:程序博客网 时间:2024/06/06 14:12
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:
2.DatabaseMetaData
JDBC提供了DatabaseMetaData来封装数据库连接对应数据库的信息,同过Connection提供的getMetaData()方法就可以获取到数据库对应的DatabaseMetaData对象。
许多DatabaseMetaData方法以ResultSet对象的形式返回查询的信息,使用ResultSet的常规方法(例如getString和getInt)即可从这些ResultSet对象中获取数据。如果查询的信息不可用,则返回一个空的ResultSet对象。
- JDBC: ResultSetMetaData和DatabaseMetaData
- ResultSetMetaData和DatabaseMetaData
- ResultSetMetaData和DatabaseMetaData
- ResultSetMetaData 和DatabaseMetaData的用法
- 使用DatabaseMetaData和ResultSetMetaData查看数据库信息
- ResultSetMetaData和DatabaseMetaData用法简介(转)
- JDBC:MetaData(ResultSetMetaData、DataBaseMetaData)
- 利用DataBaseMetaData和ResultSetMetaData复制数据库的表和数据
- 学习ResultSetMetaData、DatabaseMetaData的知识
- 三大元数据--DatabaseMetaData,ParameterMetaData,ResultSetMetaData
- ResultSetMetaData 、DatabaseMetaData中的方法介绍
- ResultSetMetaData 、DatabaseMetaData中的方法的介绍
- ResultSetMetaData类与DatabaseMetaData类操作元数据
- DatabaseMetaData ResultSet ResultSetMetaData三种类型的区别
- DatabaseMetaData,ResultSet,ResultSetMetaData三种类型的区别
- DatabaseMetaData.getProcedures和getProcedureColumns
- ResultSet和 ResultSetMetaData
- DatabaseMetaData
- MySQL command Line 外键约束(FOREIGN KEY)
- 线程的创建和启动
- 线程的生命周期
- 线程控制
- android4.2.2生命周期机横竖屏展示
- ResultSetMetaData和DatabaseMetaData
- 面向对象的三个特征
- 【转载】JAVA --String类笔试面试题
- 一些java笔试面试题
- 文件过滤器
- Java IO流
- 转 Android ListView专题之十三 使用Button使用的问题
- Android GridView专题之一 给GridView添加ContextMenu
- Socket