/**
* 从 ResultSetMetaData 获取列信息
*/
@Test
void testResultSetMetadata() throws SQLException {
try (Connection conn = DriverManager.getConnection(URL)) {
// 创建测试表
try (Statement stmt = conn.createStatement()) {
stmt.execute("CREATE TABLE IF NOT EXISTS rs_meta_test ("
+ "id INT, "
+ "name VARCHAR(100), "
+ "score DOUBLE, "
+ "active BOOLEAN)");
stmt.executeUpdate(
"INSERT INTO rs_meta_test VALUES (1, '测试', 95.5, true)");
}
// 从查询结果获取 ResultSetMetaData
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM rs_meta_test")) {
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
assertEquals(4, columnCount, "应有 4 列");
System.out.println("列数: " + columnCount);
System.out.println("=== 列信息 ===");
for (int i = 1; i <= columnCount; i++) {
String colName = rsmd.getColumnName(i);
String colTypeName = rsmd.getColumnTypeName(i);
System.out.printf("列 %d: name=%s, typeName=%s%n",
i, colName, colTypeName);
}
// 断言验证列名
assertEquals("ID", rsmd.getColumnName(1));
assertEquals("NAME", rsmd.getColumnName(2));
assertEquals("SCORE", rsmd.getColumnName(3));
assertEquals("ACTIVE", rsmd.getColumnName(4));
}
// 清理
try (Statement stmt = conn.createStatement()) {
stmt.execute("DROP TABLE IF EXISTS rs_meta_test");
}
}
}