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 Success =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 데이터 테이블의 소유자가 됩니다. 2) 테이블의 키 열 뷰를 생성합니다 CREATE OR REPLACE VIEW v_pkey_column AS SELECT b.table_name, b.column_name, b.position FROM 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
String updateSql="", whereSql=" where ", insSql1=" ", insSql2 ="", opSql="", strSql ="";
ResultSet rs1=null, rs2=null;
insSql1=""+tablename+"에 삽입 (";
insSql2="values(";
2) SQL 문 생성 키 필드
다음과 같이 삽입 문의 키 필드 부분을 부분적으로 생성합니다. table1(id 및 값(100))에 삽입합니다.
키 필드만 사용하여 다음과 같은 부분에서 업데이트 및 삭제 문을 생성합니다. 여기서 id=100 ;
작업 유형이 업데이트인 경우 웹 양식에서 주요 필드의 데이터가 수정되지 않습니다.
rs1=Stmt.executeQuery("SELECT column_name FROM v_pkey_column WHERE table_name='"+tablename+"'"); //키 필드 이름을 가져옵니다. while(rs1.next()){ fieldname=rs1.getString("column_name"); rs2=Stmt.executeQuery("v_dbstru WHERE table_name='"+tablename+"'에서 data_type 선택 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("+필드 이름+")+1 FROM "+테이블 이름); rs2.next();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,… 여기서 id=100
insert 문, 예: insert into table1 (id, 열1,…) 값 (100, 값1,…)
updateSql="업데이트 "+테이블 이름+" 세트 "; strSql="SELECT 컬럼 이름, 데이터_유형, 데이터_길이, 데이터_정밀도, 데이터_규모 FROM v_dbstru a "+"where table_name='"+tablename+"' AND a.column_name이 (SELECT b.column_name FROM v_pkey_column b 여기서 b.table_name=a.table_name)"; rs1=Stmt.executeQuery(strSql); //키가 아닌 필드 이름과 데이터 유형을 가져옵니다. while(rs1.next()){ fieldname=rs1.getString("column_name"); 데이터 유형=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 필드 이름=... 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("삽입")) 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를 사용하여 프런트엔드 브라우저에서 데이터를 확인하거나 처리한 후 백엔드 서버에서는 처리하지 않고 데이터를 제출합니다. 양식을 통해 데이터베이스에 직접 저장됩니다. 이때, 세 번째 방법을 사용하는 것은 매우 간단하며 개발자의 작업량을 크게 줄일 수 있습니다.