元数据最本质、最抽象的定义为:data about data (关于数据的数据)。它是一种广泛存在的现象,在许多领域有其具体的定义和应用。
JDBC中的元数据,有数据库元数据(DatabaseMetaData),参数元数据(ParameterMetaData),结果集元数据(ResultSetMetaData)
分别封装了数据库产品名字等数据库信息、查询参数的个数等参数信息、结果集的列数等结果集信息。
数据库元数据
/**
*数据库的整体综合信息。
*/
public interface DatabaseMetaData extends Wrapper {
/**
* 查询数据库产品的名字
*/
String getDatabaseProductName() throws SQLException;
/**
* 查询数据库产品的版本号。
*/
String getDatabaseProductVersion() throws SQLException;
}
/**
* 一个被用来获得每一个参数的类型和属性的对象
*/
public interface ParameterMetaData extends Wrapper {
/**
* 查询参数的个数。
*/
int getParameterCount() throws SQLException;
}
/**
* 一个被用来获得ResultSet中的列的类型和属性的对象。
*/
public interface ResultSetMetaData extends Wrapper {
/**
* 返回结果集中的列数。
*/
int getColumnCount() throws SQLException;
}
上述不完整源码,摘自OpenJDK源码java.sql包,完整源码请参考OpenJDK源码,完整用法请参考JDK API文档。小试牛刀
package cn.fansunion.project;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
/**
*
* OpenJDK源码研究笔记(十二):JDBC中的元数据,数据库元数据(DatabaseMetaData),参数元数据(ParameterMetaData)
* ,结果集元数据(ResultSetMetaData)
*
* @author LeiWen@FansUnion.cn 2013年11月2日
*
*/
public class JDBCMetadataExample {
public static void main(String[] args) throws ClassNotFoundException,
SQLException {
Connection con = getOneConnection();
// 数据库元数据
DatabaseMetaData dbmd = con.getMetaData();
displayDatabaseMetaData(dbmd);
println("\n");
// Password是密文,Windows数据库表名不区分大小写
String sql = "select User,Password,Host from mysql.user where User=? and Host = ?";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, "root");
ps.setString(2, "localhost");
ResultSet userResultSet = ps.executeQuery();
// 参数元数据
ParameterMetaData pmd = ps.getParameterMetaData();
displayParameterMedata(pmd);
println();
// 结果集元数据
ResultSetMetaData rsmd = userResultSet.getMetaData();
displayResultSetMetaData(rsmd);
println("查询的用户列表:");
while (userResultSet.next()) {
print(userResultSet.getString("User") + "\t");
print(userResultSet.getString("Password") + "\t");
println(userResultSet.getString("Host"));
}
}
// 获得一个数据库连接
private static Connection getOneConnection() throws ClassNotFoundException,
SQLException {
// 加载MySQL数据库驱动
Class.forName("com.mysql.jdbc.Driver");
// 根据3个参数构造数据库连接
String url = "jdbc:mysql://localhost:3306";
String name = "root";
String password = "123456";
Connection con = DriverManager.getConnection(url, name, password);
return con;
}
// 工具方法:打印数据库的元数据。如果想打印更多信息,只要扩展这个方法即可,不需要修改代码结构。
private static void displayDatabaseMetaData(DatabaseMetaData dbmd)
throws SQLException {
// 元数据信息
println("驱动的名字:" + dbmd.getDriverName());
println("驱动的版本号:" + dbmd.getDriverVersion());
println("数据库产品名字:" + dbmd.getDatabaseProductName());
println("数据库产品版本号:" + dbmd.getDatabaseProductVersion());
println("数据库主版本号:" + dbmd.getDatabaseMajorVersion());
println("数据库次版本号:" + dbmd.getDatabaseMinorVersion());
println("JDBC主版本号:" + dbmd.getJDBCMajorVersion());
println("JDBC次版本号:" + dbmd.getJDBCMinorVersion());
// 元数据获得的数据库名字结果集
ResultSet dbResultSet = dbmd.getCatalogs();
// 打印所有数据库的名字
while (dbResultSet.next()) {
print(dbResultSet.getString(1) + "\t");
}
}
// 工具方法:打印结果集的元数据。如果想打印更多信息,只要扩展这个方法即可,不需要代码结构。
private static void displayResultSetMetaData(ResultSetMetaData rsmd)
throws SQLException {
int columnCount = rsmd.getColumnCount();
println("查询的列数:" + columnCount);
}
// 工具方法:打印参数的元数据。如果想打印更多信息,只要扩展这个方法即可,不需要修改代码结构。
private static void displayParameterMedata(ParameterMetaData pmd)
throws SQLException {
int parameterCount = pmd.getParameterCount();
println("参数的个数:" + parameterCount);
}
// 工具方法:简化打印输出
private static void println() {
System.out.println();
}
private static void println(Object o) {
System.out.println(o);
}
private static void print(Object o) {
System.out.print(o);
}
}
有模有样
驱动的名字:MySQL-AB JDBC Driver
驱动的版本号:mysql-connector-java-5.1.22 ( Revision: ${bzr.revision-id} )
数据库产品名字:MySQL
数据库产品版本号:5.5.17
数据库主版本号:5
数据库次版本号:5
JDBC主版本号:4
JDBC次版本号:0
information_schema mysql
参数的个数:2
查询的列数:3
查询的用户列表:
root *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 localhost
元数据的一种典型应用-数据库管理系统
有兴趣的朋友,可以读下
相关阅读
我的CSDN博客专栏 OpenJDK源码研究笔记
OpenJDK源码研究过程中整理的学习笔记。 OpenJDK是GPL许可(GPL-licensed)的Java平台的开源实现。
原文参见:http://FansUnion.cn/articles/3066(小雷网-FansUnion.cn)
分享到:
相关推荐
java openJDK 源码, Hotspot, 未编译, 原始代码, 直接zip压缩包, java openJDK 源码, Hotspot, 未编译, 原始代码, 直接zip压缩包, java openJDK 源码, Hotspot, 未编译, 原始代码, 直接zip压缩包
OpenJdk源码包,
openjdk源码1
openjdk8源码,适合深入学习jdk源码的同学
openjdk-17源码(openjdk-17+35_src.zip)
前几天看完了深入理解 Java 虚拟机-JVM 高级特性与最佳实践(第2版) 这本书突发奇想想研究一下jdk的源码,所以在csdn上把自己的搭建过程记录一下,避免下次踩坑(虽然我也看不懂 卑微 有需要的小伙伴可以加我QQ:...
openjdk hotspot源码,在研究JAVA虚拟机时,这个源码是必不可少的。
OpenJDK源代码,便于程序员筒子们深入研究JDK运行机制
java虚拟机 源码 openjdk7 openjdk7源码(深入理解java虚拟机,读书笔记) 官方源码下载来自:
openjdk8 源码,openjdk8 源码,openjdk8 源码,openjdk8 源码
openjdk jdk源码,在研究JAVA本地方法源码时,这个是必须的。
openjdk1.8 源码查看
openjdk7 的源码 百度云下载链接 方便国内用户使用
主要是编译openjdk需要的包
openjdk8源码,下载解压后目录如下: 文件夹: .jcheck common corba hotspot jaxp jaxws jdk langtools make nashorn test 以及文件: .hgignore .hgtags ASSEMBLY_EXCEPTION configure get_source.sh LICENSE ...
openjdk
openjdk 7u的源码,可以用来编译jvm(已编译成功),深入理解java虚拟机。由于资源上传限制,7u和6两个源码压缩为3个分卷,请下载3个分卷放在同一文件夹中再解压。自用资源,放心下载。
OpenJDK是GPL许可(GPL-licensed)下的Java平台的实现。资源是Openjdk11源码。
在openjdk开源源码站下载速度过慢,这里提供openjdk8u的完整可编译源码,供大家自己编译属于自己的jdk版本,已经阅读openjdk源码帮助学习。在openjdk开源源码站下载速度过慢,这里提供openjdk8u的完整可编译源码,供...
openjdk源码2