1.ResultSet类的作用
ResultSet(结果集)是数据库结果集的数据表,通常通过执行查询数据库的语句生成
一个ResultSet对象对应着一个由查询语句返回的一个表这个表中包含所有的查询结果。可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功,可能完成对数据的更新等。
实际上,我们就可以将一个ResultSet对象看成一个表。对ResultSet对象的处理必须逐行进行,而对每一行中的各个列,可以按任何顺序进行处理。
Statement statement = con.createStatement();
String sql = "select * from student ";
ResultSet resultSet = statement .executeQuery(sql);
//ResultSet类的next()方法使这个指针向下移动一行
//如果取到的resultSet 结果集里面没有元素,则resultSet .next() = false;
while(resultSet.next()){
//具体实现的代码块
}
ResultSet 维护指向其当前数据行的光标。每调用一次 next 方法,光标向下移动一行。最初它位于第一行之前,因此第一次调用 next 将把光标置于第一行上,使它成为当前行。随着每次调用 next 导致光标向下移动一行,按照从上至下的次序获取ResultSet 行
next()方法的返回值是一个boolean型的值。
- true:结果集中还存在记录,并且指针已经成功指向该记录,可以对其进行处理
- false:说明没有下一行记录,结果集已经处理完毕。
2.ResultSet类的具体操作
(1)获得结果集的信息
Sun公司提供的getXXX( ) API提供两种方法来指定列名进行检索:
- 以一个int值作为列的索引
- 以一个String对象作为列名来索引
为了方便下面的例子解释说明,创建一个名student的表,如下:
student_id | student_name | student_phone | student_class |
5120185 | miaoling | 12345678910 | csdn-01 |
5120186 | liwen | 12345678911 | csdn-02 |
以一个int值作为列的索引
方法 getXXX 提供了获取当前行中某列值的途径。在每一行内,可按任何次序获取列值。但为了保证可移植性,应该从左至右获取列值,并且一次性地读取列值。列名或列号可用于标识要从中获取数据的列
String sql = "select student_id,student_name,student_class from student ";
ResultSet resultSet = sta.executeQuery(sql);
//一下两者效果一样
//String studentId = resultSet .getString("student_id");
//String studentId = resultSet .getString(1);
提供使用列名这个选项的目的是为了让在查询中指定列名的用户可使用相同的名字作为 getXXX 方法的参数。另一方面,如果 select 语句未指定列名(例如在“select * from table1”中或列是导出的时),则应该使用列号。如果列名已知,但不知其索引,则可用方法 findColumn(String ColumnName)得到其列号。
以student表为例说明:
java.sql.Statement stmt = conn.createStatement();
ResultSet r = stmt.executeQuery("select student_id,student_name,student_class from student");
while (r.next()){
// 打印当前行的值。
int i = r.getInt("student_id");
String s = r.getString("student_name");
int f = r.getFloat("student_class ");
System.out.println("student= " + i + " " + s + " " + f);
}
输出结果为:
- student=5120185miaolingcsdn-01
- student=5120180liwencsdn-02
以一个String对象作为列名来索引
有时并不知道结果集中各个列的情况,这时可以使用Resultset类的getMetaData方法来获取结果集的信息
//前面的代码和上面一样
String sql = "select * from student ";
ResultSet resultSet = sta.executeQuery(sql);
//GetMetaData()方法返回一个ResultSetMetaData类的对象
//使用该类的方法,得到许多关于结果集的信息
ResultSetMetaData resultSetMD = resultSet.getMetaData();
ResultSetMetaData方法 | 作用和返回值 |
getColumnCount() | 返回一个int值,指出结果集中的列数 |
getTableName(int column) | 返回一个String对象,指出参数中所代表列的表的名称 |
getColumnLabel(int column) | 返回一个String对象,该对象是column所指的列的显示标题 |
getColumnName(int column) | 返回的是该列在数据库中的名称 |
getColumnTypeName(int comlumn) | 返回指定列的数据类型在数据源中的名称 |
以student表为例说明:
String sql="select * from student";
Statement sta = con.createStatement();
ResultSet resultSet = sta.executeQuery(sql);
ResultSetMetaData resultSetMD = resultSet.getMetaData();
//输出student表的列数——4
System.out.println("ColumnCount:" + resultSetMD.getColumnCount());
for(int i=0;i<resultSetMD.getColumnCount();i++){
//输出字段字(student_id student_name student_phone student_class)
System.out.println("ColumnName:" + resultS etMD.getColumnName(i));
//输出字段的数据类型
System.out.println( "ColumnTypeName:" +resultSetMD.getColumnTypeName(i));
}