灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3102回复:0

操作元数据

楼主#
更多 发布于:2012-09-08 09:38


JDBC Meta Data(元数据)----描述数据的数据。它的接口有:
n DatabaseMetaData(数据库元数据)
n ResultSetMetaData(结果集元数据)
DatabaseMetaData(数据库元数据)
在对数据源进行连接以后,得到一个Connection对象,可以从这个对象获得有关数据源的各种信息,包括关于数据库中的各个表,表中的各个列,数据类型和存储过程等各方面的信息。根据这些信息,JDBC程序可以访问一个事先并不了解的数据库。获取这些信息的方法都是在DatabaseMetaData的对象上实现的,而DatabaseMetaData对象是在Connection对象之上获得的。
下面的语句可以在一个连接的基础上创建一个DatabaseMetaData 对象:
DatabaseMetaData dm=con.getMetaData();
数据库的一些常用信息可通过DatabaseMetaData对象的下列方法获得。
n  getURL()//返回一个String对象,代表数据库的URL.
n  getUserName()//返回此连接使用的数据库的用户名
n  isReadOnly()//返回一个boolean值,指示数据库是否只允许读操作。
n getDatabaseProduceName()//返回数据库的产品名称
n getDatabaseProduceVersion()//返回数据库的版本号
n  getDriverName()//返回驱动程序的名称。
n getDriverVersion()//返回驱动程序的版本号

代码示例:
[java]
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.NamingException;

public class DataBaseMetaDataTest {
    public static void main(String[] args) {
        Connection con = null;
        String jndiname = "jdbcPool/mydatasource";
        try {
            con = DBCon.getConnectionFromPooledDataSource(jndiname);
            // 测试数据库信息  
            DatabaseMetaData dm = con.getMetaData();
            System.out.println("1. 数据库的基本信息");
            System.out.println("Database is " + dm.getDatabaseProductName());
            System.out.println("Database version is "
                    + dm.getDatabaseProductVersion());
            System.out.println("JDBC Driver is " + dm.getDriverName());
            System.out.println("JDBC driver version is "
                    + dm.getDriverVersion());
            // 获取数据库中目录(数据库)的信息  
            System.out.println("2. 数据库中目录(数据库)的信息");
            ResultSet catalogs = dm.getCatalogs();
            while (catalogs.next()) {
                System.out.println(catalogs.getString(1));
            }
            // 获取数据库中模式的信息  
            System.out.println("3. 数据库中模式的信息");
            ResultSet schemas = dm.getSchemas();
            while (schemas.next()) {
                System.out.println(schemas.getString(1));
            }
            // 获取数据库中各个表的情况  
            System.out.println("4. 数据库中各个表的信息");
            ResultSet tables = dm.getTables("pubs", null, null, null);
            while (tables.next()) {
                for (int i = 0; i < 5; i++) {
                    System.out.print(tables.getString(i + 1));
                    System.out.print("  |  ");
                }
                System.out.println();
            }
            // 获取数据库表中各个列的信息  
            System.out.println("5. 数据库表中各个列的信息");
            ResultSet columns = dm.getColumns(null, null,  
    "student", null);
            while (columns.next()) {
                for (int i = 0; i < 18; i++) {
                    System.out.print(columns.getString(i + 1));
                    System.out.print("  |  ");
                }
                System.out.println();
            }
        } catch (NamingException ex) {
            System.err.println("Name Not Bound : " + ex.getMessage());
        } catch (SQLException ex) {
            System.err.println("SQLException : " + ex.getMessage());
        } finally {
            try {
                if (con != null)
                    con.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        System.out.println("程序结束!!!");
    }
}
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.NamingException;
public class DataBaseMetaDataTest {
public static void main(String[] args) {
  Connection con = null;
  String jndiname = "jdbcPool/mydatasource";
  try {
   con = DBCon.getConnectionFromPooledDataSource(jndiname);
   // 测试数据库信息www.atcpu.com
   DatabaseMetaData dm = con.getMetaData();
   System.out.println("1. 数据库的基本信息");
   System.out.println("Database is " + dm.getDatabaseProductName());
   System.out.println("Database version is "
     + dm.getDatabaseProductVersion());
   System.out.println("JDBC Driver is " + dm.getDriverName());
   System.out.println("JDBC driver version is "
     + dm.getDriverVersion());
   // 获取数据库中目录(数据库)的信息
   System.out.println("2. 数据库中目录(数据库)的信息");
   ResultSet catalogs = dm.getCatalogs();
   while (catalogs.next()) {
    System.out.println(catalogs.getString(1));
   }
   // 获取数据库中模式的信息
   System.out.println("3. 数据库中模式的信息");
   ResultSet schemas = dm.getSchemas();
   while (schemas.next()) {
    System.out.println(schemas.getString(1));
   }
   // 获取数据库中各个表的情况
   System.out.println("4. 数据库中各个表的信息");
   ResultSet tables = dm.getTables("pubs", null, null, null);
   while (tables.next()) {
    for (int i = 0; i < 5; i++) {
     System.out.print(tables.getString(i + 1));
     System.out.print("  |  ");
    }
    System.out.println();
   }
   // 获取数据库表中各个列的信息
   System.out.println("5. 数据库表中各个列的信息");
   ResultSet columns = dm.getColumns(null, null,
"student", null);
   while (columns.next()) {
    for (int i = 0; i < 18; i++) {
     System.out.print(columns.getString(i + 1));
     System.out.print("  |  ");
    }
    System.out.println();
   }
  } catch (NamingException ex) {
   System.err.println("Name Not Bound : " + ex.getMessage());
  } catch (SQLException ex) {
   System.err.println("SQLException : " + ex.getMessage());
  } finally {
   try {
    if (con != null)
     con.close();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  System.out.println("程序结束!!!");
}
}
ResultSetMetaData(结果集元数据)
根据结果集的元数据,可以得到一个查询结果集关于查询表中列的个数,各个列名,类型以及各个列的宽度等。ResultSetMetaData的对象可以由ResultSet对象的getMetaData()方法得到。
ResultSetMetaData对象的常用方法如下:
n ResultSet rs=stmt.executeQuery();
n ResultSetMetaData rsmd=rs.getMetaData();
n rsmd.getColumnCount()//返回ResultSet对象的列数。
n rsmd.getColumnDisplaySize(int column);//返回column指定的列的最大宽度。
n rsmd.getColumnLabel(int column)//返回column指定列的标签。
n rsmd.getColumnName(int column)//返回column指定列的列名。
请看下例:
[java]
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import javax.naming.NamingException;

public class ResultSetMetaDataTest {
    public static void main(String[] args) {
        Statement stmt = null;
        ResultSet rs = null;
        Connection con = null;
        String jndiname = "jdbcPool/mydatasource";
        try {
            con = DBCon.getConnectionFromPooledDataSource(jndiname);
            stmt = con.createStatement();
            String querySQL1 = "select * from student";
            rs = stmt.executeQuery(querySQL1);

            // 提取结果集的元数据:  
            ResultSetMetaData rsmd = rs.getMetaData();
            int colCount = rsmd.getColumnCount();
            String[] columnNames = new String[colCount];
            String[] columnLabels = new String[colCount];
            int[] columnTypes = new int[colCount];

            for (int i = 0; i < colCount; i++) {
                columnNames = rsmd.getColumnName(i + 1);
                columnLabels = rsmd.getColumnLabel(i + 1);
                columnTypes = rsmd.getColumnType(i + 1);
            }
            System.out.println();
            System.out.println("提取的数据如下:");
            System.out.println();

            System.out  .println("----------------------");
            for (int i = 0; i < colCount; i++) {
                System.out.print(columnLabels + "\t");
            }
            System.out.println();
            for (int i = 0; i < colCount; i++) {
                System.out.print(columnNames + "\t");
            }
        } catch (NamingException ex) {
            System.err.println("Name Not Bound : " + ex.getMessage());
        } catch (SQLException ex) {
            System.err.println("SQLException: " + ex.getMessage());
        } finally {
            try {
                if (con != null)
                    con.close();
            } catch (Exception e) {

            }
        }
        System.out.println("程序结束!!!");
    }
}


喜欢0 评分0
游客

返回顶部