Abstract
이 기사에서는 개발 작업량을 줄이고 주요 프로그램 코드를 제공하기 위해 JSP 기술을 사용하여 WEB 애플리케이션을 개발할 때 간단하고 보편적인 형태의 데이터 저장 및 처리 방법을 Oracle 데이터베이스를 예로 들어 설명합니다.
소개
J2EE(Java 2 Enterprise Edition) 기술은 웹 애플리케이션 개발에 널리 사용되었습니다. JavaBean 및 Servlet 기술은 개발자에게 페이지를 표시하는 데 사용되며 Servlet 기술은 많은 수의 작업을 완료하는 데 사용됩니다. 비즈니스 프로세스, Bean을 사용하여 데이터 및 일부 비즈니스 처리를 저장합니다. WEB 애플리케이션에서 데이터베이스에 비즈니스 데이터를 저장하는 처리 작업은 종종 매우 힘든 작업입니다. 주요 형태 중 하나는 데이터베이스에 양식 데이터를 저장하는 것입니다. 개발자가 해당 데이터 저장 프로그램을 별도로 작성하려면 많은 시간과 노력이 필요합니다. 양식 데이터 저장소의 개발 작업량을 줄이기 위해 어떤 방법을 사용할지는 연구해볼 가치가 있는 질문입니다.
두 가지 일반적인 양식 데이터 저장 및 처리 방법:
1. JSP 페이지 또는 JavaBean 또는 Servlet의 각 양식에 해당하는 프로그램 코드를 작성하여
양식에서 제출된 데이터를 하나씩 추출하거나 다음을 작성합니다. 해당 JavaBean에 자동으로 데이터를 가져오기 위해 setProperty 메소드를 사용하고, SQL문(삽입, 업데이트, 삭제)을 생성하고 마지막으로 실행업데이트() 함수를 실행하여 데이터 테이블 저장을 완료합니다.
2. 각 데이터 테이블에 대한 JavaBean 프로그램 코드를 자동으로 생성합니다.
데이터베이스 시스템은 사용자가 테이블 구조를 읽고 주요 필드를 식별할 수 있도록 지원해야 합니다. PowerBuilder, Delphi 등의 객체지향 신속 개발 도구를 사용하여 Java 코드 자동 생성 프로그램을 개발합니다. 이 프로그램에서는 데이터베이스 테이블의 구조를 읽어 필드 이름, 데이터 유형, 데이터 길이 및 JavaBean 코드가 자동으로 생성됩니다. 이 코드에서는 테이블의 필드에 해당하는 동일한 이름의 변수를 정의하고, 모든 변수에 대해 setValue 및 getValue 메소드를 설정하고, 삽입, 업데이트 및 삭제를 위한 SQL 문 생성 및 실행을 처리하는 삽입, 업데이트 및 삭제 함수를 설정합니다. 각각 삭제하세요.
양식에서 제출한 데이터 처리 페이지에서 다음 코드를 작성하여 양식 데이터를 JavaBean에 저장합니다.
<jsp: useBean id="table" class="table1_bean" />
<jsp:setProperty name="table" property="*" />
(참고: table1_bean은 위에서 언급한 특정 테이블에 해당하는 자동 생성된 JavaBean입니다.)
그런 다음 table1_bean에서 삽입, 업데이트, 삭제 함수를 호출하여 데이터 테이블 저장을 완료하고 실행 결과를 반환합니다. 좋다:
<%boolean 성공 =table.insert() %>
첫 번째 방법은 간단하고 직관적이지만 각 양식에 해당하는 데이터 처리 프로그램을 작성해야 합니다. 약간 더 큰 응용 프로그램의 경우 양식 수가 많아 개발 작업량이 많아지고 개발 효율성이 낮아질 수 있습니다. 필드를 추가하거나 빼는 등 테이블 구조가 변경되면 해당 데이터 처리 프로그램을 수정해야 합니다.
두 번째 방법은 첫 번째 방법보다 훨씬 간단합니다. 각 데이터 테이블의 데이터 처리는 해당 JavaBean에 의해 구현되며, 테이블 구조가 변경되면 새로 생성하기만 하면 됩니다. JavaBean을 사용하고 Java로 컴파일한 후 덮어쓰면 원래 Java 클래스를 사용할 수 있습니다. 그러나 이 방법을 사용하려면 JavaBean 자동 생성 프로그램의 개발이 필요하며, 테이블 구조가 변경되면 JavaBean을 다시 생성하고 컴파일해야 합니다.
WEB 애플리케이션 개발에서양식 데이터를 저장하는 간단하고 보편적인 방법을 소개합니다
. 많은 양식이 프런트 엔드 브라우저에서 간단한 데이터 확인 후 백엔드 서버에 제출됩니다. 서버는 데이터에 대한 처리를 수행하지 않고 데이터를 직접 저장합니다. 데이터베이스. 이 경우 이러한 양식을 균일하게 처리하고 해당 데이터 테이블에 데이터를 저장하는 프로그램을 작성할 수 있습니다. 이 방법을 사용하려면 데이터베이스 시스템이 테이블 구조 읽기 및 키 필드 식별을 지원해야 합니다. 우리는 JSP 기술을 사용하여 이 프로그램을 작성하며 프로그램 파일 이름은 DbdataStore.jsp입니다.
1. 호출 형식
웹 페이지의 Form의 Action 호출 방법은 다음과 같습니다.
<Form Name=Frm1 Method=Post Action="DBdataStore.jsp? tablename=table1&OperType=…">
table1은 데이터베이스 테이블의 테이블 이름입니다. 데이터가 저장될 위치와 OperType 작업에는 삽입, 업데이트, 삭제의 세 가지 유형이 있습니다.
양식의 <입력 유형=텍스트 이름=…>, <텍스트 영역 이름=…><선택 이름=…>의 이름 값은 데이터 테이블에서 제출한 해당 필드 이름과 동일해야 합니다. 양식은 DBdataStore.jsp에서 하나씩 추출됩니다. 양식에 정의된 입력이 없고 결과 값이 널값인 경우 해당 필드는 처리되지 않습니다.
2. Oracle을 예로 들어 뷰 정의
1) 테이블의 각 열에 대한 데이터 유형 뷰 생성
CREATE OR REPLACE VIEW v_dbstru AS SELECT table_name, column_name, data_type, data_length, data_precision, data_scale, column_id
FROM all_tab_columns WHERE owner='user1'; //user1이 데이터 테이블의 소유자입니다.
CREATE OR REPLACE VIEW v_pkey_column AS
테이블의 키 열 보기를 만듭니다.
SELECT b.테이블_이름, b.열_이름, b.위치
all_constraints a, all_cons_columns b에서
WHERE a.owner=b.owner AND a.constraint_name=b.constraint_name AND a.owner='user1' AND a.constraint_type='P'
3. 기본 프로그램 코드
1) 프로그램 초기화
String tablename=request.getParameter(" tablename"); //테이블명 추출
String OperType=request.getParameter("OperType"); //작업 유형 추출
String sFieldValue="";//양식에서 제출한 필드 데이터 값을 저장합니다.
String fieldname="", Datatype="" //저장소 필드 이름, 필드 데이터 유형
int iFieldvalue=0;
문자열 updateSql="", whereSql=" where ", insSql1="", insSql2="", opSql="", strSql="";
결과 집합 rs1=null, rs2=null;
insSql1=""+테이블 이름+"에 삽입(";
insSql2="values(";
2) SQL 문의 키 필드 부분을 생성
하고 다음과 같이 삽입 문의 키 필드 부분을 생성합니다. table1(id 및 값(100))에 삽입하려면
키 필드만 사용합니다
.다음과 같은 부분에서 업데이트 및 삭제 문을 생성합니다. 여기서
작업 유형이 업데이트인 경우 키 필드의 데이터는 웹 양식에서 수정되지 않습니다.
rs1=Stmt.executeQuery("SELECT column_name FROM v_pkey_column WHERE table_name='"+tablename+"'") //키 필드 이름 가져오기
동안(rs1.next()){
fieldname=rs1.getString("column_name");
rs2=Stmt.executeQuery("SELECT data_type FROM v_dbstru WHERE table_name='"+tablename+"' AND column_name='"+fieldname+"'") //키 필드 데이터 유형 가져오기 if(rs2.next()){
Datatype=rs2.getString("data_type");
sFieldValue=request.getParameter(fieldname.toLowerCase());
//insert 문의 키 필드 부분을 생성합니다. if(OperType.equals("insert")){
insSql1+=필드 이름+",";
if((sFieldValue==null) ){
//키 필드 데이터 값을 폼에 제출하지 않은 경우, 본 글에서는 숫자형으로만 처리하며, 일련번호에 따라 데이터 값을 계산합니다.
rs2= Stmt.executeQuery("SELECT max("+fieldname+")+1 FROM "+tablename); iFieldvalue=rs2.getInt(1); insSql2+=Integer.toString(iFieldvalue)+" ; }else if(Datatype.equals("DATE")){
insSql2+= "To_Date('" + sFieldValue + "','YYYY-MM-DD'),";
}else if(Datatype.equals("VARCHAR2") || Datatype.equals("CHAR")){
insSql2+="'" + sFieldValue+"',";}
else /*NUMBER, FLOAT */ insSql2+=sFieldValue+","}
//여기서 업데이트 및 삭제 문을 생성합니다. where fieldname=... AND
if(OperType.equals("업데이트") || OperType.equals("삭제")){
if(Datatype.equals("DATE")){
whereSql+=필드 이름+"=To_Date('" + sFieldValue + "','YYYY-MM-DD') AND ";
}else if(Datatype.equals("VARCHAR2") || Datatype.equals("CHAR")){
whereSql+=필드 이름+"='" + sFieldValue+"' AND ";}
else /*NUMBER, FLOAT */ whereSql+=fieldname+"="+ sFieldValue+" AND ";}
}
}
whereSql=whereSql.substring(0, whereSql.length()-4);
3) 키가 아닌 필드 부분의 sql 문은
다음과 같은 업데이트 문을 생성합니다. update table1 set column1=value1,... where id= 100
insert 문, 예: insert into table1(id, column1,…)values(100, value1,…)
updateSql="update "+tablename+" set ";
strSql="SELECT column_name, data_type, data_length, data_precision, data_scale FROM v_dbstru a "+"where table_name='"+tablename+"' AND a.column_name not in (SELECT b.column_name FROM v_pkey_column b where b.table_name=a.table_name )";
rs1=Stmt.executeQuery(strSql); //키가 아닌 필드의 필드 이름과 데이터 유형을 가져옵니다.
동안(rs1.next()){
fieldname=rs1.getString("column_name"); Datatype=rs1.getString("data_type"); sFieldValue=request.getParameter(fieldname.toLowerCase()); //양식이 필드 값을 제출하지 않으면 무시합니다. 필드 처리 if((sFieldValue!=null)){
//insert 문 =insSql1+insSql2 생성, 즉 tablename(… 및 값(…)에 삽입)
if(OperType.equals("삽입")){ insSql1+=필드 이름+",";
if(Datatype.equals("DATE")){
insSql2+= "To_Date('" + sFieldValue + "','YYYY-MM-DD'),";
} else if(Datatype.equals("VARCHAR2") || Datatype.equals("CHAR")){
insSql2+="'" + sFieldValue+"',";}else /*NUMBER,FLOAT*/ insSql2+= sFieldValue+",";}
//업데이트 문 생성=updateSql+whereSql, 즉 테이블 이름 집합 업데이트... where fieldname=... if(OperType.equals("update")){
if(Datatype.equals("DATE")){
updateSql+=필드 이름+"=To_Date('" + sFieldValue + "','YYYY-MM-DD'),";
}else if(Datatype.equals("VARCHAR2") || Datatype.equals("CHAR")){
updateSql+=fieldname+"='" + sFieldValue,1}+"',";}else /*NUMBER,FLOAT*/ updateSql+=fieldname+"="+sFieldValue+",";}))
rs1.close();
4) 완전한 SQL 문을 생성하고
if(OperType.equals("insert"))를
실행합니다.
opSql=insSql1.substring(0, insSql1.length()-1)+")"+insSql2.substring(0, insSql2.length()-1)+")";
if(OperType.equals("업데이트"))
opSql=updateSql.substring(0, updateSql.length()-1)+" "+whereSql; if(OperType.equals("delete"))
opSql=""+테이블 이름+"에서 삭제 "+whereSql;
//완전한 SQL 문 opSql이 생성되었습니다.
시도{sqlnrows=Stmt.executeUpdate(opSql);}
catch(SQLException e){out.println("SQLException:"+opSql);}
4. 특징
이 방법은 이 프로그램을 직접 저장된 모든 양식에 대해 균일하게 사용합니다. 이는 보편적이며 모든 양식 또는 모든 양식에 사용할 필요가 없습니다. 해당 프로그램은 데이터 테이블에 대해 독립적으로 개발됩니다. 개발 작업량이 매우 적고 호출이 매우 간단합니다. 동시에 테이블 구조가 변경되면 DBdataStore.jsp 프로그램을 수정할 필요가 없습니다. 이 프로그램은 Servelet으로 다시 작성할 수도 있으며 호출 형식은 <Form Name=Frm1 Method=Post Action="DBdataStoreServelet?tablename=table1&OperType=…">입니다.
결론
웹 애플리케이션에서 양식 데이터를 제출한 후 서버 백그라운드에서 추가 데이터 확인이나 처리가 필요한 경우 두 번째 방법을 사용해야 합니다. 하지만 많은 경우 사용자는 양식에 데이터를 입력하거나 수정하고 JavaScript를 사용하여 프런트엔드 브라우저에서 데이터를 확인하거나 처리한 후 백엔드 서버에서는 처리하지 않고 데이터를 제출합니다. 양식을 통해 데이터베이스에 직접 저장됩니다. 이때, 세 번째 방법을 사용하는 것은 매우 간단하며 개발자의 작업량을 크게 줄일 수 있습니다.