通过 ResultSetMetaData 可以获得select语句产生的虚拟表的表结构(表名,列名,数据类型,列的个数)
public static void main(String[] args) throws ClassNotFoundException,
SQLException {
获得Connection对象
Class.forName("com.mysql.cj.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/school?serverTimezone=Asia/Shanghai&useSSL=false";
//数据用户
String user="root";
//数据库用户密码
String password="root";
Connection conn = DriverManager.getConnection(url, user, password);
//定义sql语句
String sql="select * from Student";
//预编译sql语句
PreparedStatement pstat = conn.prepareStatement(sql);
//发送执行sql语句,ResultSet封装虚拟表中的数据
ResultSet res = pstat.executeQuery();
获得封装虚拟表,表结构的对象
ResultSetMetaData rsmd = res.getMetaData();
通过rsmd获得查询的表的名字
String tableName = rsmd.getTableName(1);
System.out.println(tableName);
通过rsmd获得查询到列的个数,以虚拟表为基准
int count = rsmd.getColumnCount();
System.out.println("count="+count);
for(int x=1;x<=count;x++) {
获得每个列的列名
String name = rsmd.getColumnName(x);
System.out.println("name="+name);
获得每个列的数据类型,是用单词表示
String typeName = rsmd.getColumnTypeName(x);
System.out.println("typeName="+typeName);
数据库的数据类型,在java都经过了定义
获得每个列的数据类型,是用整数表示
int type = rsmd.getColumnType(x);
System.out.println("type="+type);
获得列对应的java类型
数据库的每个列在java中都对应一个java的类型
//int - java.lang.Integer
//varchar - java.lang.String
//Date - java.sql.Date
String colName = rsmd.getColumnClassName(x);
System.out.println("colName="+colName);
System.out.println("--------------------------");
}
}