你知道为什么考你这个?——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的编写,还有数据的分页,基本语法,程序结构大体正确就好。
类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的编写,还有数据的分页,基本语法,程序结构大体正确就好。
相关文章推荐
- 你知道为什么考你这个?——Java面试题及答案汇总分析(6)
- 你知道为什么考你这个?——Java面试题及答案汇总分析(2)
- 你知道为什么考你这个?——Java面试题及答案汇总分析(1)
- 你知道为什么考你这个?——Java面试题及答案汇总分析(4)
- 你知道为什么考你这个?——Java面试题及答案汇总分析(3)
- 阿里巴巴常考面试题及汇总答案 java面试
- Java开发人员面试题分析汇总
- 【收藏】15道Java 经典面试题及答案分析
- 15道Java 经典面试题及答案分析
- [置顶] Java开发人员面试题分析汇总(持续更新中)
- 阿里巴巴常考面试题及汇总答案(Java)
- 阿里巴巴JAVA常考面试题及汇总答案
- 【猫厂面试题】——-阿里常问面试题目汇总及答案(JAVA)
- 武汉北大青鸟分析为什么要采用java这个平台
- 学生党如何拿到阿里技术offer: 《阿里巴巴常考面试题及汇总答案(Java方向)》
- JAVA程序员笔试面试题汇总及答案 .
- 要准备了:JAVA面试题及答案汇总
- 百度Java研发面试题分析汇总
- Java基础、Java集合、多线程、JDBC、HTTP、JSP、Servlet、Struts面试题汇总(附答案)
- 《剑指offer》面试题答案汇总(Java版)