说明:
在做网络程序的时候,我们总是需要将数据从数据库里面读出来,并将其显示,如果每次都去写,那就有点麻烦,程序员最讨厌的事就是做无用的重复功,至少我是其中的一员,在一个项目中做了一个这个东东,感觉用起来还是很方便的,
这是一个通用的将查询结果显示成表格的类,你想显示多少,你只需要在你的SQL语句里面的控制就可以,可以做到随心所欲了。
主要原理就是根据你的SQL语句,根据rs.getMetaData();及rsmd.getColumnName(j);取得列名,然后再把内容循环读出来就可以了,在读取内容的过程中,加入表格元素控制,然后就可以将取得到的内容转换成表格形式。你可以将我注释了的将英文字段换成中文的函数补充完整,这样你的图上显示就是中段了,我这里就不把那个函数写出来,因为很简单,这里也有这么多的东西了。不过,我附到最后面,以及翻页要用的一个JS函数,都附在最后面。
这是一张运行效果图:
下面是源代码,有点长,如果你觉得下面的太长了,太难看,你可以到这里下载这个JAVA源文件,这里有一个示例,如下:
示例:
/**
* 这是一个可以把执行结果返回成表格的形式的类,在JSP页面只需要一个打印语句就可以把结果查询结果
* 打印出来。通用性比较强,不过,性能上面我没有去考虑@——@
* 这里一个简单的示例,不过,要放在JSP页面里面使用:
* GetSearchResultByTableFormat get=new GetSearchResultByTableFormat();
* get.setTableTitle("省 核 所 有 的 信 息");
* get.setEditUrl("purchaseInformation_edit.do");
* get.setVerify(true);//把需要通过验证标志设为true
* get.setVerifyURL("PassVerify_PurchaseInformation.do");
* String sql="Select * From table";
* //取得当前的页号
* int currentPage;
* try{
* currentPage=Integer.parseInt(request.getParameter("page"));
}catch(NumberFormatException e)
{
currentPage=1;
try{
currentPage=(Integer)(request.getAttribute("page"));
//out.println("当前页:"+currentPage);
}catch(Exception e1)
{
currentPage=1;
}
}
* //取得当前的页号OK
* get.setDelUrl("purchaseInformation_del.do?page="+currentPage+"&");
* int pageSize=20;
* String pageUrl="purchaseInformation_verify.jsp";
* get.setCurrentPageUrl(pageUrl);
* get.setViewUrl("purchaseInformation_View.do");
* //把取得的查询结果打印出来就OK了
* out.println(get.getResult_withTableFormat(sql,currentPage,pageSize,true));
* 上面的操作看起来有点烦,要设置的东西,也比较多,不过,这是从通用性上考虑的,并且多考虑了
* 一些功能,如把编辑、删除、审核等的链接都加上了,如果你只是一个简单的显示的,你可以稍稍更
* 改一些,就成为你需要的了。更改也很简单,把这个方法getExecuteResult_withTableFormat
* 改这一下就可以了。
* 欢迎常回家看看:http://blog.csdn.net/fenglibing
*/
源代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
public class GetSearchResultByTableFormat {
public GetSearchResultByTableFormat() {
conn_init();
}
Connection conn;
Statement st;
int currentPage; //当前页号
int pageSize; //每页显示记录条数
int totalPage; //总共页数
int previousPage; //前一页页号
int nextPage; //下一页页号
int columnCount; //总共列数
int totalRecord; //总记录数
String tableTitle; //大标题,这个的下面才是显示的内容
String editUrl; //编辑页面的URL
String delUrl; //删除页面的URL
String viewUrl; //查看指定记录URL
String currentPageUrl;
boolean verify = false; //是否当前记录验证
String verifyURL; //记录的验证地址
/******************************初使化数据库链接******************************/
private void conn_init() {
setConnection();
setStatement();
}
private void setConnection() {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String strurl;
strurl =
"jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=D://Palfinger//palfinger.mdb";
conn = DriverManager.getConnection(strurl);
} catch (Exception e) {
e.printStackTrace();
}
}
private void setStatement() {
try {
st =
conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
} catch (SQLException e) {
e.printStackTrace();
}
}
/*****************************初使化数据库链接OK*****************************/
/**
*
* @param sql 执行的SQL语句
* @param CurrentPage 当前页
* @param PageSize 每页显示的记录数
* @return 执行的结果到StringBuffer中
*/
public StringBuffer getResult_withTableFormat(String sql, int CurrentPage,
int PageSize,
boolean withEdit) {
int rowNum = 0; //总行数
int TotalPage = 0; //总页数
int beginRow = 0; //起始记录
int endRow = 0; //结束记录
StringBuffer resultRows = new StringBuffer(""); //结果集
this.pageSize = PageSize; //每页大小
try {
rowNum = getTotalResultSetNum(sql); //取得总记录数
this.totalRecord = rowNum; //总记录数
//确定当前页
if (rowNum % PageSize == 0) {
TotalPage = rowNum / PageSize;
} else
TotalPage = rowNum / PageSize + 1;
if (CurrentPage >= TotalPage) {
CurrentPage = TotalPage;
nextPage = CurrentPage;
nextPage = CurrentPage + 1; //得到下一页页号
} else {
nextPage = CurrentPage + 1; //得到下一页页号
}
if (CurrentPage <= 1) {
CurrentPage = 1;
previousPage = CurrentPage; //得到前一页页号
} else {
previousPage = CurrentPage - 1; //得到前一页页号
}
this.currentPage = CurrentPage; //设置当前页
this.totalPage = TotalPage; //设置总页数
beginRow = (CurrentPage - 1) * PageSize + 1; //开始记录
endRow = beginRow + PageSize; //结束记录
resultRows =
getExecuteResult_withTableFormat(sql, beginRow, endRow,
withEdit);
} catch (Exception e) {
e.printStackTrace();
}
return resultRows;
}
/**
*
* @param sql 要执行的SQL语句
* @param startPos 记录的开始点,即从得到结果的第几条记录开始返回
* @param endPos 返回记录的结束点,即最后一条记录
* @param withEdit 是否加上编辑链接
* @return 根据SQL语句生成的放在BufferString,并返回
*/
private StringBuffer getExecuteResult_withTableFormat(String sql,
int startPos,
int endPos,
boolean withEdit) {
ResultSet rs;
ResultSetMetaData rsmd; //取得元数据
int ColumnCount; //返回结果有多少列
StringBuffer resultStr = new StringBuffer("");
resultStr.append("<table border=1>");
try {
rs = st.executeQuery(sql);
rsmd = rs.getMetaData();
ColumnCount = rsmd.getColumnCount();
this.columnCount = ColumnCount;
resultStr.append("<tr>");
resultStr.append("<td colspan=" + (columnCount + 2) + " align=center>");
resultStr.append("<font size=6>" + getTableTitle() + "</font>");
resultStr.append("</td>");
resultStr.append("</tr>");
//System.out.println("ColumnCount:" + ColumnCount);
//System.exit(0);
//取得列名,列名的顺序下标是从1开始的
resultStr.append("<tr>");
for (int j = 1; j <= ColumnCount; j++) {
resultStr.append("<td align=left> ");
//这个方法,可以将英文字段替换为中文
//resultStr.append(replaceEnglishHeadWithChinese(rsmd.getColumnName(j)));
resultStr.append(rsmd.getColumnName(j));
resultStr.append("</td>");
}
resultStr.append("<td>");
resultStr.append("</td>");
if (withEdit == true) {
resultStr.append("<td>");
resultStr.append("<b>操 作</b>");
resultStr.append("</td>");
}
resultStr.append("</tr>");
int currentRecordNum = (currentPage - 1) * 20 + 1;
;
if (rs.next()) {
rs.absolute(startPos); //记录绝对定位
for (int i = 0; i < (endPos - startPos); i++) {
resultStr.append("<tr>");
int componentID = 0; //这个范指所有的表中的ID字段
for (int j = 1; j <= ColumnCount; j++) {
if (j == 1) {
{
resultStr.append("<td align=left> ");
//resultStr.append(rs.getInt(j));
resultStr.append(currentRecordNum++); //不用数据库的ID,自已经生成ID
resultStr.append("</td>");
componentID = rs.getInt(j);
}
} else {
resultStr.append("<td align=left> ");
resultStr.append(rs.getString(j));
resultStr.append("</td>");
}
}
resultStr.append("<td>");
resultStr.append("<a href=" + getViewUrl() + "?id=" +
componentID +
" target=_blank><font color=green><nobr>查看</nobr></font></a>");
resultStr.append("</td>");
if (withEdit == true) {
resultStr.append("<td>");
resultStr.append("<nobr>");
resultStr.append("<a href=" + getEditUrl() + "?id=" +
componentID +
"><font color=blue>编辑</font></a>");
resultStr.append(" ");
resultStr.append("<a href=# onclick=delSure('" +
getDelUrl() + "id=" + componentID +
"')><font color=red>删除</font></a>");
if (isVerify() == true) {
resultStr.append(" ");
resultStr.append("<a href=# onclick=passSure('" +
getVerifyURL() + "?id=" +
componentID +
"')><font color=red>审核</font></a>");
}
resultStr.append("</nobr>");
resultStr.append("</td>");
}
resultStr.append("</tr>");
rs.next();
if (rs.isAfterLast()) {
break;
}
}
}
resultStr.append("<tr>");
resultStr.append("<td colspan=" + (ColumnCount + 2) +
" align=center>");
resultStr.append(setTurnPageString(getCurrentPageUrl()));
resultStr.append("</td>");
resultStr.append("</tr>");
resultStr.append("</table>");
} catch (SQLException e) {
e.printStackTrace();
}
return resultStr;
}
/**
*
* @param httpUrl URL地址,可以是带参数的
* @return 生成的首页、上页、下页、末页等字符串
*/
private String setTurnPageString(String httpUrl) {
String turnPageStrng = "";
String divideS = " ";
turnPageStrng = "总记录数:" + totalRecord;
turnPageStrng = turnPageStrng + divideS + "总页数:" + totalPage;
turnPageStrng = turnPageStrng + divideS + "每页记录数:" + pageSize;
if (httpUrl.indexOf("?") > 0) //如果请求地址是有条件的,就加&连接其它的条件
httpUrl += "&page=";
else
httpUrl += "?page=";
String hS = "<a href=" + httpUrl + "1>首页</a>" + divideS;
String pS = "<a href=" + httpUrl + previousPage + ">前页</a>" + divideS;
String cS = "当前第" + currentPage + "页" + divideS;
String tS = "转到第<input type=text size=2 id=goToPage";
tS += " onKeyDown=/"if(window.event.keyCode==13) goToPage('";
tS += httpUrl + "');/" value=" + nextPage + ">页";
tS += "<input type=button name=g value=Go ";
tS += "onclick=/"goToPage('" + httpUrl + "');/">" + divideS;
String nS = "<a href=" + httpUrl + nextPage + ">下页</a>" + divideS;
String lS = "<a href=" + httpUrl + totalPage + ">末页</a>";
turnPageStrng = turnPageStrng + divideS + hS + pS + cS + tS + nS + lS;
return turnPageStrng;
}
/**
* 取得总记录数
* @return
*/
private int getTotalResultSetNum(String sql) {
int num = 0;
ResultSet rs;
try {
rs = st.executeQuery(sql);
if (rs.next()) {
rs.last(); //移到最后一条
num = rs.getRow(); //取得总记录数
rs.first(); //再移到第一条记录
}
} catch (SQLException e) {
e.printStackTrace();
}
return num;
}
/**************************针对变量的set、get方法**************************/
public
//设置表头
void setTableTitle(String tableTitle) {
this.tableTitle = tableTitle;
}
//取得表头
private String getTableTitle() {
return tableTitle;
}
//设置查看对应记录的URL
public void setViewUrl(String viewUrl) {
this.viewUrl = viewUrl;
}
//取得查看对应记录的URL
private String getViewUrl() {
return viewUrl;
}
//设置编辑指定记录的URL
public void setEditUrl(String editUrl) {
this.editUrl = editUrl;
}
//取得编辑指定记录的URL
private String getEditUrl() {
return editUrl;
}
//设置删除指定记录的URL
public void setDelUrl(String delUrl) {
this.delUrl = delUrl;
}
//取得删除指定记录的URL
private String getDelUrl() {
return delUrl;
}
//设置是否通过验证
public void setVerify(boolean verify) {
this.verify = verify;
}
//获得是否通过验证
private boolean isVerify() {
return verify;
}
//设置通过验证指定记录的URL
public void setVerifyURL(String verifyURL) {
this.verifyURL = verifyURL;
}
//取得验证指定记录的URL
private String getVerifyURL() {
return verifyURL;
}
//设置当前页的URL
public void setCurrentPageUrl(String currentPageUrl) {
this.currentPageUrl = currentPageUrl;
}
//取得当前页的URL
private String getCurrentPageUrl() {
return currentPageUrl;
}
/**************************针对变量的set、get方法OK**************************/
}
/*
附:
1、将英文字段替换为中文字段的函数:
String replaceEnglishHeadWithChinese(String etitle) {
String ctitle = "";
if (etitle.trim().toLowerCase().equals("id"))
ctitle = "<b>序号</b>";
if (etitle.trim().equals("serialnumber"))
ctitle = "<b>物料编号</b>";
...
if(ctitle=="") {
ctitle="<b>"+etitle+"</b>";
}
return ctitle;
}
2、执行在框中输入翻页的JS函数:
//转到第几页
function goToPage(httpUrl)
{
var page=document.getElementById("goToPage").value;
var url=httpUrl+page;
window.location=url;
}
*/