JDBC高级应用 - 处理结果集

处理结果集

查询结果都保持在ResultSet结果集中,遍历结果集便可以取得其中的数据。

查询多个结果集

实际应用中,一般会查询多个表格,查询多个表格可以使用同一个Statement或者PreparedStatement实现,返回同一个ResultSet对象
例如:

String sql = "select * from table1";
pStmt = conn.prepareStatement(sql);
rs = pStmt.executeQuery();
while(rs.next()){
    //遍历数据
}
//不用执行rs.close(),JDBC默认自动关闭前一次查询的RS
String sql = "select * from table2";
pStmt = conn.prepareStatement(sql);
rs = pStmt.executeQuery();
while(rs.next()){
    //遍历数据
}

可以滚动的结果集

除了常用的next()方法,ResultSet接口还有其它的方法,如previous(),first(),last()等,如果后面还有记录,next()会返回true,同时自动滚向下一条记录,否则返回false。previous()则相反。
为了效率,Statement默认返回的是RS是只向后滚动的,因此只有next,last方法可用,要使用previous,first等方法,可以按如下方法
创建Statement:

stmt =conn.createStatement(Result.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery("...");

其中第1个参数指定创建的ResultSet可以自由滚动,第2个参数指定Statement创建的ResultSet可以直接修改

Pagination分页显示

数据量大时需要分页显示,分页显示时只从数据库中取出本页要显示的记录,而不必把所有的记录都读取出来。MySQL中实现分页是利用LIMIT来实现的,如“select * from table1 limit 21,10”,只取出从第21行开始的10行记录。
分页时要先计算记录总数,然后再计算页面数,当计算好后,制作分页。
如果是sql server的话:
select top 10 * from table1 where id not in(select top (pageNum-1)*10 id)

Pagination分页显示-步骤

(1)取得传来的要显示的页面数
(2)定义分页变量

int pageNum = 1; //当前页面
int pageSize = 3; //每页的记录条数
int pageSum = 0; //总页面数

(3)计算总页面数

pageSum = iCount/pageSize;  
if(iCount%pageSize!=0)
{
        pageSum+=1;
}

(4)取得分页数据并显示

ResultSetMetaData元数据

ResultSet可以通过无数据在不知道列名的时候将列名取出来。
rs = pStmt.executeQuery();
ResultSetMetaData meta = rs.getMetaData();
int columnCount = meta.getColumnCount();
String[] columns = new String[columnCount];
System.out.println("各个列的列名如下:");
for(int i=1;i<columnCount;i++){
columns[i-1]=meta.getColumnName(i);
System.out.println(columns[i-1]);
}

直接显示中文列名

    Sql查询的时候可以声明别名:
    Select id 编号, uname 姓名, realname 真实姓名 from table1 显示列名时的语句: columns[i-1]=meta.getColumnLabel(i);

你可能感兴趣的:(数据库,jdbc,对象)