仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1344|回复: 19
打印 上一主题 下一主题

[学习教程] JAVA教程之JSP进修――周全剖析JDBC(6)

[复制链接]
逍遥一派 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:32:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
你总不能说你写框架吧,那无疑会加大工作量,现在大多企业采取的是折中的办法,就是改别人写好的框架,可要改框架,前提是你对这个框架足够的了解,这就更难了。js 基于JDBC有哪些数据库通用会见办法?

  1.通用数据库Bean计划

  本实例中对数据库毗连和实行SQL语句等通用数据库操纵举行了封装,经由过程完成DBConnBean和DBQueryBean两个JavaBean来完成上述功效。个中DBConnBean卖力Java使用程序和数据库的毗连;DBQueryBean供应了一组实行尺度SQL的功效,能够完成尺度SQL完成的一切功效。其功效代码分离以下所示:

  ①DBConnBean.Java的源代码以下所示:

packagedbaccess;
importJava.sql.*;
importJava.util.*;
importJava.io.*;
publicclassDBConnBean
implementsSerializable{

privateStringDBDriver="sun.jdbc.odbc.JdbcOdbcDriver";
privateStringDBHost="127.0.0.1";
privateStringDBName="demo";
privateStringconp="jdbc:odbc:db_demo";
privateStringusername="";
privateStringpassword="";
privatebooleanxdebug=true;

publicConnectioncon=null;

publicStringsql=null;

Statementstmt=null;
publicResultSetresult=null;
privateintaffectedRows=0;

publicDBConnBean()
{
xdebug=true;
con=null;
sql=null;
}
publicConnectionConnect()
throwsException
{
Stringmsg=null;
try
{
Class.forName(DBDriver).newInstance();
}
catch(Exceptione)
{
msg="加载数据库驱动失利";
if(xdebug)msg+="(驱动"+DBDriver+")";
thrownewException(msg);
}
try
{
StringconStr=conp;
con=DriverManager.getConnection(conStr,username,password);
}
catch(SQLExceptione)
{
msg="!!数据库毗连失利";
if(xdebug)
{
msg+="(毛病信息="+e.getMessage()+"SQL形态值="+e.getSQLState()+"毛病代码="+e.getErrorCode()+")";
}
thrownewException(msg);
}
returncon;
}
protectedvoidfinalize()
throwsThrowable
{
super.finalize();
if(stmt!=null)stmt.close();
if(result!=null)result.close();
}
//比来一次对数据库查询受影响的行数
publicintgetAffectedRows()
{
returnaffectedRows;
}
publicConnectiongetCon()
{
returncon;
}
publicStringgetConp()
{
returnconp;
}
publicStringgetDBDriver()
{
returnDBDriver;
}
publicStringgetDBName()
{
returnDBName;
}
publicbooleangetDebug()
{
returnxdebug;
}
publicStringgetPassword()
{
returnpassword;
}
publicResultSetgetResult()
{
returnresult;
}
publicStringgetSql()
{
returnsql;
}
publicStringgetUsername()
{
returnusername;
}
publicvoidover()
throwsThrowable
{
finalize();
}
publicResultSetquery()
throwsException
{
result=null;
affectedRows=0;
if(con==null)
Connect();
if(stmt==null)
stmt=con.createStatement();
if(sql.substring(0,6).equalsIgnoreCase("select"))
{
result=stmt.executeQuery(sql);
}
else
{
affectedRows=stmt.executeUpdate(sql);
}
returnresult;
}
publicResultSetquery(Strings)
throwsException
{
sql=s;
returnquery();
}
publicvoidsetDBDriver(Strings)
{
DBDriver=s;
}
publicvoidsetDebug(booleanb)
{
xdebug=b;
}
publicvoidsetgetConp(Strings)
{
conp=s;
}
publicvoidsetgetDBName(Strings)
{
DBName=s;
}
publicvoidsetgetUsername(Strings)
{
username=s;
}
publicvoidsetPassword(Strings)
{
password=s;
}
publicvoidsetSql(Strings)
{
sql=s;
}
}


②DBQueryBean.Java的源代码以下所示:
packagedbaccess;
importJava.sql.*;
importJava.util.*;
importJava.io.*;
importJava.lang.reflect.*;

publicclassDBQueryBean
implementsSerializable
{
DBConnBeandbc;
Stringsql=null;
introwcount=0;
intcolcount=0;
//intlimitcount=0;
Vectorresult=null;
publicString_WATCH="";

publicDBQueryBean()
{
dbc=newDBConnBean();
try{
dbc.Connect();
}catch(Exceptione){
handleException(e);
}
}
protectedvoidfinalize()
throwsThrowable
{
super.finalize();
if(dbc!=null)dbc.over();
if(result!=null)result.removeAllElements();
}
publicStringget(introw,intcol)
{
if(result==null||row>=result.size())returnnull;
Stringr[]=(String[])result.elementAt(row);
if(col>=Java.lang.reflect.Array.getLength(r))returnnull;
returnr[col];
}
publicintgetAffRows(){returndbc.getAffectedRows();}
publicintgetColumncount(){
returncolcount;
}
publicString[]getRow(introw)
{
if(result==null||row>=result.size())returnnull;
return(String[])result.elementAt(row);
/*Stringret[]=newString[colcount];
Vectorr=(Vector)result.elementAt(row);
for(inti=0;i<colcount;i++)
ret[i]=(String)r.elementAt(i);
returnret;*/
}
publicintgetRowcount(){
returnrowcount;
}
publicvoidhandleException(Exceptione)
{
_WATCH=e.getMessage();
}
publicvoidinit()
{
rowcount=0;
colcount=0;
//limitcount=0;
result=null;
}
publicvoidover()
throwsThrowable
{
finalize();
}
publicintquery(Stringsql)
{
result=newVector();
intret=0;
try{
ResultSetrs=dbc.query(sql);
if(rs==null)
{
ret=dbc.getAffectedRows();
}
else
{
ResultSetMetaDatarm=rs.getMetaData();
colcount=rm.getColumnCount();
while(rs.next())
{
Stringrow[]=newString[colcount];
for(inti=0;i<colcount;i++)
row[i]=rs.getString(i+1);
result.addElement(row);
rowcount++;
}
rs.close();//toreleasetheresource.
ret=result.size();
}
}
catch(Exceptione)
{
handleException(e);
return-1;
}

returnret;
}
}


  2.数据库表布局

  本实例中次要呈现了三个数据库表,表名和字段分离以下所示:

  企图推销表:jhcg_table


字段称号中文称号范例长度
Goods_no物品编号vchar10
Goods_name物品称号Vchar50
Amount推销数目Int
Price推销单价float
Gold币种Vchar15
Units单元Vchar10
Date工夫Date
Remark备注vchar100

  库存统计表:kctj_table


字段称号中文称号范例长度
Goods_no物品编号Vchar10
Goods_name物品称号Vchar50
amount库存数目Int
Date工夫Date

remark备注Vchar100

  实践推销表:sjcg_table



字段称号中文称号范例长度
Goods_no物品编号Vchar10
Goods_name物品称号Vchar50
Amount推销数目Int
PricePrice推销单价Float
Gold币种Vchar15
Units推销单元Vchar10
Date工夫Date
Remark备注vchar100

  个中营业逻辑十分复杂,即依据企图推销表和库存统计表天生实践推销表。同时,对各表完成数据库的增、删、改、查等通用操纵。

  3.JSP计划

  ①拔出操纵

  完成对数据库表的纪录拔出功效,个中企图推销表的拔出主页面(insert_jhcg.htm)为:

  insert_jhcg.htm将用户输出传送给demo_insert_jhcg.jsp,完成拔出操纵。改jsp文件的功效代码为:
<html>
<body>
<jsp:useBeanid="DBConn"class="dbaccess.DBConnBean"scope="page"/>
<jsp:useBeanid="DBBean"class="dbaccess.DBQueryBean"scope="page"/>
<hr>
<!--testJavaBean-->
<%
if(DBConn==null||DBBean==null){
out.println("JavaBeannotfound!");
return;
}
%>

<!--trydb_democonnection-->
<%
try{
DBConn.Connect();
}catch(Exceptione){
out.println(e.getMessage());
}
%>

<!--executesqlstatement-->
<%
StringinsGoodno=request.getParameter("ed_jhcg_no");
StringinsGoodname=request.getParameter("ed_jhcg_name");
intinsAmount=(Integer.valueOf(request.getParameter("ed_jhcg_amount"))).intValue();
floatinsPrice=(Float.valueOf(request.getParameter("ed_jhcg_price"))).floatValue();
StringinsGold=request.getParameter("ed_jhcg_gold");
StringinsUnit=request.getParameter("ed_jhcg_unit");
StringinsRemark=request.getParameter("ed_jhcg_remark");
StringsqlStatement="insertintojhcg_table(good_no,good_name,amount,
price,gold,unit,remark)values("+""+insGoodno+""+","+""+insGoodname+""+",
"+insAmount+","+insPrice+","+""+insGold+""+","+""+insUnit+""+","+""+
insRemark+""+")";
try{
DBBean.query(sqlStatement);
}catch(Exceptione){
out.println(e.getMessage());
}
%>
<ahref="demo_main.htm">Recordsinserted...Clickheretoreturn</a></p>
</body>
</html>


  ②查询操纵

  该查询主页面次要供应对三个数据库表的前提查询功效,

  query.htm将用户选择查询的数据库表和查询前提发送给demo_query.jsp,由jsp文件完成数据库查询操纵和查询了局集的前往及显现,其功效代码以下:
<html>
<body>
<%
StringsqlStatement;
StringsqlField="";
StringwhichTable="";
StringwhereClause="";
StringqueryNo="";
StringqueryName="";
%>
<jsp:useBeanid="DBConn"class="dbaccess.DBConnBean"scope="page"/>
<jsp:useBeanid="DBBean"class="dbaccess.DBQueryBean"scope="page"/>
<hr>
<!--testJavaBean-->
<%
if(DBConn==null||DBBean==null){
out.println("JavaBeannotfound!");
return;
}
%>

<!--trydb_democonnection-->
<%
try{
DBConn.Connect();
}catch(Exceptione){
out.println(e.getMessage());
}
%>

<!--preparesqlstatement-->
<%
StringqueryRequest=request.getParameter("rb_request");
//out.println("queryRequest:"+queryRequest);
StringwhichCB="";
if(queryRequest.equals("1")){
whichCB="ck_jhcg";
whichTable="jhcg_table";
queryNo=request.getParameter("ed_jhcg_no");
queryName=request.getParameter("ed_jhcg_name");
if(!queryNo.equals(""))
whereClause="wheregood_no="+""+queryNo+"";
if(!queryName.equals("")){
if(!queryNo.equals(""))
whereClause+="andgood_name="+""+queryName+"";
elsewhereClause="wheregood_name="+""+queryName+"";
}
}
if(queryRequest.equals("2")){
whichCB="ck_kctj";
whichTable="kctj_table";
queryNo=request.getParameter("ed_kctj_no");
queryName=request.getParameter("ed_kctj_name");
if(!queryNo.equals(""))
whereClause="wheregood_no="+""+queryNo+"";
if(!queryName.equals("")){
if(!queryNo.equals(""))
whereClause+="andgood_name="+""+queryName+"";
elsewhereClause="wheregood_name="+""+queryName+"";
}

}
if(queryRequest.equals("3")){
whichCB="ck_sjcg";
whichTable="sjcg_table";
queryNo=request.getParameter("ed_sjcg_no");
queryName=request.getParameter("ed_sjcg_name");
if(!queryNo.equals(""))
whereClause="wheregood_no="+""+queryNo+"";
if(!queryName.equals("")){
if(!queryNo.equals(""))
whereClause+="andgood_name="+""+queryName+"";
elsewhereClause="wheregood_name="+""+queryName+"";
}

}
String[]printTitle=request.getParameterValues(whichCB);

%>
<!--createquerysqlstatement-->
<%
sqlStatement="select";
for(inti=0;i<printTitle.length;i++){
sqlField+=printTitle[i]+",";
}
sqlStatement+=sqlField.substring(0,sqlField.length()-1)+"from"+whichTable;
if(!whereClause.equals(""))
sqlStatement+=whereClause;
%>
<!--showqueryresponse-->
<%
try{
DBBean.query(sqlStatement);
}catch(Exceptione){
out.println("DatabaseError!");
}
introws=DBBean.getRowcount();
intcols=DBBean.getColumncount();
%>
<Tablealign="center"width="80%"border=1>
<tralign=center>
<%
for(inti=0;i<printTitle.length;i++){
out.println("<td><b>");
out.println(printTitle[i]);
out.println("</b></td>");
}
%>
</tr>
<%
for(inti=0;i<rows;i++){
out.println("<tr>");
for(intj=0;j<cols;j++)
out.println("<td>"+DBBean.get(i,j)+"</td>");
out.println("</tr>");
}
%>
</Table>
<br>
<hr>
<ahref="demo_main.htm">Clickheretoreturn</a></p>
</body>
</html>


  ③天生实践推销表

  天生数据库表是一个隐式操纵,程序依据企图推销表和库存统计表的响应字段天生实践推销表,不必要用户的任何输出,其功效代码以下(demo_create.jsp):


<%@pageimport="Java.util.*"%>
<html>
<body>
<jsp:useBeanid="DBConn"class="dbaccess.DBConnBean"scope="page"/>
<jsp:useBeanid="DBBean"class="dbaccess.DBQueryBean"scope="page"/>
<hr>
<!--testJavaBean-->
<%
if(DBConn==null||DBBean==null){
out.println("JavaBeannotfound!");
return;
}
%>

<!--trydb_democonnection-->
<%
try{
DBConn.Connect();
}catch(Exceptione){
out.println(e.getMessage());
}
%>

<!--preparesqlstatement-->
<%
intamount_jhcg,amount_kctj;
VectorupdateRs=newVector();
DBBean.query("delete*fromsjcg_table");//deletealloldrecordsinsjcg_table
DBBean.query("selectjhcg_table.good_no,jhcg_table.good_name,jhcg_table.amount,kctj_table.amount,jhcg_table.unitfromjhcg_tableleftjoinkctj_tableonkctj_table.good_no=jhcg_table.good_no");
introws=DBBean.getRowcount();
intcols=DBBean.getColumncount();
for(inti=0;i<rows;i++){
Stringrecord[]=newString[4];
record[0]=DBBean.get(i,0);
record[1]=DBBean.get(i,1);
amount_jhcg=(Integer.valueOf(DBBean.get(i,2))).intValue();
if(DBBean.get(i,3)==null)amount_kctj=0;
elseamount_kctj=(Integer.valueOf(DBBean.get(i,3))).intValue();
record[2]=Integer.toString(amount_jhcg-amount_kctj);
record[3]=DBBean.get(i,4);
updateRs.addElement(record);
}
for(inti=0;i<rows;i++){
StringinsRecord[]=(String[])updateRs.elementAt(i);
StringinsGoodno,insGoodname,insUnit,insAmount;
insGoodno=insRecord[0];
insGoodname=insRecord[1];
insAmount=insRecord[2];
insUnit=insRecord[3];
StringsqlStatement="insertintosjcg_table(good_no,good_name,amount,unit)values?quot;+""+insGoodno+""+","+""+insGoodname+""+","+insAmount+","+""+insUnit+""+")";
DBBean.query(sqlStatement);
DBBean.query("delete*fromsjcg_tablewhereamount<=0");
}
%>
<ahref="demo_main.htm">Databasecreated...Clickheretoreturn</a></p>
</body>
</html>


  上述的开辟工具综合使用先容了基于Java开辟电子商务使用体系的全历程,包含使用开辟平台搭建、营业流程剖析、JavaBean封装和JSP开辟等外容,个中JSP开辟中触及到了通用SQL(查询和拔出数据库表)和游标操纵(天生实践推销表),基础能够完成任何收集数据库使用的需求。本实例基础上能够将后面先容的基于Java的电子商务开辟手艺串接起来,引导读者举行电子商务使用开辟。



没有那个大公司会傻了吧唧用.net开发大型项目,开发了,那等于自己一半的生命线被微软握着呢。而.net不行,限制在window系统,又是捆绑,鄙视微软之!
小女巫 该用户已被删除
沙发
发表于 2015-1-21 09:52:27 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
飘飘悠悠 该用户已被删除
板凳
发表于 2015-1-25 15:55:03 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
变相怪杰 该用户已被删除
地板
发表于 2015-1-30 23:22:28 | 只看该作者
是一种使用者不需花费很多时间学习的语言
分手快乐 该用户已被删除
5#
发表于 2015-2-6 16:39:26 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
不帅 该用户已被删除
6#
发表于 2015-3-5 17:40:04 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
金色的骷髅 该用户已被删除
7#
发表于 2015-3-7 21:25:22 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
莫相离 该用户已被删除
8#
发表于 2015-3-8 10:46:02 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
深爱那片海 该用户已被删除
9#
发表于 2015-3-11 06:22:08 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
灵魂腐蚀 该用户已被删除
10#
发表于 2015-3-13 00:10:40 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
飘灵儿 该用户已被删除
11#
发表于 2015-3-16 08:19:55 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
愤怒的大鸟 该用户已被删除
12#
发表于 2015-3-22 21:18:23 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
再现理想 该用户已被删除
13#
发表于 2015-4-8 19:52:10 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
因胸联盟 该用户已被删除
14#
发表于 2015-4-21 15:53:17 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
第二个灵魂 该用户已被删除
15#
发表于 2015-4-22 04:25:38 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
精灵巫婆 该用户已被删除
16#
发表于 2015-5-11 15:39:41 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
只想知道 该用户已被删除
17#
发表于 2015-6-4 04:00:47 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
老尸 该用户已被删除
18#
发表于 2015-6-10 15:46:03 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
兰色精灵 该用户已被删除
19#
发表于 2015-6-12 19:43:39 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
20#
发表于 2015-6-20 17:02:28 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-30 01:18

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表