仓酷云
标题:
发布一篇spring中挪用存储历程
[打印本页]
作者:
灵魂腐蚀
时间:
2015-1-18 11:13
标题:
发布一篇spring中挪用存储历程
在1995年5月23日以“Java”的名称正式发布了。
springframework.jdbc.object.StoredProcedure是对应存储历程挪用的操纵对象,它经由过程其父类org.springframework.jdbc.object.SqlCall取得响应的底层API撑持(CallableStatementCreator),然后在此基本之上构建了挪用存储历程的实行办法。
StoredProcedure是笼统类,以是必要完成响应子类以封装对特定存储历程的挪用,还记得我们在解说JdbcTemplate挪用存储历程时分界说的存储历程吗?
CREATEPROCEDURECountTable(INtableNamevarchar(1000),OUTsqlStrvarchar(1000),INOUTvINT)
BEGIN
set@flag=v;
set@sql=CONCAT(selectcount(*)into@resfrom,tableName,whereACTIVE_FLAG=?);
PREPAREstmtFROM@sql;
EXECUTEstmtusing@flag;
DEALLOCATEPREPAREstmt;
setv=@res;
setsqlStr=@sql;
END
经由过程承继StoredProcedure,我们能够为该存储历程的挪用供应一个对应的操纵对象:
publicclassCountTableStoredProcedureextendsStoredProcedure{
privatestaticfinalStringPROCEDURE_NAME="CountTable";
publicstaticfinalStringIN_PARAMETER_NAME="tableName";
publicstaticfinalStringOUT_PARAMETER_NAME="sqlStr";
publicstaticfinalStringINOUT_PARAMETER_NAME="v";
publicCountTableStoredProcedure(DataSourcedataSource)
{
super(dataSource,PROCEDURE_NAME);
//setFunction(true);
declareParameter(newSqlParameter(IN_PARAMETER_NAME,Types.VARCHAR));
declareParameter(newSqlOutParameter(OUT_PARAMETER_NAME,Types.VARCHAR));
declareParameter(newSqlInOutParameter(INOUT_PARAMETER_NAME,Types.INTEGER));
compile();
}
publicCountTableResultdoCountTable(StringtableName,Integerv)
{
MapparaMap=newHashMap();
paraMap.put(IN_PARAMETER_NAME,tableName);
paraMap.put(INOUT_PARAMETER_NAME,v);
MapresultMap=execute(paraMap);
CountTableResultresult=newCountTableResult();
result.setSql((String)resultMap.get(OUT_PARAMETER_NAME));
result.setCount((Integer)resultMap.get(INOUT_PARAMETER_NAME));
returnresult;
}
}
关于该存储历程操纵对象,部分细节我们有需要存眷一下:
存储历程操纵对象对应的SQL是存储历程的称号,而不是真正意义上的SQL语句,当我们挪用compile办法的时分,StoredProcedure的父类SqlCall会依据你供应的存储历程称号拼装真正意义上的切合SQL92尺度的存储历程挪用语句,相似于“{callCountTable(?,?,?)}”的情势。
由于我们的CountTableStoredProcedure只针对CountTable存储历程挪用,以是,该存储历程的称号我们在类一入手下手就声明为常量:
privatestaticfinalStringPROCEDURE_NAME="CountTable";假如有多个存储历程的参数按次不异,了局处置也一样的话,你也能够将存储历程的称号声明为变量,这完整要取决于详细的使用场景。
在机关办法中,我们将“setFunction(true);”正文失落了,由于我们挪用的CountTable不是一个Function,假如你要挪用的存储历程范例为Function的话,你必要经由过程该办法将“function”的值设置为true,以告诉StoredProcedure在处置挪用的时分要区分看待。
在complie之前经由过程declareParameter声明参数,这几近是雷打不动的常规,不外,在StoredProcedure中利用declareParameter的时分却要有所注重了:
<p>
Java编译的是字节码,跟C++相反,启动不够快,效率不够高,难以精确控制内存,但是优点是编程比C++容易,代码比较安全但是容易留下性能隐患,跨平台靠字节码在各个平台复制(一处编译到处调试)
作者:
兰色精灵
时间:
2015-1-25 05:43
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
作者:
变相怪杰
时间:
2015-2-1 12:28
Java 编程语言的风格十分接近C、C++语言。
作者:
再现理想
时间:
2015-2-7 04:53
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
作者:
蒙在股里
时间:
2015-2-7 18:58
是一种语言,用以产生「小应用程序(Applet(s))
作者:
第二个灵魂
时间:
2015-2-11 04:25
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
作者:
灵魂腐蚀
时间:
2015-2-17 07:42
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
作者:
柔情似水
时间:
2015-2-21 06:24
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
作者:
活着的死人
时间:
2015-2-25 01:27
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
作者:
乐观
时间:
2015-3-7 14:55
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
作者:
小女巫
时间:
2015-3-15 07:43
是一种使用者不需花费很多时间学习的语言
作者:
再见西城
时间:
2015-3-21 21:08
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2