java中的DataBaseMetaData与ResultMetaData使用:
DataBaseMetaData 类对象通过Connection类对象获取
1, 获取数据库的url
2, 获取用户名
3, 获取有哪些数据库
package com.xzq.jdbc;import com.xzq.dbutils.DbUitl;import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;public class prac3 {public static void main(String[] args) {try {Connection connection = DbUitl.getConnection();//通过connection对象获取DatabaseMetaData baseMetaData = connection.getMetaData();String url = baseMetaData.getURL();System.out.println(url);/*获取用户名*/String user = baseMetaData.getUserName();System.out.println(user);/*得到mysql中有哪些数据库*/ResultSet resultSet = baseMetaData.getCatalogs();while(resultSet.next()){System.out.println(resultSet.getString(1));}} catch (SQLException e) {e.printStackTrace();}}
}
运行结果:

ResultMetaData类对象通过ResultSet类获取
1,获取列数
2,获取字段名
3,获取字段别名
4,获取字段取值是否可以为空
package com.xzq.jdbc;import com.xzq.dbutils.DbUitl;import java.sql.*;public class prac5 {public static void main(String[] args) throws SQLException {/*放在外面,用来关闭资源*/Connection connection = null;PreparedStatement preparedStatement = null;ResultSet resultSet = null;try {connection = DbUitl.getConnection();String sql="select id 'ID号',name '姓名', birth '出生日' from user";preparedStatement = connection.prepareStatement(sql);resultSet = preparedStatement.executeQuery();/*根据集合得到元数据*/ResultSetMetaData resultSetMetaData = resultSet.getMetaData();/*获取列数*/int count = resultSetMetaData.getColumnCount();System.out.println("数据库的字段数:"+count);/*获取字段名*/String flag;for(int i=0; i<count ; i++){String columnname = resultSetMetaData.getColumnName(i+1);String columnlabel = resultSetMetaData.getColumnLabel(i+1);//resultSetMetaData.isNullable(index):判断字段取值是否可以为空if(resultSetMetaData.isNullable(i+1)==0){flag="不可以空值";}else{flag="可以为空值";}System.out.println(columnname+" - - "+ columnlabel+ " - - "+flag);}} catch (SQLException e) {e.printStackTrace();}finally {DbUitl.Close(resultSet,preparedStatement,connection);}}
}
运行结果:














