JSP 데이터베이스 작업 루틴(Bean 사용)
저자:Eve Cole
업데이트 시간:2009-07-02 17:13:24
- 페이지 단위로 데이터 표시 - JDBC 2.0: ODBC
Jsp는 jdbc:odbc를 통해 데이터베이스를 운영할 수 있습니다. 이 예에서는 재사용이 가능한 JavaBean에 데이터베이스 연결을 작성했습니다.
pagetest.jsp 파일:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<%@page contentType="text/html;charset=gb2312" %>
<jsp:useBean id="Htool" 범위="세션" 클래스="zbean.HtmlTool"/>
<jsp:useBean id="Jodb" 범위="세션" 클래스="zbean.Jodb"/>
<html>
<머리>
<title>데이터베이스 페이징 테스트</title>
</head>
<%
//ResultSet 클래스 정의
java.sql.ResultSet 먼저;
//Odbc 데이터 소스 설정
Jodb.setConnStr("jdbc:odbc:jtest","","");
//Jdbc 드라이버 설정
Jodb.setDbDriver("sun.jdbc.odbc.JdbcOdbcDriver");
//Sql문을 실행하고 Jodb 클래스의 실행 메소드를 호출합니다.
rst=Jodb.execute("gbook에서 * 선택");
%>
<%
int startRowNum;
int 페이지 크기=10;
첫 번째.마지막();
int rowCount=rst.getRow();
int pageCount=(rowCount+pageSize-1)/pageSize;
int intPage;
String strPage=request.getParameter("페이지");
if(strPage==null)
{
int페이지=1;
}
또 다른
{
intPage=java.lang.Integer.parseInt(strPage);
if(intPage<1)intPage=1;
if(intPage>pageCount)intPage=pageCount;
}
startRowNum=(intPage-1)*pageSize+1;
%>
<본문>
<div 정렬="중앙">
<중앙>
<p>데이터베이스 페이징 테스트</p>
<p><%= Htool.getStr(Jodb.pageStr(intPage,pageCount,"pagetest.jsp?","en")) %></p>
<table border="1" width="600" bordercolorlight="#000000" cellpacing="0" cellpadding="2" bordercolordark="#FFFFFF">
<tr>
<td width="49"><font size="2">숫자</font></td>
<td width="91"><font size="2">이름</font></td>
<td width="174"><font size="2">이메일</font></td>
<td width="250"><font size="2">메시지 남기기</font></td>
</tr>
<%
for(int i=0;i<pageSize;i++){
rst.absolute(startRowNum+i);
if(rst.isAfterLast())
{
부서지다;
}
%>
<tr>
<td width="49"><%= rst.getLong("id") %> </td>
<td width="91"><%= rst.getString("name") %> </td>
<td width="174"><%= rst.getString("email") %> </td>
<td width="250"><%= rst.getString("pnote") %> <%= rst.getRow() %></td>
</tr>
<%
}
%>
</table>
</center>
</div>
</body>
</html>
Jodb.java 파일은 다음과 같습니다.
패키지 zbean;
import java.sql.*;
//zbean을 가져옵니다.*;
공개 클래스 Jodb
{
공개 문자열 sdbdriver="sun.jdbc.odbc.JdbcOdbcDriver";
공개 문자열 sConnStr;
공개 긴 카운트;
문자열 UID;
문자열 비밀번호;
연결 연결=null;
결과 집합 rs=null;
공개Jodb()
{
노력하다
{
Class.forName(sdbdriver);
}
catch(java.lang.ClassNotFoundException e)
{
System.err.println("Jodb():"+e.getMessage());
}
}
공개 무효 setDbDriver(문자열 y)
{
sdb드라이버=y;
}
공공 무효 setConnStr(문자열 x,문자열 z,문자열 a)
{
sConnStr=x;
uid=z;
비밀번호=a;
}
공개 ResultSet 실행(문자열 SQL)
{
RS=널;
노력하다
{
conn=DriverManager.getConnection(sConnStr,uid,pwd);
명령문 stmt=conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_SENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery(sql);
}
catch(SQLException ex)
{
System.err.println("Jodb.execute():"+ex.getMessage());
}
RS를 반환;
}
공개 장기 업데이트(문자열 SQL)
{
긴 x=0;
노력하다
{
conn=DriverManager.getConnection(sConnStr);
명령문 stmt=conn.createStatement();
x=stmt.executeUpdate(sql);
}
catch(SQLException ey)
{
System.err.println("Jodb.update():"+ey.getMessage());
}
x를 반환;
}
공개 문자열 pageStr(int page,int pageCount,String url,String showStr)
{
//String str="페이지:("+page+"/"+pageCount+") ";
문자열 str="";
문자열 fstr;
문자열 pstr;
문자열 nstr;
문자열 lstr;
//int 페이지=currPage;
//int pageCount=pageCt;
if(showStr=="cn")
{
fstr="첫 번째 페이지";
pstr="이전 페이지";
nstr="다음 페이지";
lstr="마지막 페이지";
}
그렇지 않은 경우(showStr=="en")
{
fstr="첫 번째";
pstr="이전";
nstr="다음";
lstr="마지막";
}
또 다른
{
String[] temp_array=split(showStr,",");
if(temp_array==null)
{
str="다음과 같은 문자열을 입력하세요: "첫번째,이전,다음,마지막""";
str을 반환;
}
fstr=temp_array[0];
pstr=temp_array[1];
nstr=temp_array[2];
lstr=temp_array[3];
}
/*
int npage;
npgae=페이지+1;
int 페이지;
페이지=페이지-1;
if(n페이지>페이지카운트)
{npae=pageCount;}
if(ppgae<1)
{페이지=1;}
*/
if(페이지==1){
str=str+"<a href="+url+"page="+(page+1)+">"+nstr+"</a> ";
str=str+"<a href="+url+"page="+pageCount+">"+lstr+"</a> ";
}
if(페이지==페이지카운트){
str=str+"<a href="+url+"page=1>"+fstr+"</a> ";
str=str+"<a href="+url+"page="+(page-1)+">"+pstr+"</a> ";
}
if(페이지>1&&페이지<pageCount){
str=str+"<a href="+url+"page=1>"+fstr+"</a> ";
str=str+"<a href="+url+"page="+(page-1)+">"+pstr+"</a> ";
str=str+"<a href="+url+"page="+(page+1)+">"+nstr+"</a> ";
str=str+"<a href="+url+"page="+pageCount+">"+lstr+"</a> ";
}
str을 반환;
}
공개 문자열[] 분할(문자열 str,문자열 strIn)
{
char[] 임시_배열;
temp_array=str.toCharArray();
int strLength=str.length();
int strInLength=strIn.length();
int strInTimes=0;
int strIndex[]=new int[strLength];
int i=0;
정수 ii=0;
while(i<=strLength-strInLength)
{
문자열 임시_str="";
for(int j=i;j<i+strInLength;j++)
{
temp_str=temp_str+temp_array[j];
}
if(temp_str.equals(strIn))
{
strInTimes++;
strIndex[ii]=i;
i=i+strIn길이;
ii++;
}
또 다른
{
나++;
}
}
if(strInTimes<1)
{
문자열[] back_str=null;
back_str을 반환;
}
또 다른
{
String back_str[]=new String[strInTimes+1];
back_str[0]=str.substring(0,strIndex[0]);
for(int k=1;k<strInTimes;k++)
{
back_str[k]=str.substring(strIndex[k-1]+strInLength,strIndex[k]);
}
back_str[strInTimes]=str.substring(strIndex[strInTimes-1]+strInLength,str.length());
back_str을 반환;
}
}
}