您的位置:首页 > 职场人生

你知道为什么考你这个?——Java面试题及答案汇总分析(5)

2009-09-10 12:38 956 查看
9.创建一个类InfoHelper访问Oracle数据库表T_Student,并在JSP页面上使用此类,分页显示表中数据。
类HelperInfo样式:
package com.netiky.test;
import java.util.Vector;
public class InfoHelper {
/**
* @param sql 访问数据库sql
* @param pageNo 访问页码
* @param pageSize 每页显示结果数量
* @return 访问页数据
*/
public Vector getInfo(String sql, int pageNo, int pageSize){

}
}
写出上述未完成代码和JSP页面代码。
数据库连接串:jdbc:oracle:thin:@127.0.0.1:1521:orcl
用户名:admin
密码:admin
参考答案:
InfoHelper代码:
package com.netiky.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

public class InfoHelper {
/**
* @param sql 访问数据库sql
* @param pageNo 访问页码
* @param pageSize 每页显示结果数量
* @return 访问页数据
*/
public Vector<String> getInfo(String sql, int pageNo, int pageSize){
Vector<String> result = null;
Connection conn = null;
Statement st = null;
PreparedStatement pst = null;
ResultSet rs = null;
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String user = "admin";
String password = "admin";
try {
int count = 0;
//获取数据库连接
conn = this.getConnection(url, user, password);
//获取总的记录数
String countSql = "Select count(*) from T_STUDENT";
st = conn.createStatement();
rs = st.executeQuery(countSql);
if(rs.next()){
count = rs.getInt(1);
}
rs.close();
rs = null;
st.close();
st = null;

//计算记录起始位置和结束为止
int beginNo = (pageNo-1) * pageSize + 1;
if(beginNo <= 0 || beginNo > count){
beginNo = 1;
}
int endNo = beginNo + pageSize -1;
if(endNo > count || endNo <=0){
endNo = count;
}
result = new Vector<String>(endNo - beginNo +1);
//获取数据集
pst = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = pst.executeQuery();
//将结果指针指向第一条记录
rs.absolute(beginNo);
do{
result.add(rs.getString(1));
beginNo ++;
}
while(beginNo <= endNo && rs.next());
rs.close();
rs = null;
pst.close();
pst = null;
this.releaseConnection(conn);
} catch (Exception e) {
e.printStackTrace();
} finally{
if(rs != null){
try {
rs.close();
rs = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
if(st != null){
try {
st.close();
st = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
if(pst != null){
try {
pst.close();
pst = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return result;
}
/**
* 获取数据库连接
* @param url 数据库连接串
* @param user 数据库用户名
* @param password 数据库密码
* @return
* @throws ClassNotFoundException
* @throws SQLException
*/
private Connection getConnection(String url, String user, String password) throws Exception{
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
throw e;
} catch (SQLException e) {
throw e;
}
return conn;
}
/**
* 释放数据库连接
* @param conn 将要被释放的数据库连接
* @throws SQLException
*/
private void releaseConnection(Connection conn) throws SQLException{
try {
if(conn != null){
conn.close();
conn = null;
}
} catch (SQLException e) {
throw e;
} finally{
if(conn != null){
conn.close();
conn = null;
}
}
}
}
JSP页面代码:
<%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<%@page import="com.netiky.test.InfoHelper"%>
<%@page import="java.util.Vector"%>
<%
String pageNo = request.getParameter("pageNo");
int pn = 1;
if(pageNo != null){
pn = Integer.parseInt(pageNo);
}
InfoHelper ih = new InfoHelper();
String sql = "select * from T_Student";
Vector<String> result = ih.getInfo(sql, pn, 2);
for(int i = 0; i < result.size(); i ++){
String name = result.get(i);
%>
<%=name %><br/>
<%
}
if(pn > 1){
%>
<a href="Student.jsp?pageNo = <%=pn-1 %>">上一页</a>
<%
}
%>
<a href="Student.jsp?pageNo=<%=pn+1 %>">下一页</a>
分析:
此题目通过一个分页应用考察应试者的数据库、jsp相关知识,及编码能力。
相信即使工作多年的同志们,如果没事先准备过,这道题目要回答的完美也不太可能。但是,相信面试官也知道这个情况,所以,回答此题的关键点在于,关键知识点要回答情况,例如,如果获取数据库连接,如果关闭数据库连接,如何查询数据库表,简单sql的编写,还有数据的分页,基本语法,程序结构大体正确就好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: