处理结果集
查询结果都保持在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);