1表单编写相应程序代码
JSP页面JavaBeanServlet中request getparameter()函数逐提取表单提交数编写相应JavaBeansetProperty方法数动取 JavaBean中然生成SQL语句(insertupdatedelete)执行executeupdate()函数完成数表存储
2数表动生成JavaBean程序代码
数库系统必须支持户够读取表结构识关键字段利面象快速开发工具PowerBuilderDelphi等行开发 java代码动生成程序该程序中读取数库表结构:字段名数类型数长度动生成JavaBean代码该代码中定义表中字段 应名变量建立变量setValuegetValue方法建立insertupdatedelete函数分处理insert updatedeleteSQL语句生成执行
表单提交数处理页面中编写代码表单数存储JavaBean中:
<jsp:useBean idtable classtable1_bean >
<jsp:setProperty nametable property* >
(注:table1_bean述动生成应某表JavaBean)
然调table1_bean中insertupdatedelete函数完成数表存储返回执行结果:
<boolean success tableinsert() >
第种方法简单直观表单需编写相应数处理程序稍微点应表单数量开发工作量开发工作效率低表结构变动增加减少字段时需修改相应数处理程序
第二种方法相第种简便数表数处理应JavaBean实现JavaBean动生成需编写表结构变动时需重新生 成新JavaBeanjava编译覆盖原java类该方法需开发JavaBean动生成程序表结构变动时JavaBean需重新 生成编译
介绍种简便通方法实现表单数存储
WEB应开发中表单前台浏览器端简单数校验提交台服务器服务器数作处理直接数存储数表中 种情况编写程序表单统处理数存储相应数表中该方法样求数库系统支持表结构读取关键字段识 采JSP技术编写该程序程序文件取名DbdataStorejsp
1调格式
网页中表单Action调方法:
<Form NameFrm1 MethodPost ActionDBdataStorejsp tablenametable1&OperType…>
table1数存储数库表表名OperType操作类型分三种:insertupdatedelete
表单中<input typetext name…><textarea name…><select name…>等中name值应数表字段名相DBdataStorejsp中逐提取表单提交应字段名数值表单中未定义输入 值空值该字段作处理
2oracle例视图定义
1) 建立表列数类型视图
CREATE OR REPLACE VIEW v_dbstru AS SELECT table_namecolumn_namedata_typedata_lengthdata_precisiondata_scalecolumn_id
FROM all_tab_columns WHERE owner'user1'user1数表属
2) 建立表关键列视图
CREATE OR REPLACE VIEW v_pkey_column AS
SELECT btable_namebcolumn_namebposition
FROM all_constraints aall_cons_columns b
WHERE aownerbowner AND aconstraint_namebconstraint_name AND aowner'user1' AND aconstraint_type'P'
3程序代码
1) 程序初始化
String tablenamerequestgetParameter(tablename)提取表名
String OperTyperequestgetParameter(OperType)提取操作类型
String sFieldValue存放表单提交字段数值
String fieldnameDatatype 存放字段名字段数类型
int iFieldvalue0
String updateSqlwhereSql where insSql1insSql2opSqlstrSql
ResultSet rs1nullrs2null
insSql1insert into +tablename+ (
insSql2values(
2)生成sql语句关键字段部分
生成insert语句关键字段部分:insert into table1(id values(100))
关键字段生成updatedelete语句where部分:where id100
操作类型update时网页form表单中关键字段数进行修改
rs1StmtexecuteQuery(SELECT column_name FROM v_pkey_column WHERE table_name'+tablename+')
取关键字段字段名
while(rs1next()){
fieldnamers1getString(column_name)
rs2StmtexecuteQuery(SELECT data_type FROM v_dbstru WHERE table_name'+tablename+'
AND column_name'+fieldname+')取关键字段数类型
if(rs2next()){
Datatypers2getString(data_type)
sFieldValuerequestgetParameter(fieldnametoLowerCase())
生成insert语句关键字段部分
if(OperTypeequals(insert)){
insSql1+fieldname+
if((sFieldValuenull) ){
表单未提交关键字段数值时文数字型处理数值流水号计算
rs2 Stmt executeQuery(SELECT max(+fieldname+)+1 FROM +tablename)
rs2 next()iFieldvaluers2getInt(1)insSql2+IntegertoString(iFieldvalue)+
}else if(Datatypeequals(DATE)){
insSql2+ To_Date(' + sFieldValue + ''YYYYMMDD')
}else if(Datatypeequals(VARCHAR2) || Datatypeequals(CHAR)){
insSql2+' + sFieldValue+'}
else *NUMBERFLOAT * insSql2+sFieldValue+}
生成updatedelete语句where部分:where fieldname AND
if(OperTypeequals(update) || OperTypeequals(delete)){
if(Datatypeequals(DATE)){
whereSql+fieldname+To_Date(' + sFieldValue + ''YYYYMMDD') AND
}else if(Datatypeequals(VARCHAR2) || Datatypeequals(CHAR)){
whereSql+fieldname+' + sFieldValue+' AND }
else *NUMBERFLOAT * whereSql+fieldname++ sFieldValue+ AND }
}
}
whereSqlwhereSqlsubstring(0whereSqllength()4)
3)非关键字段部分sql语句生成
update语句:update table1 set column1value1… where id100
insert语句:insert into table1(idcolumn1…)values(100value1…)
updateSqlupdate +tablename+ set
strSqlSELECT column_namedata_typedata_lengthdata_precisiondata_scale FROM
v_dbstru a +where table_name'+tablename+'
AND acolumn_name not in (SELECT
bcolumn_name FROM v_pkey_column b where btable_nameatable_name)
rs1StmtexecuteQuery(strSql)取非关键字段字段名数类型
while(rs1next()){
fieldnamers1getString(column_name)Datatypers1getString(data_type)
sFieldValuerequestgetParameter(fieldnametoLowerCase())
表单未提交该字段值忽略该字段处理
if((sFieldValuenull)){
生成insert语句insSql1+insSql2 insert into tablename(… values(…
if(OperTypeequals(insert)){ insSql1+fieldname+
if(Datatypeequals(DATE)){
insSql2+ To_Date(' + sFieldValue + ''YYYYMMDD')
} else if(Datatypeequals(VARCHAR2) || Datatypeequals(CHAR)){
insSql2+' + sFieldValue+'}else *NUMBERFLOAT* insSql2+ sFieldValue+}
生成update语句updateSql+whereSql update tablename set where
fieldname if(OperTypeequals(update)){
if(Datatypeequals(DATE)){
updateSql+fieldname+To_Date(' + sFieldValue + ''YYYYMMDD')
}else if(Datatypeequals(VARCHAR2) || Datatypeequals(CHAR)){
updateSql+fieldname+' + sFieldValue1}+'}else *NUMBERFLOAT*
updateSql+fieldname++sFieldValue+} ))
rs1close()
4)生成完整sql语句执行
if(OperTypeequals(insert))
opSqlinsSql1substring(0insSql1length()1)+)+insSql2substring(0insSql2length()1)+)
if(OperTypeequals(update))
opSqlupdateSqlsubstring(0updateSqllength()1)+ +whereSqlif(OperTypeequals(delete))
opSqldelete FROM +tablename+ +whereSql
已生成完整sql语句opSql
try{sqlnrowsStmtexecuteUpdate(opSql)}
catch(SQLException e){outprintln(SQLException:
+opSql)}
4特点
该方法种直接存储表单统程序具通性必表单数表独立开发相应程序开发工作量非常少调非常简便 时表结构变动时修改DBdataStorejsp程序程序改写Servelet调格式<Form NameFrm1 MethodPost ActionDBdataStoreServelettablenametable1&OperType…>
Cookie文件创建然需读出否白费力气?接读出户硬盘Cookie
……(中间略)
Name | value | ||
< } > |