`
Luob.
  • 浏览: 1588790 次
  • 来自: 上海
社区版块
存档分类
最新评论

ResultSetMetaData 和 DatabaseMetaData

    博客分类:
  • JDBC
阅读更多
ResultSetMetaData:用来分析 "结果集"信息
DatabaseMetaData:用来分析是"数据库"信息


//做一个简单的 查询执行器
package com.enhance.jdbc;

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(40);
	
	private static Connection conn;
	private static Statement stmt;
	private static ResultSet rs;
	
	static {
		try {
			
			Properties prop=new Properties();
			FileInputStream in=new FileInputStream("src/mysql.ini");
			prop.load(in);
			in.close();
			String driver =prop.getProperty("driver");
			String url=prop.getProperty("url");
			String user=prop.getProperty("user");
			String pass=prop.getProperty("pass");
			Class.forName(driver);
			conn=DriverManager.getConnection(url,user,pass);
			stmt=conn.createStatement();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	class ExecListener implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub
			if(scrollPane!=null){
				jf.remove(scrollPane);
			}
			try {
				rs=stmt.executeQuery(sqlField.getText());
				System.out.println();
				ResultSetMetaData rsmd=rs.getMetaData();
				Vector<String> columnNames=new Vector<String>();
				System.out.println("cn"+rsmd.getColumnCount());
				Vector data=new Vector();
				for (int i = 0; i < rsmd.getColumnCount(); i++) {
					columnNames.add(rsmd.getColumnName(i+1));
				}
				while(rs.next()){
					Vector v=new Vector();
					for (int i = 0; i < rsmd.getColumnCount(); i++) {
						v.add(rs.getString(i+1));
					}
					data.add(v);
				}
				model = new DefaultTableModel(data,columnNames);
				JTable table=new JTable(model);
				scrollPane=new JScrollPane(table);
				jf.add(scrollPane);
				jf.validate();
				
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}
	public void init(){
		JPanel top=new JPanel();
		top.add(new JLabel("输入查询语句:"));
		top.add(sqlField);
		top.add(execBn);
		execBn.addActionListener(new ExecListener());
		sqlField.addActionListener(new ExecListener());
		
		jf.add(top,BorderLayout.NORTH);
		jf.setSize(640,480);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.setVisible(true);
	}
	
	public static void main(String[] args) {
		new QueryExecutor().init();
	}

}






//分析数据库信息
package com.enhance.jdbc;

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Properties;

public class DataBaseMetaDataTest {
	private String driver;
	private String url;
	private String user;
	private String pass;
	private Connection conn;
	private ResultSet rs;
	public void initParam(String paramFile) throws Exception{
		Properties prop=new Properties();
		prop.load(new FileInputStream(paramFile));
		driver=prop.getProperty("driver");
		url=prop.getProperty("url");
		user=prop.getProperty("user");
		pass=prop.getProperty("pass");
	}
	
	public void info() throws Exception{
		try {
			Class.forName(driver);
			conn=DriverManager.getConnection(url,user,pass);
			//获取DataBaseMeteData对象
			DatabaseMetaData dbmd=conn.getMetaData();
			//获取MySql支持的所有类型
			ResultSet rs=dbmd.getTableTypes();
			System.out.println("----MySql支持的表的类型信息----");
			printResultSet(rs);
			//获取当前数据库的全部数据表
			rs=dbmd.getTables(null,null, "%", new String[]{"TABLE"});
			System.out.println("----当前数据库中的所有表信息----");
			printResultSet(rs);
			
			rs=dbmd.getPrimaryKeys(null, null, "my_test");
			System.out.println("----my_test表中的主键信息----");
			printResultSet(rs);
			
			rs=dbmd.getProcedures(null, null, "%");
			System.out.println("----当前数据库中所有存储过程信息----");
			printResultSet(rs);
			
			rs=dbmd.getCrossReference(null, null, "time_zone", null, null, "time_zone_name");
			System.out.println("----time_zone表和time_zone_name表之间的外键约束----");
			printResultSet(rs);
			
			rs=dbmd.getColumns(null, null, "my_test", "%");
			System.out.println("----my_test表的全部数据列----");
			printResultSet(rs);
			
			System.out.println(dbmd.getDatabaseProductName());
			System.out.println(dbmd.getDatabaseProductVersion());
			System.out.println(dbmd.getDriverName());
			System.out.println(dbmd.getDriverVersion());
			
			
		} finally{
			if(rs!=null)
				rs.close();
			if(conn!=null)
				conn.close();
		}
	}
	
	public void printResultSet(ResultSet rs) throws SQLException{
		ResultSetMetaData rsmd=rs.getMetaData();
		
		for (int i = 0; i < rsmd.getColumnCount(); i++) {
			System.out.print(rsmd.getColumnName(i+1)+"\t");
		}
		System.out.println();
		while(rs.next()){
			for (int i = 0; i < rsmd.getColumnCount(); i++) {
				System.out.print(rs.getString(i+1)+"\t");
			}
			System.out.println();
		}
		rs.close();
	}
	
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		DataBaseMetaDataTest dbmdt=new DataBaseMetaDataTest();
		dbmdt.initParam("src/mysql.ini");
		dbmdt.info();
	}

}

  • 大小: 74.2 KB
分享到:
评论

相关推荐

    JDBC元数据操作--DatabaseMetaData接口Demo

    DatabaseMetaData和ResultSetMetaData就是两个常用的获取数据库元数据相关信息的接口,本文只讲解DatabaseMetaData接口获取元数据的方法。 文章地址:http://blog.csdn.net/chen_zw/article/details/18816599

    JDBC4.0 PDF教程

    元数据接口(如 ResultSetMetaData 和 DatabaseMetaData)得到了增强,以支持更多类型的信息查询,比如数据库列的默认值等。 ##### 2.3 支持批量更新 JDBC 4.0 提供了对批量更新的支持,可以通过 PreparedStatement...

    java对数据库操作常用对象及方法整合[归类].pdf

    Java 语言中经常使用的数据库操作对象和方法整合,主要包括 DatabaseMetaData、ResultSet、ResultSetMetaData 等对象。 DatabaseMetaData 对象 DatabaseMetaData 对象提供了关于整个数据库的信息,包括表名、表的...

    DM8程序员手册.pdf

    在元数据方面,DM8提供了ResultSetMetaData、DatabaseMetaData和ParameterMetaData等信息。在分布式事务支持方面,DM8提供了XADataSource、XAConnection、XAResource和Xid等技术支持。 总的来说,DM8数据库是一款...

    jtdsJDBC Driver

    JTDS完全与JDBC 3.0兼容,支持只向前的,和可滚动/可更新的结果集(ResultSets)中并行(完全独立)语句,并且可实施所有databasemetadata和resultsetmetadata方法。 文件有说明spring+hibernate+c3p0+jtds的配置

    JDBC-用元数据将结果集封装为List对象[归类].pdf

    在Java的JDBC(Java Database Connectivity)中,`DatabaseMetaData`和`ResultSetMetaData`是两个非常重要的接口,它们提供了获取数据库元数据和结果集元数据的功能。元数据是指关于数据的数据,例如数据库的表结构...

    01_传智播客JDBC_jdbc的理论概述

    7. **JDBC API的主要类和接口**:包括Driver、Connection、Statement、PreparedStatement、CallableStatement、ResultSet、ResultSetMetaData、DatabaseMetaData等,它们构成了JDBC的核心。 在"01_传智播客JDBC_...

    JDBC入门中文文档

    7. **JDBC API的主要接口和类**:包括Driver、Connection、Statement、PreparedStatement、CallableStatement、ResultSet、ResultSetMetaData、DatabaseMetaData等,每个都有其特定的作用和功能。 8. **异常处理**...

    ORACLE-JDBC

    11. **元数据(MetaData)**:通过ResultSetMetaData或DatabaseMetaData对象,可以获取关于表结构、列信息、索引等数据库元数据。 12. **游标(Cursor)**:在Oracle JDBC中,游标允许用户从结果集中按行进行导航,...

    Java Web程序设计-1期 项目库_单元案例_数据库元数据操作和分页教学案例.doc

    本案例主要讲解如何使用Java的`DatabaseMetaData`类来获取数据库的元数据,并展示了一个简单的分页实现。 首先,`DatabaseMetaData`是Java SQL API的一部分,它是通过数据库连接对象`Connection`获取的。在案例中,...

    关于JDBC方面的学习资料

    其中,`Connection`、`Driver`、`DriverManager`、`Statement`、`PreparedStatement`、`CallableStatement`、`ResultSet`、`ResultSetMetaData`和`DatabaseMetaData`是关键的类和接口。例如,`Connection`类用于建立...

    JAVA连接数据库进行相应的操作

    以及获取和修改数据使用JDBC加载驱动程序、连接数据库、执行SQL语句和处理结果集使用处理预编译语句的接口PreparedStatement执行带参数的动态SQL语句利用CallableStatement接口执行SQL的存储过程使用Database...

    jdbc学习和帮助文档...

    - **`DatabaseMetaData`**:提供有关数据库的元数据信息,如支持的SQL语法、存储过程等。 #### 四、JDBC驱动类型 根据驱动程序的工作方式,JDBC驱动程序可以分为以下几类: 1. **JDBC-ODBC Bridge**:通过ODBC桥接...

    JDBC---初学者入门

    8. **DatabaseMetaData接口**:获取数据库的元数据信息,如表信息、列信息等。 9. **ResultSetMetaData接口**:获取ResultSet对象的元数据,如列数、列名、列类型等。 10. **Types类**:包含静态常量,代表JDBC类型...

    Java数据库编程宝典2

    10.3.1 在JTree中显示DatabaseMetaData 10.4 检索有关RDBMS功能性的信息 10.5 使用ResultSetMetaData 10.6 小结 第3部分 三层Web站点与JDBC 第11章 构建会员Web站点 11.1 设计一个多层系统 11.2 功能性...

    Java数据库编程宝典4

    10.3.1 在JTree中显示DatabaseMetaData 10.4 检索有关RDBMS功能性的信息 10.5 使用ResultSetMetaData 10.6 小结 第3部分 三层Web站点与JDBC 第11章 构建会员Web站点 11.1 设计一个多层系统 11.2 功能性...

    Java数据库编程宝典1

    10.3.1 在JTree中显示DatabaseMetaData 10.4 检索有关RDBMS功能性的信息 10.5 使用ResultSetMetaData 10.6 小结 第3部分 三层Web站点与JDBC 第11章 构建会员Web站点 11.1 设计一个多层系统 11.2 功能性...

Global site tag (gtag.js) - Google Analytics