元数据(MetaData):描述数据的数据
三类:
数据库元数据 、参数元数据、结果集元数据
1.数据库元数据 DataBaseMetaData
Connection -> DataBaseMetaData -> .
2.参数元数据 ParameterMetaData
pstmt -> ParameterMetaData -> .
3.结果集元数据 ResultSetMetaData
R
DataBaseMetaData对象可以通过java.sql.Connection对象获取。DataBaseMetaData接口的常见方法如表3.10所示。
方法 |
简介 |
String getDatabaseProductName() throws SQLException |
获取数据库名 |
String getDatabaseProductVersion() throws SQLException |
获取数据库版本信息 |
String getDriverName() throws SQLException |
获取驱动名 |
String getURL() throws SQLException |
获取URL |
String getUserName() throws SQLException |
获取用户名 |
ResultSet getPrimaryKeys( String catalog, String schema, String table) throws SQLException; |
获取指定表的主键信息。 参数: catalog:类别信息,通常设为null; schema:①如果是oracle数据库:大写的用户名;②如果是其它数据库:数据库名。也可以设为null。 table:指定大写的表名。 返回值是一个ResultSet,该结果集包含以下信息: 1表类别 2表模式 3表名称 4列名称(主键名称) 5主键中的序列号(值1表示主键中的第一列,值2表示主键中的第二列,...) 6主键的约束名称 |
表3.10 DataBaseMetaData接口方法
ParameterMetaData对象可以通过java.sql.PreparedStatement对象获取。ParameterMetaData接口的常见方法如表3.11所示。
select *from ..where id= ? and name like ? ;
因为带参数的SQL 是通过pstmt执行的,因此需要从pstmt中获取参数元数据相关信息
方法 |
简介 |
int getParameterCount() throws SQLException; |
获取SQL语句中,参数占位符的个数 |
String getParameterTypeName(int param) throws SQLException; |
获取第param个参数的类型名 |
表3.11 ParameterMetaData接口方法
ResultSetMetaData对象可以通过java.sql.ResultSet对象获取。ResultSetMetaData接口的常见方法如表3.12所示。
方法 |
简介 |
int getColumnCount() throws SQLException; |
获取结果集中,包含列的数量 |
String getColumnName(int column) throws SQLException; |
获取结果集中,第column列的名称 |
String getColumnTypeName(int column) throws SQLException; |
获取结果集中,第column列的类型 |
很多数据库对元数据的支持问题:
①Oralce目前必须使用ojdbc7.jar作为驱动包;
②MySql必须在url中附加参数配置:
jdbc:mysql://localhost:3306/数据库名?generateSimpleParameterMetadata=true
esultSet -> ResultSetMetaData
代码实现
1.数据库元数据
代码:
public static void databsMetaData() {
try {
Class.forName(DRIVER);
Connection connection= DriverManager.getConnection(URL,USERNAME,PASSWORD);
DatabaseMetaData databaseMetaData=connection.getMetaData();
String databaseProductName = databaseMetaData.getDatabaseProductName();
System.out.println("databaseProductName"+databaseProductName);
String databaseProductVersion = databaseMetaData.getDatabaseProductVersion();
System.out.println("databaseProductVersion"+databaseProductVersion);
String userName = databaseMetaData.getUserName();
System.out.println("username:"+userName);
String driverName = databaseMetaData.getDriverName();
System.out.println("driverName"+driverName);
String url = databaseMetaData.getURL();
System.out.println("url"+url);
System.out.println("====================");
ResultSet rs = databaseMetaData.getPrimaryKeys(null, "goods", "STUDENT");
while (rs.next()){
Object tableLeibie=rs.getObject(1);
Object tableMoshi = rs.getObject(2);
Object tableName = rs.getObject(3);
Object columName = rs.getObject(4);
Object pkName = rs.getObject(6);
System.out.println("表模式:"+tableLeibie +"======表类别:"+ tableMoshi+ "======表名:"+
tableName+"======主键列名:"+columName+"====pkName(主键的约束名字):"+pkName);
}
}catch (Exception e){
e.printStackTrace();
}
}
2.参数元数据
//参数元数据
public static void parameterMetaData() {
try {
Class.forName(DRIVER);
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
PreparedStatement pstmt = connection.prepareStatement("select * from student where sno=? and sname = ?");
//通过pstmr获取参数元数据
ParameterMetaData parameterMetaData = pstmt.getParameterMetaData();
int count=parameterMetaData.getParameterCount();
System.out.println("sql语句参数个数为"+count);
for(int i=1;i<=count;i++){
String parameterTypeName = parameterMetaData.getParameterTypeName(i);
System.out.println(parameterTypeName);
}
}catch (Exception e){
e.printStackTrace();
}
}
3.结果集元数据
public static void resultSetMetaData() {
try {
Class.forName(DRIVER);
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
PreparedStatement pstmt = connection.prepareStatement("select * from student");
ResultSet rs=pstmt.executeQuery();
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
System.out.println("列的个数"+columnCount);
System.out.println("===============");
for(int i=1;i<=columnCount;i++){
String columnName = metaData.getColumnName(i);
String columnTypeName = metaData.getColumnTypeName(i);
System.out.print(columnName+"\t"+columnTypeName+"\t");
}
System.out.println("===============");
while(rs.next()){
for(int i=1;i<=columnCount;i++){
System.out.print(rs.getObject(i)+"\t\t\t");
}
System.out.println();
}
}catch (Exception e ){
e.printStackTrace();
}
}