JDBC学习第二站之ResultSet与ResultSetMeta

时间:2022-01-06 02:59:48

ResultSet:

—— 结果集操作接口
ResultSet 接口是查询结果集接口,它对返回的结果集进行处理。ResultSet 是程
序员进行 JDBC 操作的必需接口。

ResultSetMeta:

—— 元数据操作接口
ResultSetMetaData 是对元数据进行操作的接口,可以实现很多高级功能。Hibernate 运行数
据库的操作,大部分都是通过此接口。可以认为,此接口是 SQL 查询语言的一种反射机制。
8
ResultSetMetaData 接口可以通过数组的形式, 遍历数据库的各个字段的属性, 对于我们开发
者来说,此机制的意义重大。
JDBC 通过元数据(MetaData)来获得具体的表的相关信息,例如,可以查询数据库中有哪
些表,表有哪些字段,以及字段的属性等。MetaData 中通过一系列 getXXX 将这些信息返
回给我们。
JDBC学习第二站之ResultSet与ResultSetMeta


实例代码:
package JDBC_Study;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

public class ResultSetAndMetaData {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String strSql = "select * from student where ssex = '男';";

Connection conn = null;
Statement stm = null;
ResultSet rst = null;

try {
// 通过类的名字,把类(元数据对象)加载到内存中,动态导入数据库的驱动
Class.forName("com.mysql.jdbc.Driver");
// 获取数据库链接
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/score", "root", "123456");
stm = conn.createStatement();

// 获取数据库元数据
DatabaseMetaData dmd = conn.getMetaData();
String productName = dmd.getDatabaseProductName();
String productVersion = dmd.getDatabaseProductVersion();
String driverName = dmd.getDriverName();
String driverVersion = dmd.getDriverVersion();
// 输出
System.out.println("数据库名:" + productName + ", 数据库版本号:"
+ productVersion + "\n驱动名:" + driverName + "\n驱动版本:"
+ driverVersion);


// 执行增、删、改语句,返回int型,受影响的行数
// stm.executeUpdate(strSql);
// 返回一个ResultSet对象,其实就是一个表或者视图
rst = stm.executeQuery(strSql);
// 输出结果
//while (rst.next()) {// 游标下移一行
//System.out.println(rst.getString("Sid") + "\t"
//+ rst.getString("Sname"));
//}

//结果集的元数据
ResultSetMetaData rsmd = rst.getMetaData();
//统计列数
int columnCount = rsmd.getColumnCount();
//获取第一列的属性名称
String label = rsmd.getColumnLabel(1);
//System.out.println(rsmd.getColumnName(1)); // 这也可以获取列的名称
System.out.println("查询结果有" + columnCount + "列");
while(columnCount > 0) {
System.out.println("第" + columnCount + "列的名称为:" + rsmd.getColumnLabel(columnCount));
columnCount -- ;
}


} catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {

//打开是先打开Connection,再打开ResultSet
//关闭是反的关闭
if(rst != null) {
try {
rst.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (stm != null) {
try {
stm.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

}