摘要:目前数据库的应用非常普遍,在应用程序的开发过程中,经常会涉及到访问数据库。Java使用JDBC技术进行数据库的访问。查询是数据库的操作中较为频繁的一种操作,返回的结果有时可能是很多条记录的结果集,用户在浏览和处理时不方便,常常会用到分页处理功能。
关键词:JDBC数据库;驱动程序;结果集 中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)06-11511-01 1 JDBC技术 JDBC(Java Database Connectivity)是Sun提供的一套数据库编程接口API函数,由Java语言编写的类和接口组成。JDBC为数据库开发人员提供了一个标准的API,使用Java编程语言和JDBC结合编写的应用程序,无须考虑要为不同的平台编写不同的应用程序。真正实现“Write Once,Run Everywhere!”。 2 JDBC编程实现 使用JDBC技术进行数据库访问时,Java应用程序通过JDBC API和JDBC驱动程序管理器之间进行通信,JDBC驱动程序管理器以两种方式和最终的数据库进行通信:一是使用JDBC-ODBC桥驱动程序的间接方式,另一种是使用JDBC驱动程序的直接方式。 下面以JDBC驱动程序的直接方式为例,说明Java语言与SQL Server2000连接的JDBC编程的全过程: (1)加载驱动程序 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); (2)通过DriverManager到得一个与数据库连接的句柄 private static String url="jdbc:microsoft:sqlserver://localhost:1433;databasename=xxxx "; Connection con = DriverManager.getConnection(url, user,password); (3)通过连接句柄绑定要执行的语句 Statement stmt = con.createStatement(); (4)接收执行结果 ResultSet rs=stmt.executeQuery(sql); 或ResultSet rs=stmt.executeUpdate(sql); (5)对结果进行处理 调用get XXX()方法对获取结果中的值。 (6)关闭与数据库的连接 rs.close(); stmt.close(); con.close(); 3 JDBC编程结果集分页显示 在ResultSet类中提供了一套数据的分页处理功能。 3.1 技术要点 (1)createStatement()方法: public Statement createStatement() 获取默认连接声明,没有指针操作 public Statement createStatement(int resultSetType,int resultSetConcurrency) resultSetType决定结果集类型的滚动方式,它的取值为:ResultSet.TYPE_FORWARD_ONLY、Result.TYPE_SCROLL_INSENSITIVE和ResultSet.TYPE_SCROLL_SENSITIVE resultSetConcurrency决定是否可以用结果集更新数据库。它的取值为:Result.CONCUR_READ_ONLY 、Result.CONCUR_UPDATETABLE (2)ResultSetMetaData结果集元对象类 结果集元数据通过使用getMetaData()来获得结果集元对象。ResultSetMetaData结果集元对象类的方法: getColumnCount() getColumnName(int index) getColumnTypeName(int index) 3.2 建立数据库 在SQL Server 2000下建立一个名为book的数据库,在book数据库下建立一个图书信息表bookInfo,表的结构为:bookInfo(no,bookname,author,price,public) 3.3 Java源程序 为了使得程序具有一定的通用性和灵活性,将要显示的号码和每页的大小(每页的记录数)由命令行输入。即命令行参数arg[0]代表pageno,参数arg[1] 代表pagesize。源程序JDBCScrollDisplay.java如下: import java.sql.*; public class JDBCScrollDisplay{ private static String url="jdbc:microsoft:sqlserver://localhost:1433;databasename=book"; private static String username="sa"; private static String password="sa"; public Connection conn(){ try { Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); Connection con = DriverManager.getConnection(url, username, password); return con; } catch(SQLException e1){ System.out.println("can't connection db:"+e1); return null; } catch (Exception e2) { System.out.println("Failed to load JDBC driver."); return null; } } public void query(Connection con, String sql,int pageNo,int pageSize){ try{ if(con==null){ throw new Exception("database connection can't use!"); } if(sql==null){ throw new Exception("check your parameter: 'sql'! don't input null!"); } int rowCount; //记录总数 int pageCount; //总页数 Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ResultSet rs = stmt.executeQuery(sql); //执行查询 ResultSetMetaData rmeta = rs.getMetaData();//获得数据字段个数 int numColumns = rmeta.getColumnCount(); rs.last(); rowCount = rs.getRow(); pageCount = (rowCount +pageSize-1)/pageSize; //计算总页数 if(pageNo> pageCount) pageNo=pageCount; //调整待显示的页码 if(pageCount >0){ rs.absolute((pageNo-1)*pageSize+1); //将记录指针定位到待显示页的第一条记录上 int i = 0; while(i){ for(int j = 0;j< numColumns;j++) { String sTemp = rs.getString(j+1); System.out.print(sTemp+" "); } i++; rs.next(); System.out.println(""); } } } catch(Exception e){ System.out.println("query error:"+e); } } public void demo(int pageNo,int pageSize){ try{ JDBCScrollDisplay jd = new JDBCScrollDisplay(); Connection con = jd.conn(); String sql = "select * from bookInfo order by no"; jd.query(con,sql,pageNo,pageSize); con.close();} catch(SQLException se){ System.out.println(se);} catch(Exception e){System.out.println(e);}} public static void main(String[] arg){ JDBCScrollDisplay jsd = new JDBCScrollDisplay(); int pageno = Integer.parseInt(arg[0]); int pagesize = Integer.parseInt(arg[1]); jsd.demo(pageno,pagesize);}} 4 结束语 JDBC是Java的一个标准SQL数据库访问接口,它为数据库应用开发人员、数据库前台工具开发人员提供一种标准的应用程序设计接口。开发人员只需使用JDBC提供的类,调用这些类的方法,即可对数据库进行访问,而无需关心所使用的具体是什么数据库系统。在实际的使用中经常会遇到要提供可滚动的结果集,只需要在使用分页数据时先声明是一个可移动的SQL语句。上例可以任何应用在对数据库做任意操作的基础上,再分页显示。 |
|