结果集的取值方法
取结果有两种方法:
按列标题
按列序列号
1 按列标题取值
以下示例中,无论字段是什么类型,均用getString() 来取值演示
String sql = "SELECT id as 学号, name as 姓名,birthday FROM student";Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql);// 取得结果集中的每一行数据while(rs.next()){// 取出这一行记录String id = rs.getString("学号");String name = rs.getString("姓名");String birthday = rs.getString("birthday"); System.out.println(id + "\t" + name + "\t" + birthday ); }
注意,列标题可能不是原始列名,而是AS后的别名。也就是在SQLyog里查询时显示的名称。
2 按列序号取值
示例:
while(rs.next())
{
// 取出这一行记录
String id = rs.getString(1);
String name = rs.getString(2);
String birthday = rs.getString(3);
System.out.println(id + “\t” + name + “\t” + birthday );
}
注意,列序号从1开始计数。1, 2 , 3 …
注意
1.先取值,再关闭连接。
2.取值效率:按列序号>按列标题
3.常用字段都可以用getString()取值
4.列序号从1开始
元数据MetaData
元数据MetaData:即对列字段的描述信息
在结果集中,不仅有每一行的数据,还有元数据信息。包括:列名、列标题、列类型等…
public static void testQuery() throws Exception{// 注册MySQL驱动 Class.forName("com.mysql.jdbc.Driver");// 连接MySQL服务器String username= "root";String password = "a1b2c3";String connectionUrl = "jdbc:mysql://127.0.0.1:3306/af_school?useUnicode=true&characterEncoding=UTF-8";Connection conn = DriverManager.getConnection(connectionUrl, username, password);System.out.println("连接成功!");///// 数据库查询: Statement语句 , ResultSet结果集String sql = "SELECT id as 学号, name as 姓名,birthday FROM student";Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql);// 显示元数据信息ResultSetMetaData rsmd = rs.getMetaData();int numColumn = rsmd.getColumnCount();for(int i=1; i<= numColumn; i++) // 列序号 1,2,3, ...{String name = rsmd.getColumnName(i); // 列名String label = rsmd.getColumnLabel(i); // 列标题 (别名)int type = rsmd.getColumnType(i); // 类型, 参考 java.sql.Types定义String typeName = rsmd.getColumnTypeName(i); // 类型名称System.out.printf("第%d列: %s, %s, %s \n", i, name, label, typeName);}//conn.close();System.out.println("关闭连接!");}
注意:列序号从1开始,所以遍历也是从1开始而不是0