??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲福利视频一区二区,亚洲色大成网站www永久男同,亚洲Aⅴ无码一区二区二三区软件 亚洲AⅤ视频一区二区三区 http://www.tkk7.com/faithwind/category/7034.htmlLove Java ,because you are my first lady !^_^zh-cnTue, 27 Feb 2007 20:17:33 GMTTue, 27 Feb 2007 20:17:33 GMT60【摘】敏捯Y件开发图书概?/title><link>http://www.tkk7.com/faithwind/archive/2006/12/14/87721.html</link><dc:creator>黑咖?/dc:creator><author>黑咖?/author><pubDate>Thu, 14 Dec 2006 07:10:00 GMT</pubDate><guid>http://www.tkk7.com/faithwind/archive/2006/12/14/87721.html</guid><wfw:comment>http://www.tkk7.com/faithwind/comments/87721.html</wfw:comment><comments>http://www.tkk7.com/faithwind/archive/2006/12/14/87721.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/faithwind/comments/commentRss/87721.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/faithwind/services/trackbacks/87721.html</trackback:ping><description><![CDATA[ <br />本文发表于程序员杂志2006q第5?<br />?敏捷软g开发宣aQ我们正在通过亲n实践和帮助其他h实践Q揭C更好的软g开发方法,通过q项工作Q我们认为:(x) <br />人和交流胜过q程和工?<br />可工作的软g胜过面面俱到的文?<br />客户协作胜过合同谈判 <br />响应变化胜过遵@计划 <br />虽然右项也有价|但是我们认ؓ(f)左项更重要??<br />—?Kent Beck Q?Mike Beedle Q?Arie van Bennekum Q?Alistair Cockburn Q?Ward Cunningham Q?Martin Fowler Q?James Grenning Q?Jim Highsmith Q?Andrew Hunt Q?Ron Jeffries Q?Jon Kern Q?Brian Marick Q?Robert C. Martin Q?Steve Mellor Q?Ken Schwaber Q?Jeff Sutherland Q?Dave Thomas <br />  <br />敏捷软g开发这个词?2006 q的中国软g界听h仍然昑־有些陌生。自 2001 q敏捯盟被发v以来Q敏h法的实践l验和理论研I在不断的更新。而我国的大多数程序员q是只能在书本上d敏捷的好处,很难在项目中q行实践。这其中的原因,主要是缺乏拥有实际敏捷项目经验的人来带领实施敏捷。虽然敏捷开发是U实践行为,很难从书本上直接学习(fn)Q不q多数程序员了解敏捷Q却都是先从书本开始的。无论结果怎样Q从认识到实늚q程是免不了的?<br />  <br />敏捷软g开发之Ҏ(gu)论篇 <br />大家都知道敏捯Y件开发方法包括了多种Ҏ(gu)论,主要有:(x) SCRUM Q?Crystal, 特征驱动软g开发( FDD Q,自适应软g开发( ASD Q,以及(qing)最著名的极限编E?(XP) 。这些方法论分别在不同的著作上专门论q过Q?<br />SCRUM Q?Agile Software Development with Scrum ?by Ken Schwaber, Mike Beedle Q?Agile Project Management With Scrum ?by Ken Schwaber <br />FDD: ?Java Modeling in Color with UML ?by Peter Coad, ?A Practical Guide to Feature-Driven Development ?( 特征驱动开?) by Stephen R Palmer, John M. Felsing, <br />Crystal: ?Crystal Clear ?by Alistair Cockburn <br />ASD: ?Adaptive Software Development 》(自适应软g开发) by James A. Highsmith <br />  <br />其中以 XP pd的书c居多。h民邮?sh)出版社的一pd极限~程pd丛书Q在国内引进较早。在q没有统一敏捷词汇的情况下Q引发了一Ҏ(gu)捷先锋h士的热情Q是我国E序员的敏捷启蒙教材。这些书包括?Extreme Programming Explained 》(解析极限~程Q,?Extreme Programming Examined 》(极限~程研究Q,?Extreme Programming Installed ?( 极限~程实施 ) Q?Extreme Programming Explored 》(探烦极限~程Q,?Extreme Programming Applied 》(应用极限~程Q?Extreme Programming in Practice 》(极限~程实践Q,?Planning Extreme Programming 》(规划极限~程Q等Q这些书有的是作者的 XP 实践论文Q有些是?XP 目的介l,其中Q值得推荐的是下面两部著作?<br />  <br />?Extreme Programming Explained: Embrace Change ?by Kent Beck <br />W一版中译版Q《解析极限编E:(x)拥抱变化》, 唐东铭, 人民邮电(sh)出版C?<br />W二版中译版Q?雷剑文,?sh)子工业出版C?<br />作ؓ(f) XP 的开׃作,目前已经出版了第二版。在W一版中Q?Kent Beck ?XP 作了详细的描q。从当前软g开发的现状和问题谈P从需求的变化到如何拥抱变化,l出?XP 的四h(hun)D和十二项实践。对于想了解敏捷的来龙去脉的人,此书属于必读之类。在W二版, Kent Ҏ(gu)几年来的实践Qؓ(f) XP 增加了一h(hun)DQ尊重,q增加了原则的概念,同时增加和删改了一些实c?<br />该书W一版是E序员的宣言Q这?Kent 的背景很有关pR随?XP l历了五六年的发展和实践Q?Kent 自己也逐渐意识刎ͼq样的观点太狭隘了。因此就有了W二版,与其说这是技术书c,到更像是Ua(b)意义的Y工书c。期间也可以看出 XP 的体pL加完备。这其中ؓ(f)H出的是把h攑ֈ了更为重要的C?<br />  <br />?Extreme Programming in Practice ?by James Newkirk, Robert C. Martin <br />中译版:(x)《极限编E实c, 王钧Q?人民邮电(sh)出版C?<br />读过了一些列?XP 书籍Q程序员们都?x)觉?XP 非常好,但到底如何才能开始实?XP 呢?q不是太清楚。本pd中的q本书用一个完整的项目作例子Q从头到教lh如何敏捷开发,是一本不可多得的实践教材。如果想直接实施 XP 开发,q本书可以给你很大启C?<br />  <br />  <br />敏捷软g开发之实践?<br />一、极限编E最?jng)_?<br />׃极限~程是如此的行Q多数敏捷团队都?x)或多或的借鉴一?XP 中的敏捷实践Q?XP 的每一个敏捷实践也实值得大书特书Q而其中最著名的是试驱动开发和重构实践Q?<br />  <br />?Test-Driven Development ?by Kent Beck <br />中译版:(x)《测试驱动开发》, 崔凯Q中国电(sh)力出版社 <br />试驱动开发是 Kent Beck 另一部力作?“Clean Code That Works?是敏捷开发的目标之一Q那么如何达到这个目标? TDD l出了一U方式。测试实质上是需求。由需求生出的代码肯定是能够工作的功能代码,而要实现 Class 本n的可试性,׃得不写出高度解耦合?Clean 的代码。本书从一?Money 的例子入手,从最初的一炚w求开始,逐步增加需求,完成整个货币pȝ的代码。后面又l出?Unit Test 中的一些最?jng)_践和模式供参考?<br />然而,本书的教导意义比其实跉|义更H出。作Z?TDD 的教E或入门教材Q这本书无疑是最佳的Q其中提出的一些最?jng)_跉|是值得l常阅读来温?fn)。本书面向的是单元测试,而实际开发中面对的数据库试Q?Web 试{问题ƈ不属于单元测试的范畴。因此读者ƈ不能从中直接q入到实战?<br />另一本同名书?Test Driven Development: A Practical Guide 》由 Davis Astels 撰写Q他该书看作是 Kent 著作的补充,重点阐述利用 TDD 开发所必要的技术和工具上,因此对实际开发更具实用性?<br />  <br />?Refactoring: Improving the Design of Existing Code ?by Martin Fowler <br />中译版:(x)《重构:(x)改善既有代码的设计》,侯捷Q熊节,中国?sh)力出版C?<br />重构q本书的意义在于Q他提供了一U让你写出更加优代码的能力。在试的保证下Q重构能够发挥强大的威力。敏捷团队中Q不断的重构出简单且高效的代码才能够保持拥抱不断变化的需求。后来的一本书?Refactoring to Patterns 》(从重构到模式Q?by Joshua Kerievsky Q更是将重构的威力发挥到极限?<br />重构曾被UCؓ(f)软g开发图书的双璧Q另一本书是?Design Patterns ?( 设计模式 ) by GoF 。当Ӟ对现在的软g开发这二者已l不是最重要的?Thought Works 的首席科学家 Martin Fowler ȝ了朋友们的各U实践心得,写出了这本书。从几年后的目光来看Q这本书中的多数实践都被各种 IDE 做到了操作菜单中。虽?IDE 提供了大量重构功能,但仅?IDE 是无法写出简z美妙代码的Q多数的敏捷团队重构工作做得q是不够?<br />  <br />另外有一本专门介l结对编E的书,?Pair Programming Illuminated 》(l对~程技术) by by Laurie Williams and Robert Kessler Q指ZZ么要l对Qƈ从各U不同水q不同性格的程序员l对情况来讨实践的优劣。对此有兴趣的程序员不妨一诅R?<br />  <br />二、敏捯Y件开发实?<br />自从 2001 q敏捯盟成立以来,单独推广极限~程的书变少了,而统一口径推广敏捷的书变得来多。两本同名的敏捷软g开发都是不可多得的好书Q?<br />  <br />?Agile Software Development Q?Principles, Patterns, and Practices ?by Robert C. Martin <br />中译版:(x)《敏捯Y件开发:(x)原则Q模式与实践》,邓辉Q?清华大学出版C?<br />被业内h士称?Uncle Bob ?Robert C Martin 在沉寂几q后写出了这部书。该书可以算是从软g开发角度对敏捷Ҏ(gu)阐述的最详细和全面的一本。之前的敏捷书籍多是x于过E改q,而对如何从技术角度实施讲的比较少。本书一开始先介绍了敏捯盟和敏捷开发过E。之后详l论qC面向对象设计的原则,q些原则是本书的_֍之一。后面通过几个目介绍了如何将设计模式应用于项目中?<br />Uncle Bob 不愧是实늚大师Q写出来的书也是拥有很强的实跉|义。在敏捷团队的办公桌上,应当常备此书Q一来可作ؓ(f)参考查询,二来可以作ؓ(f)新成员的必读书目?<br />  <br />?Agile Software Development ?by Alistair Cockburn <br />中译版:(x)《敏捯Y件开发》,俞涓Qh民邮?sh)出版?<br />q本书更加适合理者来阅读?Alistair 从项目h数和交流难易E度Q将敏捷的各U方法划分了光用范围。h数多的或分布式项目就需要靠其他手段来加Z,人数的可以靠 pair programming {进行面寚w的交。交和反馈是敏L(fng)核心。同?Alistair 也介l了一下他提出?Crystal Ҏ(gu)族?<br />  <br />?. 敏捷目理和敏捷需求分?<br />在推q敏捷一D|间后Q敏L(fng)也意识刎ͼ多数书籍更像是面向开发h员,q于技术化Q难以吸引项目经理或ȝ。因此,一扚w向管理者视角的书也开始Q出水面,q些书包括:(x) <br />?Agile and Iterative Development 》(敏捷q代开发) by Craig Larman <br />?Lean Software Development 》( 敏捷 软g开发工??_开发方?Q?by Mary Poppendieck <br />?Agile Software Development Ecosystems 》(敏捷软g开发生态系l) by Jim Highsmith <br />书中从各U角度比较和分析各种敏捷Ҏ(gu)的优劣,异同Qv源,适用范围{。这些书对于一个项目主决{用何U过E来在自q团队中实跉|h很好的参考作用?<br />  <br />q两q_(d)Z开始逐渐意识到敏捷开发的侧重点不仅仅是开发过E和开发实践,q包括对需求和目理{其他相x面的实践。一些相关的书籍也?zhn)然出现在Z的视野:(x) <br />?Agile Project Management 》(敏捷目理Q?by Jim Highsmith <br />?User Stories Applied ?by Mike Cohn <br />?Agile Estimating and Planning ?by Mike Cohn <br />?Agile Requirements & User Stories ?by Louis Molnar <br />q些书不同于以往新方法,新过E的书目。敏捷项目管理类的书主要介绍如何理敏捷团队Q如何计划要开发的需求,如何为客h供最大的价倹{介l敏捷需求分析的书主要帮助商务分析师或项目经理挖掘和分析用户需求,写出用户故事Q评估和计划用户故事{。h们已l意识到Q各U方法论的实质是相同的,都是提供商业价|减少费Q增加交,快速反馈。因此不需要着重于区分是用了那种Ҏ(gu)。对目l理来说Q不同的目或团队应当采用适应其特D情늚Ҏ(gu)Q而这些方法的基本原则是相同的?<br />  <br />?. 敏捷软g开发新方向 <br />Ҏ(gu)构师或程序员来说Q近q来的技术进展,也得敏捷开发有了新的研I方向:(x) <br />?Agile Web Development with Rails ?by Dave Thomas, David Hansson, Leon Breedt, and Mike Clark <br />该书是获?2006JOLT 奖的书,讲得是采?Ruby on Rails q个 Web 开发工h贉|快速开?Web 目Q从而达到快速反馈拥抱变化的目的?<br />?Refactoring Databases ?by Scott W Ambler <br />此书?Scott 的新作,延箋和承了?Agile Modeling 》(敏捷建模Q和?Agile Database Techniques 》(敏捷数据Q的思想。在敏捷开发过E中Q作为持久化最常见技术的数据库如果不能够敏捷Q怎么能够适应一ơ次q代和一ơ次发布的修改呢Q书中介l了如何q行数据库演化,如何保证升后数据库数据的正性,以及(qing)最?jng)_c?<img src ="http://www.tkk7.com/faithwind/aggbug/87721.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/faithwind/" target="_blank">黑咖?/a> 2006-12-14 15:10 <a href="http://www.tkk7.com/faithwind/archive/2006/12/14/87721.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【摘】java中读取资源文?/title><link>http://www.tkk7.com/faithwind/archive/2006/12/08/86412.html</link><dc:creator>黑咖?/dc:creator><author>黑咖?/author><pubDate>Fri, 08 Dec 2006 09:25:00 GMT</pubDate><guid>http://www.tkk7.com/faithwind/archive/2006/12/08/86412.html</guid><wfw:comment>http://www.tkk7.com/faithwind/comments/86412.html</wfw:comment><comments>http://www.tkk7.com/faithwind/archive/2006/12/08/86412.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/faithwind/comments/commentRss/86412.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/faithwind/services/trackbacks/86412.html</trackback:ping><description><![CDATA[ <div>  1 <em><em>public   class  DrpToOAInfo  <em>{<br />  2 <em> @PersistenceContext<br />  3 <em> EntityManager entityManager;<br />  4 <em> <br />  5 <em>  private   final   static  String CONFIGURETION_FILE  =   " send_message_zh.properties " ;<br />  6 <em>  private   static  Properties properties  =   null ;<br />  7 <em> <br />  8 <em>  public   static  Properties readConfiguretion()<br />  9 <em><em>  <em>{<br /> 10 <em>   if  (properties  ==   null )<br /> 11 <em><em>   <em>{<br /> 12 <em>    try <br /> 13 <em><em>    <em>{<br /> 14 <em>    properties  =   new  Properties();<br /> 15 <em>    ClassLoader cl  =  Thread.currentThread().getContextClassLoader();<br /> 16 <em>    InputStream inputStream  =   null ;<br /> 17 <em>     if  (cl  !=   null )<br /> 18 <em><em>     <em>{<br /> 19 <em>     inputStream  =  cl.getResourceAsStream(CONFIGURETION_FILE);<br /> 20 <em>    } <br /> 21 <em>     if  (inputStream  !=   null )<br /> 22 <em><em>     <em>{<br /> 23 <em>     properties.load(inputStream);<br /> 24 <em>     inputStream.close();<br /> 25 <em>    } <br /> 26 <em>   } <br /> 27 <em>    catch  (Exception e)<br /> 28 <em><em>    <em>{<br /> 29 <em>    e.printStackTrace();<br /> 30 <em>   } <br /> 31 <em>  } <br /> 32 <em>   return  properties;<br /> 33 <em> } <br /> 34 <em> <br /> 35 <em> <br /> 36 <em><em>  /** */ /** <br /> 37 <em>  * <br /> 38 <em>  *  @param  type  接收者类?br /> 39 <em>  *  @param  id    接收者id<br /> 40 <em>  *  @param  name  接收者名U?br /> 41 <em>  *  @param  contentVariable  内容中的变动部分<br /> 42 <em>  *  @param  url IP地址、端口号、项?br /> 43 <em>  *  @param  value 生计划单号<br /> 44 <em>  *  @param  configureInformType 通知cd<br /> 45 <em>   */ <br /> 46 <em>  public   static   void  sendMessage( int  type, <br /> 47 <em>                   String id, <br /> 48 <em>                   String name, <br /> 49 <em>                   Object[] contentVariable, <br /> 50 <em>                   String url,<br /> 51 <em>                   Object[] value,<br /> 52 <em>                   String configureInformType)<br /> 53 <em><em>  <em>{<br /> 54 <em>  String applictionName  =   "" ;<br /> 55 <em>  String content  =   "" ;<br /> 56 <em>  String URL  =   "" ;<br /> 57 <em>  ReceiveType rt  =  ReceiveType.DEPARTMENT;<br /> 58 <em>  <br /> 59 <em>   // d资源文g <br /> 60 <em>  Properties properties  =  readConfiguretion();<br /> 61 <em>  applictionName  =  properties.getProperty( " system.module.appliction.name " );<br /> 62 <em>  content  =  MessageFormat.format(properties.getProperty(configureInformType), contentVariable);<br /> 63 <em><br /> 64 <em>  URL  =  url  +  MessageFormat.format(properties.getProperty(configureInformType  +   " .url " ), value);;<br /> 65 <em>  <br /> 66 <em>  <br /> 67 <em>   if (type  ==   0 )<br /> 68 <em><em>   <em>{<br /> 69 <em>   rt  =  ReceiveType.PEOPLE;<br /> 70 <em>  } <br /> 71 <em>   if (type  ==   1 )<br /> 72 <em><em>   <em>{<br /> 73 <em>   rt  =  ReceiveType.DEPARTMENT;<br /> 74 <em>  } <br /> 75 <em>   if (type  ==   2 )<br /> 76 <em><em>   <em>{<br /> 77 <em>   rt  =  ReceiveType.ROLE;<br /> 78 <em>  } <br /> 79 <em><br /> 80 <em>  System.out.println( " ****************************************** " );<br /> 81 <em>  System.out.println( " * cdQ?" + rt);<br /> 82 <em>  System.out.println( " * IDQ?" + id);<br /> 83 <em>  System.out.println( " * 接收者名Uͼ(x) " + name);<br /> 84 <em>  System.out.println( " * 内容Q?" + content);<br /> 85 <em>  System.out.println( " * urlQ?" + URL);<br /> 86 <em>  System.out.println( " ****************************************** " );<br /> 87 <em>        StartupMessage sm  =   new  StartupMessage(applictionName, rt, " 117 " ,  " tonywu " , id, name, content, URL);<br /> 88 <em><br /> 89 <em>  SendMessage s  =   new  SendMessage(); <br /> 90 <em>  s.sendMessage(sm);<br /> 91 <em> } <br /> 92 <em> <br /> 93 <em><em>  /** */ /** <br /> 94 <em>  * 从request中得到地址中的参数Q?br /> 95 <em>  *  @param  taskID  接收者类?br /> 96 <em>  *  @param  processorID    处理者ID<br /> 97 <em>  *  @param  processorName  处理者名U?br /> 98 <em>  *  @param  processorTime  处理旉<br /> 99 <em>   */ <br />100 <em>  public   static   void  overMessage(String[] processorInfo)<br />101 <em><em>  <em>{<br />102 <em>//   d资源文g <br />103 <em>  Properties properties  =  readConfiguretion();<br />104 <em>  String applictionName  =  properties.getProperty( " system.module.appliction.name " );<br />105 <em>//   Calendar date = Calendar.getInstance();<br />106 <em>//   String t = date.get(Calendar.YEAR)+"-"+date.get(Calendar.MONTH)+"-"+date.get(Calendar.DATE); <br />107 <em>  BeOverMessage bm  =   new  BeOverMessage(applictionName, processorInfo[ 1 ],<br />108 <em>                                   " 117 " ,  " tonywu " , new  Date());<br />109 <em><br />110 <em>  System.out.println( " ****************************************** " );<br />111 <em>  System.out.println( " * taskIDcdQ?" + processorInfo[ 1 ]);<br />112 <em>  System.out.println( " * processorIDIDQ?" + processorInfo[ 2 ]);<br />113 <em>  System.out.println( " * processorName接收者名Uͼ(x) " + processorInfo[ 3 ]);<br />114 <em>  System.out.println( " * 旉Q?" + new  Date());<br />115 <em>  System.out.println( " ****************************************** " );<br />116 <em><br />117 <em>  SendMessage s  =   new  SendMessage(); <br />118 <em>  s.sendMessage(bm);<br />119 <em> } <br />120 <em>} <br />121 <em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></div> <br /> <br />几乎所有的pȝ都需要通过获取配置/资源文g来方侉K|系l?<br />但怎样获取资源文g?<br />java的应用通常把配|文件和工程中的其他class攑֜一P如log4j)Q原因是可以方便的用classLoader?getResourceAsStreamQ)Ҏ(gu)获取资源Q其实java内部是q样?<br />load class的)Q下面是一个简单例子:(x) <br />比如你把文g(abc.properties)攑ֈcom.yourcompany.common包里面,在确保classpath包括该包的情?<br />下就可以按下面的Ҏ(gu)获取资源 <br />ClassLoader cl = this.getClass().getClassLoader(); <br />InputStream is = cl.getResourceAsStream("com/yourcompany/"+abc.properties) <br />q一不,如果abc.properties是一个标准的properties文g的话Q比如其内容如下 <br />messageA = Ok! <br />q可以这栯取配|信?<br />Properties props = new Properties(); <br />props.load(is); <br />String messageA = props.getProperty("messageA "); <br />则messageA== "Ok" <br />当然properties也可以是XML格式Q只要他W合http://java.sun.com/dtd/properties.dtd的规范ƈ且包?<br /><!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">的DOCTYPE declarationQ就可以用props.loadFromXML(InputSteam in)Ҏ(gu)载入property <br />ps:property 也提供store()和storeToXMLҎ(gu)保存属?<br />关于classLoader也可以看看?br /><br />classloader相关基础知识<br /><ul><b>JVM</b><br />jvm是jre里头一个动态连接函数库,jdk里面的jre一般用于运行java本n的程?比如javac,{等.programfiles下面的jre用于q行用户~写的javaE序. <br />JRE下的bin\client 或?bin\server 的jvm.dll是JVM?<br /><br />当一台机器上有多个jvm可选择的时?jvm的选择步骤: <br />1)当前目录有没有jre目录(不准?, <br />2)父目录下的jre子目?<br />3)注册表HEKY_LOCAL_MACHINE\SoftWare\Java\Java Runtime Environment\ <br />所以当q行的是jdk\bin\java.exe的时?用的jre是bin的父目录jdk下面的jre\ <br />q行java.exe扑ֈ了jre后有一个验证程?验证jre和java.exe的版本是否一?如果不一致则?x)发生错?/ul><br /><br /><ul>java -verbose:class Main 昄调用的详l信?/ul><br /><br /><ul>classloader的两U蝲入方?1)pre-loading预先载入,载入基础c?2)load-on-demand按需求蝲?<br />只有实例化一个类才会(x)被classloader载入,仅仅xq不?x)蝲?/ul><br /><br /><ul><b>java动态蝲入class的两U方?</b><br />1)implicit隐式,卛_用实例化才蝲入的Ҏ(gu)来动态蝲入class <br />2)explicit昑ּ方式,又分两种方式: <br />1)java.lang.Class的forName()Ҏ(gu) <br />2)java.lang.ClassLoader的loadClass()Ҏ(gu)</ul><br /><br /><ul><b>static块在什么时候执?</b><br />1)当调用forName(String)载入class时执?如果调用ClassLoader.loadClassq不?x)执?forName(String,false,ClassLoader)时也不会(x)执行. <br />2)如果载入Class时没有执行static块则在第一ơ实例化时执?比如new ,Class.newInstance()操作 <br />3)static块仅执行一?/ul><br /><br /><ul><br /><b>Classcȝ实例.</b><br />>>ClasscL法手工实例化,当蝲入Q意类的时候自动创Z个该cd应的Class的实? <br />>>某个cȝ所有实例内部都有一个栏位记录着该类对应的Class的实例的位置., <br />>>每个javacd应的Class实例可以当作是类在内存中的代理h.所以当要获得类的信?如有哪些cd?有哪些方??都可以让cd应的Class的实例代?java的Reflection机制大量的使用q种Ҏ(gu)来实?<br />>>每个javac都是由某个classLoader(ClassLoader的实?来蝲入的,因此Classcd的实例中都会(x)有栏位记录他的ClassLoader的实?如果该栏位ؓ(f)null,则表Ccd是由bootstrap loader载入?也称root laoder),bootstrap loader不是java所写成,所以没有实? <br /><br />原生Ҏ(gu):forName0(){方?native修饰W?/ul><br /><br /><ul><b>自定义ClassLoader:</b><br />如实例化一个URLClassLoader. URLClassLoader ucl = new URLClassLoader(new URL[]{new URL("file:/e:/bin/")}),URLClassLoader优先扑ֽ前目?再在url中找.class加蝲.URL中别忘在最后加"/"表示目录</ul><br /><br /><ul><b>各个javacȝ哪些classLoader加蝲?</b><br />1)javacd以通过实例.getClass.getClassLoader()得知 <br />2)接口由AppClassLoader(System ClassLoader,可以由ClassLoader.getSystemClassLoader()获得实例)载入 <br />3)ClassLoadercȝbootstrap loader载入</ul><br /><br /><ul><b>ClassLoader hierachy:</b><br />jvm建立->初始化动?>产生W一个ClassLoader,即bootstrap loader->bootstrap loader在sum.misc.Launcherc里面的ExtClassLoader,q设定其Parent为null->bootstrap loader载入sun.misc.Launcher$AppClassLoader,q设定其parent为ExtClassLoader(但是AppClassLoader也是由bootstrap loader所载入?->AppClassLoader载入各个xx.class,xx.class也有可能被ExtclassLoader或者bootstrap loader载入. <br />>>自定义的ClassLoader?getParent()是AppClassLoader.parent和他的加载器q没有关p?<br />>>ExtClassLoader和AppClassLoader都是URLClassLoader的子c?AppClassLoader的URL是由pȝ参数java.class.path取出的字W串军_,而java.class.path?q行java.exe??cp?classpath或CLASSPATH环境变量军_ <br />>>ExtClassLoader查找的url是系l变量java.ext.dirs,java.ext.dirs默认为jdk\jre\lib\ext <br />>>Bootstrap loader的查找url是sun.boot.class.path <br />>>在程序运行后调用System.setProperty()来改变系l变量ƈ不能改变以上加蝲的\?因ؓ(f)classloaderd在System.setProperty之前.sun.boot.class.path是在E序中写ȝ,完全不能修改 <br /><br />委派模型 <br />当classloader有类需要蝲入时先让其parent搜寻其搜寻\径帮忙蝲?如果parent找不?在由自己搜寻自己的搜寻\径蝲?ClassLoader hierachy本来有q种性质</ul><br /><br /><ul><br /><b>NoClassDefFoundError和ClassNotFoundException</b><br />NoClassDefFoundError:当java源文件已~译?class文g,但是ClassLoader在运行期间在其搜寻\径load某个cL,没有扑ֈ.class文g则报q个?<br />ClassNotFoundException:试图通过一个String变量来创Z个ClasscL不成功则抛出q个异常</ul><img src ="http://www.tkk7.com/faithwind/aggbug/86412.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/faithwind/" target="_blank">黑咖?/a> 2006-12-08 17:25 <a href="http://www.tkk7.com/faithwind/archive/2006/12/08/86412.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【摘】MIME大全http://www.tkk7.com/faithwind/archive/2006/12/04/85396.html黑咖?/dc:creator>黑咖?/author>Mon, 04 Dec 2006 08:40:00 GMThttp://www.tkk7.com/faithwind/archive/2006/12/04/85396.htmlhttp://www.tkk7.com/faithwind/comments/85396.htmlhttp://www.tkk7.com/faithwind/archive/2006/12/04/85396.html#Feedback0http://www.tkk7.com/faithwind/comments/commentRss/85396.htmlhttp://www.tkk7.com/faithwind/services/trackbacks/85396.html3gp video/3gpp
aab application/x-authoware-bin
aam application/x-authoware-map
aas application/x-authoware-seg
ai application/postscript
aif audio/x-aiff
aifc audio/x-aiff
aiff audio/x-aiff
als audio/X-Alpha5
amc application/x-mpeg
ani application/octet-stream
asc text/plain
asd application/astound
asf video/x-ms-asf
asn application/astound
asp application/x-asap
asx video/x-ms-asf
au audio/basic
avb application/octet-stream
avi video/x-msvideo
awb audio/amr-wb
bcpio application/x-bcpio
bin application/octet-stream
bld application/bld
bld2 application/bld2
bmp application/x-MS-bmp
bpk application/octet-stream
bz2 application/x-bzip2
cal image/x-cals
ccn application/x-cnc
cco application/x-cocoa
cdf application/x-netcdf
cgi magnus-internal/cgi
chat application/x-chat
class application/octet-stream
clp application/x-msclip
cmx application/x-cmx
co application/x-cult3d-object
cod image/cis-cod
cpio application/x-cpio
cpt application/mac-compactpro
crd application/x-mscardfile
csh application/x-csh
csm chemical/x-csml
csml chemical/x-csml
css text/css
cur application/octet-stream
dcm x-lml/x-evm
dcr application/x-director
dcx image/x-dcx
dhtml text/html
dir application/x-director
dll application/octet-stream
dmg application/octet-stream
dms application/octet-stream
doc application/msword
dot application/x-dot
dvi application/x-dvi
dwf drawing/x-dwf
dwg application/x-autocad
dxf application/x-autocad
dxr application/x-director
ebk application/x-expandedbook
emb chemical/x-embl-dl-nucleotide
embl chemical/x-embl-dl-nucleotide
eps application/postscript
eri image/x-eri
es audio/echospeech
esl audio/echospeech
etc application/x-earthtime
etx text/x-setext
evm x-lml/x-evm
evy application/x-envoy
exe application/octet-stream
fh4 image/x-freehand
fh5 image/x-freehand
fhc image/x-freehand
fif image/fif
fm application/x-maker
fpx image/x-fpx
fvi video/isivideo
gau chemical/x-gaussian-input
gca application/x-gca-compressed
gdb x-lml/x-gdb
gif image/gif
gps application/x-gps
gtar application/x-gtar
gz application/x-gzip
hdf application/x-hdf
hdm text/x-hdml
hdml text/x-hdml
hlp application/winhlp
hqx application/mac-binhex40
htm text/html
html text/html
hts text/html
ice x-conference/x-cooltalk
ico application/octet-stream
ief image/ief
ifm image/gif
ifs image/ifs
imy audio/melody
ins application/x-NET-Install
ips application/x-ipscript
ipx application/x-ipix
it audio/x-mod
itz audio/x-mod
ivr i-world/i-vrml
j2k image/j2k
jad text/vnd.sun.j2me.app-descriptor
jam application/x-jam
jar application/java-archive
jnlp application/x-java-jnlp-file
jpe image/jpeg
jpeg image/jpeg
jpg image/jpeg
jpz image/jpeg
js application/x-javascript
jwc application/jwc
kjx application/x-kjx
lak x-lml/x-lak
latex application/x-latex
lcc application/fastman
lcl application/x-digitalloca
lcr application/x-digitalloca
lgh application/lgh
lha application/octet-stream
lml x-lml/x-lml
lmlpack x-lml/x-lmlpack
lsf video/x-ms-asf
lsx video/x-ms-asf
lzh application/x-lzh
m13 application/x-msmediaview
m14 application/x-msmediaview
m15 audio/x-mod
m3u audio/x-mpegurl
m3url audio/x-mpegurl
ma1 audio/ma1
ma2 audio/ma2
ma3 audio/ma3
ma5 audio/ma5
man application/x-troff-man
map magnus-internal/imagemap
mbd application/mbedlet
mct application/x-mascot
mdb application/x-msaccess
mdz audio/x-mod
me application/x-troff-me
mel text/x-vmel
mi application/x-mif
mid audio/midi
midi audio/midi
mif application/x-mif
mil image/x-cals
mio audio/x-mio
mmf application/x-skt-lbs
mng video/x-mng
mny application/x-msmoney
moc application/x-mocha
mocha application/x-mocha
mod audio/x-mod
mof application/x-yumekara
mol chemical/x-mdl-molfile
mop chemical/x-mopac-input
mov video/quicktime
movie video/x-sgi-movie
mp2 audio/x-mpeg
mp3 audio/x-mpeg
mp4 video/mp4
mpc application/vnd.mpohun.certificate
mpe video/mpeg
mpeg video/mpeg
mpg video/mpeg
mpg4 video/mp4
mpga audio/mpeg
mpn application/vnd.mophun.application
mpp application/vnd.ms-project
mps application/x-mapserver
mrl text/x-mrml
mrm application/x-mrm
ms application/x-troff-ms
mts application/metastream
mtx application/metastream
mtz application/metastream
mzv application/metastream
nar application/zip
nbmp image/nbmp
nc application/x-netcdf
ndb x-lml/x-ndb
ndwn application/ndwn
nif application/x-nif
nmz application/x-scream
nokia-op-logo image/vnd.nok-oplogo-color
npx application/x-netfpx
nsnd audio/nsnd
nva application/x-neva1
oda application/oda
oom application/x-AtlasMate-Plugin
pac audio/x-pac
pae audio/x-epac
pan application/x-pan
pbm image/x-portable-bitmap
pcx image/x-pcx
pda image/x-pda
pdb chemical/x-pdb
pdf application/pdf
pfr application/font-tdpfr
pgm image/x-portable-graymap
pict image/x-pict
pm application/x-perl
pmd application/x-pmd
png image/png
pnm image/x-portable-anymap
pnz image/png
pot application/vnd.ms-powerpoint
ppm image/x-portable-pixmap
pps application/vnd.ms-powerpoint
ppt application/vnd.ms-powerpoint
pqf application/x-cprplayer
pqi application/cprplayer
prc application/x-prc
proxy application/x-ns-proxy-autoconfig
ps application/postscript
ptlk application/listenup
pub application/x-mspublisher
pvx video/x-pv-pvx
qcp audio/vnd.qcelp
qt video/quicktime
qti image/x-quicktime
qtif image/x-quicktime
r3t text/vnd.rn-realtext3d
ra audio/x-pn-realaudio
ram audio/x-pn-realaudio
rar application/x-rar-compressed
ras image/x-cmu-raster
rdf application/rdf+xml
rf image/vnd.rn-realflash
rgb image/x-rgb
rlf application/x-richlink
rm audio/x-pn-realaudio
rmf audio/x-rmf
rmm audio/x-pn-realaudio
rmvb audio/x-pn-realaudio
rnx application/vnd.rn-realplayer
roff application/x-troff
rp image/vnd.rn-realpix
rpm audio/x-pn-realaudio-plugin
rt text/vnd.rn-realtext
rte x-lml/x-gps
rtf application/rtf
rtg application/metastream
rtx text/richtext
rv video/vnd.rn-realvideo
rwc application/x-rogerwilco
s3m audio/x-mod
s3z audio/x-mod
sca application/x-supercard
scd application/x-msschedule
sdf application/e-score
sea application/x-stuffit
sgm text/x-sgml
sgml text/x-sgml
sh application/x-sh
shar application/x-shar
shtml magnus-internal/parsed-html
shw application/presentations
si6 image/si6
si7 image/vnd.stiwap.sis
si9 image/vnd.lgtwap.sis
sis application/vnd.symbian.install
sit application/x-stuffit
skd application/x-Koan
skm application/x-Koan
skp application/x-Koan
skt application/x-Koan
slc application/x-salsa
smd audio/x-smd
smi application/smil
smil application/smil
smp application/studiom
smz audio/x-smd
snd audio/basic
spc text/x-speech
spl application/futuresplash
spr application/x-sprite
sprite application/x-sprite
spt application/x-spt
src application/x-wais-source
stk application/hyperstudio
stm audio/x-mod
sv4cpio application/x-sv4cpio
sv4crc application/x-sv4crc
svf image/vnd
svg image/svg-xml
svh image/svh
svr x-world/x-svr
swf application/x-shockwave-flash
swfl application/x-shockwave-flash
t application/x-troff
tad application/octet-stream
talk text/x-speech
tar application/x-tar
taz application/x-tar
tbp application/x-timbuktu
tbt application/x-timbuktu
tcl application/x-tcl
tex application/x-tex
texi application/x-texinfo
texinfo application/x-texinfo
tgz application/x-tar
thm application/vnd.eri.thm
tif image/tiff
tiff image/tiff
tki application/x-tkined
tkined application/x-tkined
toc application/toc
toy image/toy
tr application/x-troff
trk x-lml/x-gps
trm application/x-msterminal
tsi audio/tsplayer
tsp application/dsptype
tsv text/tab-separated-values
tsv text/tab-separated-values
ttf application/octet-stream
ttz application/t-time
txt text/plain
ult audio/x-mod
ustar application/x-ustar
uu application/x-uuencode
uue application/x-uuencode
vcd application/x-cdlink
vcf text/x-vcard
vdo video/vdo
vib audio/vib
viv video/vivo
vivo video/vivo
vmd application/vocaltec-media-desc
vmf application/vocaltec-media-file
vmi application/x-dreamcast-vms-info
vms application/x-dreamcast-vms
vox audio/voxware
vqe audio/x-twinvq-plugin
vqf audio/x-twinvq
vql audio/x-twinvq
vre x-world/x-vream
vrml x-world/x-vrml
vrt x-world/x-vrt
vrw x-world/x-vream
vts workbook/formulaone
wav audio/x-wav
wax audio/x-ms-wax
wbmp image/vnd.wap.wbmp
web application/vnd.xara
wi image/wavelet
wis application/x-InstallShield
wm video/x-ms-wm
wma audio/x-ms-wma
wmd application/x-ms-wmd
wmf application/x-msmetafile
wml text/vnd.wap.wml
wmlc application/vnd.wap.wmlc
wmls text/vnd.wap.wmlscript
wmlsc application/vnd.wap.wmlscriptc
wmlscript text/vnd.wap.wmlscript
wmv audio/x-ms-wmv
wmx video/x-ms-wmx
wmz application/x-ms-wmz
wpng image/x-up-wpng
wpt x-lml/x-gps
wri application/x-mswrite
wrl x-world/x-vrml
wrz x-world/x-vrml
ws text/vnd.wap.wmlscript
wsc application/vnd.wap.wmlscriptc
wv video/wavelet
wvx video/x-ms-wvx
wxl application/x-wxl
x-gzip application/x-gzip
xar application/vnd.xara
xbm image/x-xbitmap
xdm application/x-xdma
xdma application/x-xdma
xdw application/vnd.fujixerox.docuworks
xht application/xhtml+xml
xhtm application/xhtml+xml
xhtml application/xhtml+xml
xla application/vnd.ms-excel
xlc application/vnd.ms-excel
xll application/x-excel
xlm application/vnd.ms-excel
xls application/vnd.ms-excel
xlt application/vnd.ms-excel
xlw application/vnd.ms-excel
xm audio/x-mod
xml text/xml
xmz audio/x-mod
xpi application/x-xpinstall
xpm image/x-xpixmap
xsit text/xml
xsl text/xml
xul text/xul
xwd image/x-xwindowdump
xyz chemical/x-pdb
yz1 application/x-yz1
z application/x-compress
zac application/x-zaurus-zac
zip application/zip 
 

]]>
JDBC+HibernateBlob数据写入Oracle[摘]http://www.tkk7.com/faithwind/archive/2006/11/10/80360.html黑咖?/dc:creator>黑咖?/author>Fri, 10 Nov 2006 03:45:00 GMThttp://www.tkk7.com/faithwind/archive/2006/11/10/80360.htmlhttp://www.tkk7.com/faithwind/comments/80360.htmlhttp://www.tkk7.com/faithwind/archive/2006/11/10/80360.html#Feedback0http://www.tkk7.com/faithwind/comments/commentRss/80360.htmlhttp://www.tkk7.com/faithwind/services/trackbacks/80360.html
  写入Blob字段和写入其它类型字D늚方式非常不同Q因为Blob自n有一个cursorQ你必须使用cursor对blobq行操作Q因而你在写入Blob之前Q必获得cursor才能q行写入Q那么如何获得Blob的cursor呢?

  q需要你先插入一个empty的blobQ这创Z个blob的cursorQ然后你再把q个empty的blob的cursor用select查询出来Q这样通过两步操作Q你p得了blob的cursorQ可以真正的写入blob数据了?

  看下面的JDBC的demoQ把oraclejdbc.jarq个二进制文件写入数据库表javatest的content字段(q是一个blob型字D?

  import java.sql.*;
  import java.io.*;
  import oracle.sql.*;
  public class WriteBlob {

  public static void main(String[] args) {

  try {
  DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
  Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","fankai","fankai");
  conn.setAutoCommit(false);

  BLOB blob = null;

  PreparedStatement pstmt = conn.prepareStatement("insert into javatest(name,content) values(?,empty_blob())");
  pstmt.setString(1,"fankai");
  pstmt.executeUpdate();
  pstmt.close();

  pstmt = conn.prepareStatement("select content from javatest where
  }


]]>
构徏Tree的js集合http://www.tkk7.com/faithwind/archive/2006/11/09/80190.html黑咖?/dc:creator>黑咖?/author>Thu, 09 Nov 2006 08:13:00 GMThttp://www.tkk7.com/faithwind/archive/2006/11/09/80190.htmlhttp://www.tkk7.com/faithwind/comments/80190.htmlhttp://www.tkk7.com/faithwind/archive/2006/11/09/80190.html#Feedback0http://www.tkk7.com/faithwind/comments/commentRss/80190.htmlhttp://www.tkk7.com/faithwind/services/trackbacks/80190.html我用q的2个:(x)

1.xtree?a target="_blank">xloadtree,M来说,实现q不?提供了一ơ性构建树(wi),和动态加载树(wi)(生成指定格式的XML才可?,改变Style,功能中等,用法中等.

2.yui?a target="_blank">treeview,q也是不错的实现,是Yahoo提供?支持一ơ性构?动态构?改变Style,Menu样式{等,功能很多,但用法比较复?br />

没用q,只是听说?br />

3.dtree,比较中规中矩的一个实?用法?不支持动态加载?/p>



q有其他的好的jsQ大家可以补充?br />



]]>
Oracle8i中用Java语言来开发存储过E?/title><link>http://www.tkk7.com/faithwind/archive/2006/08/16/63908.html</link><dc:creator>黑咖?/dc:creator><author>黑咖?/author><pubDate>Wed, 16 Aug 2006 07:18:00 GMT</pubDate><guid>http://www.tkk7.com/faithwind/archive/2006/08/16/63908.html</guid><wfw:comment>http://www.tkk7.com/faithwind/comments/63908.html</wfw:comment><comments>http://www.tkk7.com/faithwind/archive/2006/08/16/63908.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/faithwind/comments/commentRss/63908.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/faithwind/services/trackbacks/63908.html</trackback:ping><description><![CDATA[    <div id="tpxrtww" class="Section1"><br />  <br />Oracle8i中用Java语言来开发存储过E?<br />本篇文章来源与时代朝x据库Q原晓通数据库Q培训部Oracle 资料库?<br />在Oracle8i之前Q开发h员只能用PL/SQL来开发存储过E。而在Oracle8i之中Q不仅可以用原有的PL/SQL开发存储过E,而且也可以用Java语言来开发存储过E。本文章将单介l关于这斚w的知识,包括以下内容Q?<br />  <br />l         存储q程介; <br />l         Java存储q程 <br />l         Java存储q程的开发步?<br />l         使用Java开发过E; <br />l         使用Java开发函敎ͼ <br />l         使用Java开发包Q?<br />l         使用Java开发触发器Q?<br />l         使用Java开发对象方法; <br />l         使用JDeveloper开发JSP?<b>存储q程?/b><br />存储q程是存储在数据库中的一D存储程序。当创徏存储q程Ӟpȝ?x)对其进行编译,q将执行代码存储到数据库中?<br />  <br />1.         设计存储q程的方?<br />  <br />l         在定义存储过E时Q要使用其完成单一、相寚w中的d?<br />l         在定义存储过E时Q不要定义已l由其它特征所提供功能的过E。例如,不要定义强制数据完整性的q程Q用完整性约束)?<br />  <br />2.         存储q程的优?<br />1)        安全?<br />  <br />当创Z存储q程之后Q可以将执行该过E的权限授予其它用户Q从而得他可以执行特定的数据库操作Q而不能访问其它模式对象(例如表)。例如,你可以将执行q程Q更新表Q的权限授予其它用户Q但不授予它们直接访问该表的权限?<br />  <br />2)        性能 <br />  <br />l         存储q程只被发送到数据库一ơ,相对于SQL语句或PL/SQL块而言Q其|络通信量更?<br />l         当调用存储过E时Q数据库?x)直接运行该存储q程Q无需q行~译。相对于SQL语句或PL/SQL块而言Q其执行速度更快?<br />  <br />3)        内存分配 <br />  <br />存储q程充分利用了Oracle׃n内存的能力。在存储过E装载到内存中后Q多个用户可以同时调用该存储q程Q从而降低了应用对Oracle的实际内存需求?<br />  <br />4)        生?<br />  <br />存储q程提高了开发生产力。通过公共集合编写ؓ(f)存储q程Q避免了冗余代码Q从而提高了开发生产力。例如,我们可以~写用于插入、更新、删除AUTHS表的q程Q此后应用可以直接调用这些过E,而无需重写SQL语句。当理数据的方法发生变化时Q只需要修改过E,而不需要对应用q行M修改?<b>Java</b><b>存储q程</b><br />在以前的Oracle版本中,开发存储过E是通过PL/SQL来完成的。而在Oracle8i版本中,我们不仅可以使用PL/SQL开发存储过E,而且q可以用Java语言来开发存储过E?<br />  <br />1.         PL/SQL与Java存储q程比较 <br />  <br />与PL/SQL相比Q用Java语言开发存储过E有以下优点Q?<br />  <br />l         Java语言h更强大的q算能力Q提供了更多的运方法。当要完成进行复杂运的存储q程Ӟ使用JSP是你最好的选择?<br />l         PL/SQL只能用于Oracle数据库,而Java语言可以应用于更多的数据库系l(如Sybase、DB2、Informix{等Q,所以Java存储q程具有更好的兼容性、可UL性?<br />  <br />2.         JSP分类 <br />Java存储q程包括q程、函数、触发器以及(qing)对象Ҏ(gu)四种cd?<br />  <br />3.         调用JSP的四U方?<br />  <br />l         CALL语法Q?<br />l         DML语句Q?<br />l         PL/SQL块、子E序、包Q?<br />l         p发器隐含调用?<b>Java</b><b>存储q程的开发步?/b><b></b><br />1.         ~写Java源代?<br />  <br />当开发Java存储q程Ӟ首先应该~写Java源代码。如下图所C:(x)<em><br />注意事项Q?<br />  <br />l          当以public方式声明cLQ类名必M其文件名完全一致?<br />l          只有public staticҎ(gu)可以作ؓ(f)Java存储q程?<br />  <br />2.         装蝲Java代码?qing)类到Oracle8i数据库中 <br />在编写了Java源代码之后,接下来应该将Java代码?qing)相应的Javac装载到Oracle8i数据库中。如下图所C:(x)<em><br />装蝲Java代码?qing)类到RDBMS有以下两U方法:(x) <br />  <br />l         使用loadjava工具Q通过该工具可以快速装载Java源代码(.javaQ、Java二进制代码(.classQ以?qing)Java打包文gQ?jarQ?<br />l         使用CREATE Java、ALTER Java装蝲Java代码?<br />  <br />其中Q前一U方法相对简单,q且我们推荐你用这U方法?<br />  <br />3.         生成调用说明 <br />  <br />在装载了JavacM后,接下来应该生成对public staticҎ(gu)的调用说明,最l完成Java存储q程的开发工作。如下图所C:(x)<em><br />  <br />完成上述步骤之后Q就完成了Java存储q程的开发工作,然后可以调用ƈ执行该Java存储q程了?<b>使用</b><b>Java</b><b>开发过E?/b><br />q程用于执行某种操作。需要注意的是,q程所对应的JavaҎ(gu)q回值必Mؓ(f)I(voidQ。本节以创徏用于插入、修改和删除AUTHS表的JSPZQ说明用Java开发过E的Ҏ(gu)。如下图所C:(x)<em><br />下面讲述完成上述d的方法及(qing)q程Q?<br />  <br />1.         ~写Java源代?<br />  <br />E序清单如下Qmanipulate_auths.javaQ:(x) <br />  <br />/* 导入Javac?*/ <br />import java.sql.*; <br />import java.io.*; <br />import oracle.jdbc.driver.*; <br />  <br />/* ȝ */ <br />public class manipulate_auths { <br />  <br />  public static void insert_auths <br />    (String code,String name,int sex,String birthdate,String entry_date_time) <br />  throws SQLException { <br />  <br />    /* 建立到数据库的缺省连?*/ <br />    Connection conn = new OracleDriver().defaultConnection(); <br />    /* 构造动态SQL语句 */ <br />String sql = "INSERT INTO auths <br /> (author_code,name,sex,birthdate,entry_date_time) " + <br />                 "VALUES (?,?,?,?,?)"; <br />    /* 使用try ... catch语句抓取q抛Z?*/ <br />    try { <br />      /* 准备动态SQL语句 */ <br />      PreparedStatement pstmt = conn.prepareStatement(sql); <br />      /* 讄动态SQL参数?*/ <br />      pstmt.setString(1, code); <br />      pstmt.setString(2, name); <br />      pstmt.setInt(3, sex); <br />      pstmt.setString(4, birthdate); <br />      pstmt.setString(5, entry_date_time); <br />      /* 执行动态SQL语句 */ <br />      pstmt.executeUpdate(); <br />      /* 关闭动态SQL语句 */ <br />      pstmt.close(); <br />    } catch (SQLException e) { } <br />  } <br />  <br />  public static void delete_auths (String code) <br />  throws SQLException { <br />  <br />    /* 建立到数据库的缺省连?*/ <br />    Connection conn = new OracleDriver().defaultConnection(); <br />    /* 构造动态SQL语句 */ <br />    String sql = "DELETE FROM auths  WHERE author_code = ?"; <br />    /* 使用try ... catch语句抓取q抛Z?*/ <br />    try { <br />      /* 准备动态SQL语句 */ <br />      PreparedStatement pstmt = conn.prepareStatement(sql); <br />      /* 讄动态SQL参数?*/ <br />      pstmt.setString(1, code); <br />      /* 执行动态SQL语句 */ <br />      pstmt.executeUpdate(); <br />      /* 关闭动态SQL语句 */ <br />      pstmt.close(); <br />    } catch (SQLException e) { } <br />  } <br />  <br />  public static void modify_salary (String code,float salary) <br />  throws SQLException { <br />  <br />    /* 建立到数据库的缺省连?*/ <br />    Connection conn = new OracleDriver().defaultConnection(); <br />    /* 构造动态SQL语句 */ <br />    String sql = "UPDATE auths SET salary = ? WHERE author_code = ?"; <br />    /* 使用try ... catch语句抓取q抛Z?*/ <br />    try { <br />      /* 准备动态SQL语句 */ <br />      PreparedStatement pstmt = conn.prepareStatement(sql); <br />      /* 讄动态SQL参数?*/ <br />      pstmt.setFloat(1, salary); <br />      pstmt.setString(2, code); <br />      /* 执行动态SQL语句 */ <br />      pstmt.executeUpdate(); <br />      /* 关闭动态SQL语句 */ <br />      pstmt.close(); <br />    } catch (SQLException e) { } <br />  } <br />} <br />2.         装蝲Java代码?qing)类到Oracle8i数据库中 <br />  <br />在编写了Java源代码之后,可以将Java对象装蝲到Oracle8i数据库中了。下面是完成q项d的方法:(x) <br /> <em><br /><em><br />  <br />3.         发行JavaQ生成调用说?<br />  <br />在装载了JavacdQ就可以发行该Javac,q生成调用其Ҏ(gu)的过E说明了。下面是完成该项d的方法:(x) <br /> <em><br /><em><br /><em><br /><em><br /><br />  <br />4.         调用JSP <br />在生成了调用JavaҎ(gu)的过E说明之后,我们可以调用JSP了。例如:(x) <br /> <em><br /><em><br /><em><b>使用</b><b>Java</b><b>开发函?/b><br />函数用于q回特定数据。本节将通过创徏用于q回作者的文章标题Q以?qing)某U类型的文章个数ZQ说明用Java开发函数的Ҏ(gu)。如下图所C:(x) <br /> <em><br />  <br />下面讲述完成上述d的方法和q程?<br />  <br />1.         ~写Java源代?<br />  <br />E序清单如下Qquery_article.javaQ:(x) <br />  <br />/* 导入Javac?*/ <br />import java.sql.*; <br />import java.io.*; <br />import oracle.jdbc.driver.*; <br />  <br />/* ȝ */ <br />public class query_article { <br />  <br />  public static String auths_article(String code) <br />  throws SQLException { <br />  <br />    /* 建立到数据库的缺省连?*/ <br />    Connection conn = new OracleDriver().defaultConnection(); <br />    /* 构造动态SQL语句 */ <br />    String sql1 = "SELECT name FROM auths WHERE author_code=?"; <br />    String sql2 = "SELECT title FROM article WHERE author_code=?"; <br />    /* 声明q初始化auths_article变量 */ <br />    String auths_article = new String(); <br />    /* 使用try ... catch语句抓取q抛Z?*/ <br />    try { <br />      /* 准备动态SQL语句 */ <br />      PreparedStatement pstmt = conn.prepareStatement(sql1); <br />      /* 讄动态SQL参数?*/ <br />      pstmt.setString(1, code); <br />      /* 执行查询Qƈ结果保存到l果集中 */ <br />      ResultSet rset = pstmt.executeQuery(); <br />      /* 循环获取q处理结果集数据 */ <br />      while(rset.next()) <br />        auths_article =auths_article + rset.getString(1); <br />      /* 关闭l果?*/ <br />      rset.close(); <br />      /* 关闭动态SQL语句 */ <br />      pstmt.close(); <br />    } catch (SQLException e) {} <br />    auths_article = auths_article + "所~写文章的标题如下:(x)\n"; <br />  <br />    try { <br />      /* 准备动态SQL语句 */ <br />      PreparedStatement pstmt = conn.prepareStatement(sql2); <br />      /* 讄动态SQL参数?*/ <br />      pstmt.setString(1, code); <br />      /* 执行查询Qƈ结果保存到l果集中 */ <br />      ResultSet rset = pstmt.executeQuery(); <br />      /* 循环获取q处理结果集数据 */ <br />      while(rset.next()) { <br />        auths_article =auths_article + "    " + rset.getString(1) + "\n"; <br />      } <br />      /* 关闭l果?*/ <br />      rset.close(); <br />      /* 关闭动态SQL语句 */ <br />      pstmt.close(); <br />    } catch (SQLException e) {} <br />    return auths_article; <br />  } <br />  <br />  public static String query_type_article_number(String code) <br />  throws SQLException { <br />  <br />    /* 建立到数据库的缺省连?*/ <br />    Connection conn = new OracleDriver().defaultConnection(); <br />    /* 构造动态SQL语句 */ <br />    String sql = "SELECT count(*) FROM article WHERE article_code IN " <br />       + "(SELECT article_code FROM article_type WHERE type_code=?)"; <br />    String article_number = new String("cd? + code + "的文章共?"); <br />    /* 使用try ... catch语句抓取q抛Z?*/ <br />    try { <br />      /* 准备动态SQL语句 */ <br />      PreparedStatement pstmt = conn.prepareStatement(sql); <br />      /* 讄动态SQL参数?*/ <br />      pstmt.setString(1, code); <br />      /* 执行查询Qƈ结果保存到l果集中 */ <br />      ResultSet rset = pstmt.executeQuery(); <br />      /* 循环获取q处理结果集数据 */ <br />      while(rset.next()) <br />        article_number = article_number + rset.getString(1) + "?; <br />      /* 关闭l果?*/ <br />      rset.close(); <br />      /* 关闭动态SQL语句 */ <br />      pstmt.close(); <br />    } catch (SQLException e) {} <br />    return article_number; <br />  } <br />} <br />  <br />2.         装蝲Java代码?qing)类到Oracle8i数据库中 <br />  <br />在编写了Java源代码之后,可以将Java对象装蝲到Oracle8i数据库中了。下面是完成q项d的方法:(x)<em><br /><em><br />  <br />3.         发行JavaQ生成调用说?<br />  <br />在装载了JavacdQ就可以发行该Javac,q生成调用其Ҏ(gu)的函数说明了。下面是完成该项d的方法:(x) <br /> <em><br /><em><br /><em><br />  <br />4.         调用JSP <br />  <br />在生成了调用JavaҎ(gu)的函数说明之后,可以调用这些函C。例如:(x) <br /> <em><br /><em><b>使用</b><b>Java</b><b>开?/b><b>?/b><br />Javacȝ于封装JavaҎ(gu)Q与此类|包用于封装过E和函数{。本节将通过创徏用于理表subject的包ZQ说明用Java开发包的方法。如下图所C:(x) <br /> <em><br /><br />  <br />下面讲述完成上述d的方法和q程?<br />  <br />1.         ~写Java源代?<br />  <br />E序清单如下Qmanage_subject.javaQ:(x) <br />  <br />/* 导入Javac?*/ <br />import java.sql.*; <br />import java.io.*; <br />import oracle.jdbc.driver.*; <br />  <br />/* ȝ */ <br />public class manage_subject { <br />  <br />  public static String query_subject() <br />  throws SQLException { <br />    /* 建立到数据库的缺省连?*/ <br />    Connection conn = new OracleDriver().defaultConnection(); <br />    /* 构造SQL语句 */ <br />    String sql = "SELECT * FROM subject"; <br />    /* 声明q初始化subject变量 */ <br />    String subject = new String(); <br />    /* 使用try ... catch语句抓取q抛Z?*/ <br />    try { <br />      /* 创徏Statement对象 */ <br />      Statement stmt = conn.createStatement(); <br />      /* 执行SQL语句Qƈ查询结果赋l结果集 */ <br />      ResultSet rset = stmt.executeQuery(sql); <br />      /* 循环获取q处理结果集变量 */ <br />      while(rset.next()) <br />        subject = subject + rset.getString(1) + "\n"; <br />      /* 关闭l果?*/ <br />      rset.close(); <br />    } catch (SQLException e) {} <br />    return subject; <br />  } <br />  <br />  public static void insert_subject(String subject) <br />  throws SQLException { <br />  <br />    /* 建立到数据库的缺省连?*/ <br />    Connection conn = new OracleDriver().defaultConnection(); <br />    /* 构造动态SQL语句 */ <br />    String sql = "INSERT INTO subject VALUES(?)"; <br />    /* 使用try ... catch语句抓取q抛Z?*/ <br />    try { <br />      /* 准备动态SQL语句 */ <br />      PreparedStatement pstmt = conn.prepareStatement(sql); <br />      /* 讄动态SQL参数?*/ <br />      pstmt.setString(1, subject); <br />      /* 执行动态SQL语句 */ <br />      pstmt.executeUpdate(); <br />      /* 关闭动态SQL语句 */ <br />      pstmt.close(); <br />    } catch (SQLException e) {} <br />  } <br />  <br />  public static void delete_subject(String subject) <br />  throws SQLException { <br />  <br />    /* 建立到数据库的缺省连?*/ <br />    Connection conn = new OracleDriver().defaultConnection(); <br />    /* 构造动态SQL语句 */ <br />    String sql = "DELETE FROM subject WHERE subject=?"; <br />    /* 使用try ... catch语句抓取q抛Z?*/ <br />    try { <br />      /* 准备动态SQL语句 */ <br />      PreparedStatement pstmt = conn.prepareStatement(sql); <br />      /* 讄动态SQL参数?*/ <br />      pstmt.setString(1, subject); <br />      /* 执行动态SQL语句 */ <br />      pstmt.executeUpdate(); <br />      /* 关闭动态SQL语句 */ <br />      pstmt.close(); <br />    } catch (SQLException e) {} <br />  } <br />  <br />  public static void update_subject(String old_subject,String new_subject) <br />  throws SQLException { <br />  <br />    /* 建立到数据库的缺省连?*/ <br />    Connection conn = new OracleDriver().defaultConnection(); <br />    /* 构造动态SQL语句 */ <br />    String sql = "UPDATE subject SET subject=? WHERE subject=?"; <br />    /* 使用try ... catch语句抓取q抛Z?*/ <br />    try { <br />      /* 准备动态SQL语句 */ <br />      PreparedStatement pstmt = conn.prepareStatement(sql); <br />      /* 讄动态SQL参数?*/ <br />      pstmt.setString(1, new_subject); <br />      pstmt.setString(2, old_subject); <br />      /* 执行动态SQL语句 */ <br />      pstmt.executeUpdate(); <br />      /* 关闭动态SQL语句 */ <br />      pstmt.close(); <br />    } catch (SQLException e) {} <br />  } <br />} <br />  <br />2.         装蝲Java代码?qing)类到Oracle8i数据库中 <br />  <br />在编写了Java源代码之后,可以将Java对象装蝲到Oracle8i数据库中了。下面是完成q项d的方法:(x) <br /> <em><br /><em><br /><br />  <br />3.         发行JavaQ生成调用说?<br />  <br />在装载了JavacdQ就可以发行该Javac,q生成调用其Ҏ(gu)的包了。下面是完成该项d的方法:(x)<em><br /><em><br /><em><br /><br />4.         调用JSP <br />  <br />在生成了调用JavaҎ(gu)的包后,可以调用这些方法所对应的函数和q程了。例如:(x) <br /> <br /><em><br /><em><br /><em><br /><em><br /><b>使用</b><b>Java</b><b>开?/b><b>触发?/b><br />触发器是一D存储程序,当执行特定修Ҏ(gu)作时Q会(x)触发它,q执行其中的存储E序。下面以记蝲表AUTHS作者工资更新情늚触发器ؓ(f)例,说明使用Java开发触发器的方法。如下图所C:(x) <br /> <em><br /><br /><br />  <br />下面讲述完成上述d的方法和q程?<br />  <br />1.         ~写Java源代?<br />  <br />E序清单如下Qtrigger.javaQ:(x) <br />  <br />/* 导入Javac?*/ <br />import java.sql.*; <br />import java.io.*; <br />import oracle.jdbc.driver.*; <br />/* ȝ */ <br />public class trigger { <br />  <br />  public static void log_salary(String name,float old_sal,float new_sal) <br />  throws SQLException { <br />  <br />    /* 建立到数据库的缺省连?*/ <br />    Connection conn = new OracleDriver().defaultConnection(); <br />    String sql = "INSERT INTO salary_audit VALUES(?,?,?)"; <br />  <br />    /* 使用try ... catch语句抓取q抛Z?*/ <br />    try { <br />      PreparedStatement pstmt = conn.prepareStatement(sql); <br />      pstmt.setString(1, name); <br />      pstmt.setFloat(2, old_sal); <br />      pstmt.setFloat(3, new_sal); <br />      pstmt.executeUpdate(); <br />      pstmt.close(); <br />    } catch (SQLException e) {} <br />  } <br />} <br />  <br />2.         装蝲Java代码?qing)类到Oracle8i数据库中 <br />  <br />在编写了Java源代码之后,可以将Java对象装蝲到Oracle8i数据库中了。下面是完成q项d的方法:(x) <br /> <em><br /><em><br /><br />3.         发行JavaQ生成调用说?<br />  <br />在装载了JavacdQ就可以发行该Javac,q生成调用其Ҏ(gu)的过E说明及(qing)触发器了。下面是完成该项d的方法:(x)<em><br /><em><br /><em><br /><em><br /><br />  <br />4.         调用JSP <br />  <br />在创Z触发器之后,当修改作者工资时?x)自动调用其中的存储E序。例如:(x) <br /> <em><br /><em><br /><b>使用</b><b>Java</b><b>开发对象方?/b><br />对象cd是一U用戯定义的数据结构,它可以将数据cd、函C?qing)过E封装到该数据结构中。对象方法是指对象类型中的函数和q程Q本节将以获取和增加对象工资信息ZQ说明用Java开发对象方法的Ҏ(gu)。如下图所C:(x)<em><br /><br />  <br />下面讲述完成上述d的方法及(qing)q程Q?<br />  <br />1.         ~写Java源代?<br />  <br />E序清单如下Qobject_type.javaQ:(x) <br />  <br />/* 导入Javac?*/ <br />import java.sql.*; <br />import java.io.*; <br />import oracle.sql.*; <br />import oracle.jdbc.driver.*; <br />import oracle.oracore.*; <br />import oracle.jdbc2.*; <br />import java.math.*; <br />  <br />/* ȝQ实CSQLData接口 */ <br />public class object_type implements SQLData { <br />  <br />  /* 声明private变量Q它们对应于对象cd的属?*/ <br />  private String code; <br />  private String name; <br />  private BigDecimal sex; <br />  private BigDecimal salary; <br />  <br />  /* Ҏ(gu)get_name()Q对象类型的Ҏ(gu)Q用于获取对象姓?*/ <br />  public String get_name() { <br />    return name; <br />  } <br />  <br />  /* Ҏ(gu)get_salary()Q对象类型的Ҏ(gu)Q用于获取对象工?*/ <br />  public BigDecimal get_salary() { <br />    BigDecimal sal = salary; <br />    return sal; <br />  } <br />  /* Ҏ(gu)raise_salary()Q对象类型的Ҏ(gu)Q用于增加对象工?*/ <br />  public void raise_salary(BigDecimal raise) { <br />    salary = salary.add(raise); <br />  } <br />  <br />  /* 以下E序D实C接口SQLData */ <br />  String sql_type; <br />  public String getSQLTypeName() throws SQLException { <br />    return sql_type; <br />  } <br />  <br />  public void readSQL(SQLInput stream, String typeName) throws SQLException { <br />    sql_type = typeName; <br />    code = stream.readString(); <br />    name = stream.readString(); <br />    sex = stream.readBigDecimal(); <br />    salary = stream.readBigDecimal(); <br />  } <br />  <br />  public void writeSQL(SQLOutput stream) throws SQLException { <br />    stream.writeString(code); <br />    stream.writeString(name); <br />    stream.writeBigDecimal(sex); <br />    stream.writeBigDecimal(salary); <br />  } <br />} <br />  <br />2.         装蝲Java代码?qing)类到Oracle8i数据库中 <br />  <br />在编写了Java源代码之后,可以将Java对象装蝲到Oracle8i数据库中了。下面是完成q项d的方法:(x) <br /> <em><br /><em><br /><br />  <br />3.         发行JavaQ生成调用说?<br />  <br />在装载了JavacdQ就可以发行该Javac,q生成调用其Ҏ(gu)的相应对象方法了。下面是完成该项d的方法:(x) <br /> <em><br /><em><br /><em><br /><br />  <br />4.         调用JSP <br />  <br />在创Z对象cd?qing)对象方法之后,可以调用这些对象方法了。例如:(x) <br /> <em><br /><b>使用</b><b>JDeveloper</b><b>开?/b><b>JSP</b><br />本节以创建用于操UA(ch)RTICLE表的JSPZQ说明用JDeveloper 2.0开发JSP的方法。如下图所C:(x)<em><br /><br />q里只简单介l用JDeveloper开发JSP的过E和步骤Q而关于如何用JDeveloper误者参见相x册?<br />  <br />1.         准备工作 <br />  <br />1)        选择“File?gt; New Workspace”,创徏名称为jsp.jws的工作组。如下图所C:(x) <br /> <em><br /><br />  <br />2)        选择“File?gt;New Project”,此时?x)启动新目创徏向导Qƈ昄如下对话框:(x) <br /> <em><br /><br />  <br />3)        选中“Create an <Empty Project>”,然后单击“Next”,此时?x)显C如下对话框Q?em><br /><br />  <br />4)        如上图所C,在“Project Name”框中键入“article”,目路径框中键入“d:\jsp”,然后单击“Next”,此时?x)显C如下对话框Q?<br /> <em><br /><br />  <br />5)        在上囄对话框中键入你所需要的信息Q然后单几ZNext”,此时?x)显C如下对话框Q?<br /> <em><br /><br />  <br />6)        单击“Finish”,完成目的创E,此时的图形界面如下:(x) <br /> <em><br /><br />  <br />2.         ~写Java源代?<br />  <br />在完成了准备工作之后Q我们就可以~写Java源代码了。步骤如下:(x) <br />  <br />1)        选择“File?gt;New”,此时?x)弹出如下对话框Q?<br />  <br /><em><br /><br />  <br />2)        如上图所C,选中“Class”,然后单击“OK”,此时?x)弹出如下对话框Q?<br /> <em><br /><br />  <br />3)        如上图所C,在“Class Name”框中键入“article”,选中“Style”中的“Public”,然后单击“OK”,此时?x)增加名UCؓ(f)“article.java”的节点。如下图所C:(x) <br /> <em><br /><br />  <br />4)        双击“article.java”节点,?x)显C编辑工作区。如下图所C:(x) <br /> <em><br /><br />  <br />5)        然后Q在~辑工作Z~写如下的Java源代码(article.javaQ:(x) <br />  <br />/* 导入Javac?*/ <br />import java.sql.*; <br />import java.io.*; <br />import oracle.jdbc.driver.*; <br />  <br />/* ȝ */ <br />public class article { <br />  <br />  public static String query_article(String code) <br />  throws SQLException { <br />    /* 建立到数据库的缺省连?*/ <br />    Connection conn = new OracleDriver().defaultConnection(); <br />    /* 构造动态SQL语句*/ <br />    String sql = "SELECT author_code,title FROM article " + <br />                  "WHERE article_code = ?"; <br />    /* 声明String变量article_infoQ该变量用于存储文章信?*/ <br />    String article_info = new String(); <br />  <br />    /* 使用try ... catch语句抓取q抛Z?*/ <br />    try { <br />      /* 准备动态SQL语句 */ <br />      PreparedStatement pstmt = conn.prepareStatement(sql); <br />      /* 讄动态SQL参数?*/ <br />      pstmt.setString(1, code); <br />      ResultSet rset = pstmt.executeQuery(); <br />      /* 循环获取q处理结?*/ <br />      while(rset.next()) { <br />        article_info = "作者代码:(x)  " + rset.getString(1) + "\n"; <br />        article_info = article_info + "文章标题Q?" + <br />                          rset.getString(2); <br />      } <br />      /* 关闭l果?*/ <br />      rset.close(); <br />      /* 关闭动态SQL语句 */ <br />      pstmt.close(); <br />    } catch (SQLException e) {} <br />    return article_info; <br />  } <br />  <br />  public static void insert_article(String article_code, <br />      String author_code,String secrate_level,String pub_date) <br />  throws SQLException { <br />    /* 建立到数据库的缺省连?*/ <br />    Connection conn = new OracleDriver().defaultConnection(); <br />    /* 构造动态SQL语句 */ <br />    String sql = "INSERT INTO article (article_code,author_code," + <br />                    "secrate_level,pub_date) VALUES (?,?,?,?)"; <br />    /* 使用try ... catch语句抓取q抛Z?*/ <br />    try { <br />      /* 准备动态SQL语句 */ <br />      PreparedStatement pstmt = conn.prepareStatement(sql); <br />      /* 讄动态SQL参数?*/ <br />      pstmt.setString(1, article_code); <br />      pstmt.setString(2, author_code); <br />      pstmt.setString(3, secrate_level); <br />      pstmt.setString(4, pub_date); <br />      pstmt.executeUpdate(); <br />      /* 关闭动态SQL语句 */ <br />      pstmt.close(); <br />    } catch (SQLException e) {} <br />  } <br />  <br />  public static void delete_article (String code) <br />  throws SQLException { <br />    /* 建立到数据库的缺省连?*/ <br />    Connection conn = new OracleDriver().defaultConnection(); <br />    /* 构造SQL语句 */ <br />    String sql = "DELETE FROM article  WHERE article_code = ?"; <br />    /* 使用try ... catch语句抓取q抛Z?*/ <br />    try { <br />      /* 准备动态SQL语句 */ <br />      PreparedStatement pstmt = conn.prepareStatement(sql); <br />      /* 讄动态SQL参数?*/ <br />      pstmt.setString(1, code); <br />      pstmt.executeUpdate(); <br />      /* 关闭动态SQL语句 */ <br />      pstmt.close(); <br />    } catch (SQLException e) {} <br />  } <br />  <br />  public static void update_article (String code,String secrate_level) <br />  throws SQLException { <br />    /* 建立到数据库的缺省连?*/ <br />    Connection conn = new OracleDriver().defaultConnection(); <br />    /* 构造动态SQL语句 */ <br />    String sql = "UPDATE article SET secrate_level = ?" + <br />                  " WHERE article_code = ?"; <br />    /* 使用try ... catch语句抓取q抛Z?*/ <br />    try { <br />      /* 准备动态SQL语句 */ <br />      PreparedStatement pstmt = conn.prepareStatement(sql); <br />      /* 讄动态SQL参数?*/ <br />      pstmt.setString(1, secrate_level); <br />      pstmt.setString(2, code); <br />      pstmt.executeUpdate(); <br />      /* 关闭动态SQL语句 */ <br />      pstmt.close(); <br />    } catch (SQLException e) {} <br />  } <br />} <br />  <br />3.         配置q发行JSP <br />  <br />步骤如下Q?<br />  <br />1)        选择“Project?gt;Deploy?gt;New Profile”,此时?x)弹出如下对话框Q?<br /> <em><br /><br />  <br />2)        如上图所C,选中“Deploy Java Classes and Stored Procedure to Oracle8i”,然后单击“Next”,此时?x)弹出如下对话框Q?<br /> <em><br /><br />  <br />3)        单击“Next”,此时?x)弹出如下对话框Q?<br /> <em><br /><br />  <br />4)        单击“Next”,此时?x)显C如下对话框Q?<br /> <em><br /><br />  <br />5)        单击“Next”,此时?x)显C如下对话框Q?<br /> <em><br /><br />  <br />6)        清除“Default Database Package”框Q然后单几ZNext”,此时?x)显C如下对话框Q?<br /> <em><br /><br />  <br />7)        单击“New”创建数据库q接Q此时会(x)弹出如下对话框:(x) <br /> <em><br /><br />  <br />该对话框用于配置数据库连接信息,按照你的数据库设|来配置相应参数。完成数据库q接的配|后Q单几ZTest Connection”测试配|是否正。如果配|不正确Q则修改配置参数?<br />  <br />8)        单击“OK”,此时?x)弹出如下对话框Q?<br /> <em><br /><br />  <br />在该对话框中昄了相应的数据库连接信息?<br />  <br />9)        单击“Next”,此时?x)弹出如下对话框Q?<br /> <em><br /><br />  <br />10)     单击“Finish”,此时?x)弹出如下对话框Q?<br /> <em><br /><br />  <br />11)     单击“No”退出配|,然后在主H口中选中配置文g“Profile1.prf”,单击鼠标右键Q此时会(x)昄如下弹出菜单Q?<br /> <em><br /><br />  <br />12)     从弹单中选择“Properties”,此时?x)显C如下对话框Q?<br /> <em><br /><br />  <br />13)     选择“Methods”页Q此时的对话框如下所C:(x) <br /> <em><br /><br />  <br />14)     如上图所C,选中Publish下的所有单选框Q然后单几ZDone”,此时?x)显C如下对话框Q?<br /> <em><br /><br />  <br />15)     单击“Yes”,?x)开始配|和发行JSPQƈ最l显C如下界面:(x) <br /> <em><br /><br />  <br />16)     单击“Done”,此时?x)显C如下信息框Q?<br /> <em><br /><br />  <br />17)     单击“OK”,q样我们完成了配置和发行JSP的全部过E了。然后,我们可以调用JSP完成相应d了?<br />  <br />4.         调用JSP <br />  <br />在创ZZJava的函数和q程之后Q就可以调用q些函数和过E了。方法如下:(x) <br />  <br /><em><br /><em><br /><br /><em><br /><em><em><br /></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></em></div><img src ="http://www.tkk7.com/faithwind/aggbug/63908.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/faithwind/" target="_blank">黑咖?/a> 2006-08-16 15:18 <a href="http://www.tkk7.com/faithwind/archive/2006/08/16/63908.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle开发h?JAVA存储q程http://www.tkk7.com/faithwind/archive/2006/08/16/63859.html黑咖?/dc:creator>黑咖?/author>Wed, 16 Aug 2006 03:55:00 GMThttp://www.tkk7.com/faithwind/archive/2006/08/16/63859.htmlhttp://www.tkk7.com/faithwind/comments/63859.htmlhttp://www.tkk7.com/faithwind/archive/2006/08/16/63859.html#Feedback0http://www.tkk7.com/faithwind/comments/commentRss/63859.htmlhttp://www.tkk7.com/faithwind/services/trackbacks/63859.html利用Java存储q程化数据库操作

作者:(x)Kuassi Mensah

利用Java存储q程沟通SQL、XML、Java、J2EE和W(xu)eb服务?

存储q程Qstored procedureQ允许将q行于数据库层中的持久性逻辑与运行于中间层中的商务逻辑有效地分d来。这U分d以降低整个应用程序的复杂性,q提供其重用性、安全性、性能和可伸羃性?

但是Q妨存储过E广泛采用的一个主要障是不同数据库厂商用各U专有的、且依赖于数据库的实现语a。用基于Java的存储过E可以解册一问题。Oracle已经实现了ANSI标准Q这些标准规定了从SQL中将静态JavaҎ(gu)作ؓ(f)q程或函数进行调用的能力。这U实现被单地UC"Java存储q程"?/p>

在本文中Q你了解基于Java的存储过E如何帮助简化商务逻辑、提高其性能Qƈ扩展数据库的功能。本文将介绍Oracle如何在数据库内启用基于Java的存储过E。还?x)介lJava存储q程如何讉K数据Q以?qing)如何创建基本Java存储q程?

选择PL/SQLq是Java

在考虑Oracle存储q程Ӟ你可能会(x)惛_PL/SQL。不q,从Oracle8i开始,Oracle已经在数据库中支持JavaQ从而ؓ(f)存储q程提供了不同于PL/SQL的开攑ּ和可UL的方法。我可以听到"$64 000问题"Q?我如何在PL/SQL和Java之间做出选择Q我是否应当忘记已经学习(fn)的所有PL/SQL相关知识Q而变Z个Java天地的新手?"

两种语言都适用于数据库~程Q都有自q优点和弱炏V在军_选择哪一U语aӞ可以参考下面根据经验得出的通用规则Q?


对于要求与SQLq行无缝集成的数据库中心来说则逻辑使用PL/SQLQ从而完成对数据库对象、类型和Ҏ(gu)的讉K?


Z与数据库的无x考虑Ӟ可以选择Java作ؓ(f)开攑ּ的语a来取代PL/SQLQ同时也Z集成和沟通SQL、XML、J2EE和W(xu)eb服务{各个领域?
OralceJVM使得Java可以q行在数据库?/p>

从Oracle8i版本1QOralce8.1.5Q开始,Oracle便提供紧密集成的Java虚拟机(JVMQ,JVM支持Oralce的数据库?x)话期结构。Q何数据库对话期都可以在第一Java代码调用时启动一个虚拟上专用的JVMQ后l的用户可以使用q一已经存在的支持Java的会(x)话期。事实上Q所有会(x)话共享同一JVM代码q保?仅静?的私有状态,而垃圑ֈ攉在单个对话期I间内,从而ؓ(f)各个Java对话期提供了和SQL操作相同的对话期隔离和数据完整性能力。这里,不需要ؓ(f)了数据完整性而进行单独的Java支持的过E。这一Z对话期的l构提供了较?yu)的内存占用率,qOracleJVMh与Oracle数据库一L(fng)U性SMP可׾~性?

创徏Java存储q程

要将JavaҎ(gu)转换为Java存储q程需要几个步骤,包括Q用loadjava实用E序Javacd载到数据库中Q利用调用规范(Call SpecQ发布JavaҎ(gu)Q将JavaҎ(gu)、参数类型和q回cd映射到其SQL的对应部分。下面部分说明如何完成这些步骤?

我将使用一个简单的Helloc,它有一个方法Hello.world()Q返回字W串"Hello world"Q?/p>


public class Hello { public static String world () { return "Hello world"; } }
Loadjava 实用E序

Loadjava是加载Java源文件、JavacL件和Java资源文g的实用程序,它可以用来验证字节码QƈJavacdJAR文g布置到数据库中。它既可以通过命o(h)行调用,也可以通过包含于DBMS_JAVAcM的loadjava()Ҏ(gu)调用。ؓ(f)了加载我们的Hello.classCZQ输入:(x)


loadjava -user scott/tiger Hello.class

从Oracle9i版本2开始,loadjava允许通过为包含在被处理的cM的方法创建相应的Call Specs来自动将Javacd布ؓ(f)存储q程。Oracle为开发、测试、调试和布置Java存储q程提供了Oracle9i JDeveloper?/p>

The Resolver Spec

ZJDK的JVM在列于CLASSPATH中的目录中查扄引用Qƈ对其q行解析。因为Oracle数据库类存在于数据库模式中,所以OracleJVM利用数据库解析器QresolverQ通过列于Resolver Spec中的模式查找q解析类引用。与CLASSPATH不同QCLASSPATH可以应用于所有的c)QResover SpecҎ(gu)每类的情况进行应用。缺省解析器首先在加载类的模式中搜寻c,然后在公共同义词Qpublic synonymsQ中搜烦?


 loadjava -resolve <myclass>
你可能需要指定不同的解析器,也可以在使用loadjava时强制进行解析,从而在布置时确定可能在以后q行时发生的M问题?


loadjava -resolve -resolver "((* SCOTT) (foo/bar/* OTHERS) (* PUBLIC))"
Call Spec和存储过E调?

Z从SQL中调用JavaҎ(gu)Q以?qing)从PL/SQl和JDBC中调用)Q必首先通过Call Spec发布公共静态方法,它ؓ(f)SQL定义Ҏ(gu)采用的参C?qing)返回的SQLcd?/p>

在我们的例子中,我们利用SQLQPlusq接到数据库Qƈ为Hello.world()定义一个顶UCall SpecQ?


SQL> connect scott/tiger SQL> create or replace function helloworld return VARCHAR2 as language java name 'Hello.world () return java.lang.String'; / Function created.
可以像下面这栯用Java存储q程Q?/p>


SQL> variable myString varchar2[20]; SQL> call helloworld() into :myString; Call completed. SQL> print myString; MYSTRING --------------------- Hello world
Java存储q程可以通过其Call Spec从以下各中q行调用QSQL DML语句QINSERT, UPDATE、DELETE、SELECT、CALL、EXPLAIN PLAN、LOCK TABLE和MERGEQ、PL/SQL块、子E序、程序包以及(qing)数据库触发器。Call Spec的美妙之处在于存储过E实现可以从PL/SQL转换为JavaQ反之亦可,q一点对于请求者是透明的?/p>

Call Spec从实现语a中(PL/SQL或JavaQ中抽象用界面,因而之能够在原有应用E序和新的基于JavaQJ2EE的应用程序之间共享商务逻辑。但是,在从Java客户E序调用在数据库ȝ的JavacLQ你可能不希望通过PL/SQL包装?wrapper)。在以后的版本中QOracle计划提供一U机Ӟ它可以开发h员略qCall Spec?/p>

高数据讉K控制

Java存储q程可用于控制和限制对Oracle数据的访问,其方法是只允许用户通过存储q程理数据Q而存储过E在其调用者的权限内执行,而不能对表本w进行访问。例如,你可以在特定旉内禁止更新数据,或者ɽ理者只h查询工资数据的权利,而不能进行更斎ͼ或者记录所有的讉Kq知某一安全机构?/p>

原有应用E序与J2EE应用E序之间的数据逻辑׃n

因ؓ(f)原有应用E序与J2EE应用E序都通过Call Spec调用存储q程Q所以J2EE和非J2EE应用E序可以׃n相同的数据逻辑。由于有了Call SpecQ所以不用考虑所用的是何U实现语aQ无论是PL/SQLq是JavaQ,该数据逻辑都可以共享?

为BMP实体Bean自动生成d键字

在对EJB实体bean应用BMPӞ一个bean实例可以p动生成的与新插入的数据相兌的主关键字惟一定Q它是ejbCreate()的返回倹{可以利用一个插入相应数据的存储q程在一个数据库操作中检索ejbCeater()中的该|q检索或计算d键字。作为另一U方法,也可以利用JDBC3.0的RETURN_GENERATED_KEYSҎ(gu),以一个SQL语句插入该数据ƈ索相应的关键字(或ROWIDQ。但是,存储q程Ҏ(gu)在各个JDBC驱动器版本和数据库之间更具可UL性?/p>

可以用以下三个步骤实现这一模式Q?br />>
创徏一个Java存储q程Q在公共GenPkcM定义一个公共静态JavaҎ(gu)insertAccount()。此Ҏ(gu)插入数据、计惟一的关键字Q通过发出一个序列号Q,q返回计出的关键字作ؓ(f)d键字?


定义Call Spec


CREATE OR REPLACE PROCEDURE insertAccount(owner IN varchar, bal IN number, newid OUT number) AS LANGUAGE JAVA NAME 'GenPK.insertAccount( java.lang.String [])'; /


在ejbCreate()内调用存储过E?


Public AccountPK ejbCreate(String ownerName, int balance) throws CreateException { try { CallableStatement call = conn.prepareCall{ "{call insertAccount(?, ?, ?)}"}; return new AccountPK(accountID); } }
为CMP实体Bean定制d键字查找?

查找器方法(F(tun)inder methodsQ用于检索已存在的EJB实体bean实例。主关键字查扑֙使你能够索惟一标识的EJB实例。对于CMP实体beanQEJB容器Ҏ(gu)声明描述Q自动生成主关键字查扑֙findByPrimaryKey()Ҏ(gu)。但是,在某些情况下Q可能需要更多的控制Q例如可能需要专门的查找器,如findByStoredProcKey()。在q些情况下,你可以结合用Java存储q程和对象关pLӞ如Oracle9i应用服务器[Oracle9iAS] TopLinkQ来实现定制的主关键字查扑֙Ҏ(gu)。在EJB查找器定义ؓ(f)REDIRECT或NAMED查找器后QTopLink生成一个SQL查询用于索bean实例?/p>

数据驱动的EJB调用

在数据驱动体pȝ构中Q商务逻辑调用可以作ؓ(f)数据库操作(如插入、更新或删除Q的l果来触发。实现该数据逻辑的Java存储q程可以被声明ؓ(f)数据库触发器Q用以调用运行于中间层J2EE应用服务器的EJB。EJB的调用既可以采用J2EE1.3兼容的服务器通过Interoperable Inter-ORB ProtocolQIIOPQ标准远E方法调用(remote method invocationQRMIQ实玎ͼ也可以通过销售商特定的传输协议(如Oracle9iAS/Oc4J的ORMIQ或者通过BEA WebLogic的T3Q用RMI来实现。每个应用服务器提供商在提供ZIIOP的RMIQ以提供互操作性的同时Q都有其自己优化的协议。Oracle9iAS同时支持ZIIOP的RMI调用和基于ORMI协议的RMI调用?

数据驱动的消息传?

Oracle9i数据库嵌入了Advanced QueuingQAQQ高U排队)Q它是一U集成的、稳定、可靠、安全、可扩展和事务处理式的消息排队框架。Oracle通过标准的Java消息传送系l(Java Messaging SystemQJMSQAPI为Java开发h员提供AQ功能。Java存储q程可以通过JMS接口调用AQ操作Q从而能够实现快速、在?x)话期内、可扩展的、数据驱动的消息传送?

Java存储q程可以利用JMS调用AQ操作。可以用以下4个步骤实现这一模式Q?/p>


创徏q启动JMS QueueQؓ(f)此,可以以下一些操作嵌入SQL脚本内)Q?


execute dbms_aqadm.create_queue_table(queue_table => 'queue1', queue_payload_type => 'SYS.AQ$_JMS_TEXT_MESSAGE', comment => 'a test queue', multiple_consumers => false, compatible => '8.1.0'); execute dbms_aqadm.create_queue( queue_name => 'queue1', queue_table => 'queue1' ); execute dbms_aqadm.start_queue(queue_name => 'queue1');


创徏Java存储q程Q代码摘录如下)Q?


public static void runTest(String msgBody) { try { // get database connection ora_drv = new OracleDriver(); db_conn = ora_drv.defaultConnection(); // setup sender (cf online code sample) .. // create message s_msg = s_session.createTextMessage(msgBody); // send message sender.send(s_msg); s_session.commit(); // receive message r_msg = (TextMessage) receiver.receive(); r_session.commit(); // output message text String body = r_msg.getText(); System.out.println("message was '"+body+"'"); ..} }


创徏Call SpecQ?


create or replace procedure jmsproc (t1 IN VARCHAR) as language java name 'jmsSample.main (java.lang.String[])'; /


调用存储q程Q?


call jmsproc('hello');
数据库辅助的Web发布Q缓冲失效)

各应用程序结构必面对的一个共同问题是如果可靠地将数据库信息进行缓存,以提高整个系l的性能。JCACHE是一U即公布的标准规范QJSR 107Q,它可以解册一问题。它说明了一U对Java对象临时在内存中q行~存的方法,包括对象的创建、共享访问、假脱机QspoolingQ、失效、各JVM的一致性等。它可被用于~存JSP内最l常d的数据,如品目录和h列表。利用JCACHEQ多数查询的反应旉?x)因为有~存的数据而加快(内部试表明反应旉大约?5倍)?

Z跟踪原始数据的所有变化,q刷新已~存的数据,Java存储q程?x)作Z个触发器被附加在一个表上。这个表的Q何变化都?x)自动调用该存储q程Q后者再调出一个已定义的JSP使JCACHE对象失效Q该对象其状态映到该数据库表。在失效Ӟ紧跟其后的查询将强制~存器根据数据库的数据进行更新?下面的步?
阅读关于Java存储q程的更多信?br />本文摘自白皮?释放Java存储q程的能量(Unleash the Power of Java Stored ProceduresQ?Q可以在以下位置扑ֈ该白皮书Q?br />otn.oracle.com/tech/java/java_db/pdf/
OW_30820_JAVA_STORED_PROC_paper.PDF

Oracle9i数据库第2版中的新PL/SQLҎ(gu)?br />otn.oracle.com/tech/pl_sql/pdf/
Paper_30720_Doc.pdf

Resolver Spec
otn.oracle.com/docs/products/oracle9i/
doc_library/release2/java.920/a96659.pdf

OracleJVM and Java 2 Security
otn.oracle.com/docs/products/oracle9i/
doc_library/release2/java.920/a96656.pdf

下蝲代码
l习(fn)本文中的代码CZQ?
otn.oracle.com/sample_code/tech/
java/jsp/Oracle9iJSPSamples.html

了解作ؓ(f)Web服务的存储过E?br />otn.oracle.com/tech/webservices
 


扩展数据库的功能

在数据库中直接运行Java代码的一个妙处就在于要实现新的功能,只需要简单地加蝲代码或库Qƈ利用Call Spec制作可用于SQL、PL/SQL、Java、J2EE和非Java API的进入点Q公共静态方法)。Oracle9i数据库用户可以很Ҏ(gu)地扩展数据库

功能。Oracle自己利用q种能力来获得新的应用程序和工具包,如XML Developer KitsQXDKsQ?

沟通SQL、PL/SQL、Java、J2EE?NET和XML

Oracle XDK是用Java~写的,q将其公共方法可用作Java存储q程Q从而扩展了数据库的XML可编E能力。SQL、PL/SQL、Java、J2EE和非JavaQ?NETQ商务逻辑都能够访问XML分析器、XSLT处理器、XPath引擎和XML SQL UtilityQXSUQ?

XML分析器可以通过xmlparser和xmldom包进行访问。XSU是一UJava实用E序Q它可以由SQL查询l果或JDBC ResultSet生成XML文档QƈXML文档中的数据写入数据库表或视图中。利用XSUQXML输出可以输出为文本、Dom?wi)或DTS。通过dbms_xmlquery和dbms_xmlsave包,XSU卛_用于PL/SQL?

l论

Oracle数据库与Java VM的集成可以创建可UL、功能强大和与数据库无关的数据逻辑和持l性逻辑Qpersistence logicQ。运行于中间层的商务逻辑和运行于数据库层的数据逻辑之间的分L高了应用E序的可扩展性、灵zL和可维护性?/p>



]]>
存储q程http://www.tkk7.com/faithwind/archive/2006/08/16/63858.html黑咖?/dc:creator>黑咖?/author>Wed, 16 Aug 2006 03:53:00 GMThttp://www.tkk7.com/faithwind/archive/2006/08/16/63858.htmlhttp://www.tkk7.com/faithwind/comments/63858.htmlhttp://www.tkk7.com/faithwind/archive/2006/08/16/63858.html#Feedback0http://www.tkk7.com/faithwind/comments/commentRss/63858.htmlhttp://www.tkk7.com/faithwind/services/trackbacks/63858.html什么是存储q程呢?

定义Q?/p>

      常用的或很复杂的工作,预先用SQL语句写好q用一个指定的名称存储h, 那么以后要叫数据?/a>提供与已定义好的存储q程的功能相同的服务?只需调用execute,卛_自动完成命o(h)?/p>

讲到q里,可能有h要问Q这么说存储q程是一堆SQL语句而已啊?

Microsoft公司Z么还要添加这个技术呢?

那么存储q程与一般的SQL语句有什么区别呢?

存储q程的优点:(x)

1.存储q程只在创造时q行~译Q以后每ơ执行存储过E都不需再重新编译,而一般SQL语句每执行一ơ?q译一?所以用存储过E可提高数据库执行速度?/p>

2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,DeleteӞQ可此复杂操作用存储过E封装v来与数据库提供的事务处理l合一起用?/p>

3.存储q程可以重复使用,可减数据库开发h员的工作?/p>

4.安全性高,可设定只有某此用hhҎ(gu)定存储过E的使用?/p>

存储q程的种c:(x)

     1.pȝ存储q程Q以sp_开?用来q行pȝ的各设?取得信息.相关理工作,

                               ?sp_help是取得指定对象的相关信?br />  2.扩展存储q程   以XP_开?用来调用操作pȝ提供的功?/p>

                              exec master..xp_cmdshell 'ping 10.8.16.1'

   3.用户自定义的存储q程,q是我们所指的存储q程

   常用格式

   Create procedure procedue_name

   [@parameter data_type][output]

   [with]{recompile|encryption}

   as

        sql_statement

解释: 

outputQ表C此参数是可传回?/p>

with {recompile|encryption}

recompile:表示每次执行此存储过E时都重新编译一?/p>

encryption:所创徏的存储过E的内容?x)被加?/p>

?

   表book的内容如?/p>

   ~号    书名                           h

   001      C语言入门                   $30

   002      PowerBuilder报表开发?$52

 实例1:查询表Book的内容的存储q程

   create proc query_book

      as

      select * from book

   go

   exec query_book

 实例2:加入一W记录到表book,q查询此表中所有书c的总金?/p>

   Create proc insert_book

   @param1 char(10),@param2 varchar(20),@param3 money,@param4 money output

   with encryption  ---------加密

   as

   insert book(~号,书名Qh(hun)| Values(@param1,@param2,@param3)
   select @param4=sum(h) from book
  go

  执行例子:
  declare @total_price money
  exec insert_book '003','Delphi 控g开发指?,$100,@total_price
  print '总金额ؓ(f)'+convert(varchar,@total_price)
  go
存储q程?U传回?
   1.以Return传回整数
   2.以output格式传回参数
   3.Recordset
传回值的区别:
       output和return都可在批ơ程式中用变量接?而recordset则传回到执行Ҏ(gu)的客L(fng)中?

实例3Q设有两个表为Product,Order,其表内容如下Q?br />      Product
           产品~号       产品名称    客户订数    
            001             钢笔         30        
            002             毛笔         50        
            003             铅笔         100       
      Order 
           产品~号         客户名   ?客户订金
            001              南山区    ?$30
            002              |湖区    ?$50
            003              宝安区    ?$4
请实现按~号接条?两个表q接成一个(f)时表,该表只含~号.产品?客户?订金.总金?
总金?订金*订数,临时表放在存储过E中

代码如下:
     Create proc temp_sale
     as
       select a.产品~号,a.产品名称,b.客户?b.客户订金,a.客户订数* b.客户订金 as总金?br />       into #temptable from Product a inner join Order b on a.产品~号=b.产品~号
    if  @@error=0
       print 'Good'
    else
       print 'Fail'
     go



]]>
文g操作代码http://www.tkk7.com/faithwind/archive/2006/07/27/60313.html黑咖?/dc:creator>黑咖?/author>Thu, 27 Jul 2006 05:03:00 GMThttp://www.tkk7.com/faithwind/archive/2006/07/27/60313.htmlhttp://www.tkk7.com/faithwind/comments/60313.htmlhttp://www.tkk7.com/faithwind/archive/2006/07/27/60313.html#Feedback0http://www.tkk7.com/faithwind/comments/commentRss/60313.htmlhttp://www.tkk7.com/faithwind/services/trackbacks/60313.html阅读全文

]]>
Java文g操作http://www.tkk7.com/faithwind/archive/2006/07/27/60311.html黑咖?/dc:creator>黑咖?/author>Thu, 27 Jul 2006 05:00:00 GMThttp://www.tkk7.com/faithwind/archive/2006/07/27/60311.htmlhttp://www.tkk7.com/faithwind/comments/60311.htmlhttp://www.tkk7.com/faithwind/archive/2006/07/27/60311.html#Feedback0http://www.tkk7.com/faithwind/comments/commentRss/60311.htmlhttp://www.tkk7.com/faithwind/services/trackbacks/60311.html<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>文g的徏立、检查与删除</title>
</head>
<body>
<%
String path=request.getRealPath("");
//out.println(path);
File f=new File(path,"File.txt");
//out.println(f);
//out.println(f.exists());

if(f.exists()){//查File.txt是否存在
f.delete();//删除File.txt文g
out.println(path + "\\File.txt 存在Q已删除?);
}else{
f.createNewFile();//在当前目录下建立一个名为File.txt的文?
out.println(path + "\\File.txt 不存在,已徏立?);//输出目前所在的目录路径
}
%>

  目录的徏?查与删除

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>目录的徏?查与删除</title>
</head>
<body>
<%
String path=request.getRealPath("");
path=path + "\\Sub";//要建立的目录\?
File d=new File(path);//建立代表Sub目录的File对象Qƈ得到它的一个引?
if(d.exists()){//查Sub目录是否存在
d.delete();
out.println("Sub目录存在Q已删除");
}else{
d.mkdir();//建立Sub目录
out.println("Sub目录不存在,已徏?);
}
%>
</body>
</html>

  如何在JSP中处理虚拟目?

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>JSP中如何处理虚拟目?lt;/title>
</head>
<body>
取得虚拟目录对应的磁盘\?lt;br>
Web站点ȝ录的位置?lt;font color=#ff0000><%=request.getRealPath("/")%></font><br>
JSP|页所在的目录位置<font color=#ff0000><%=request.getRealPath("./")%></font><br>
JSP|页所在目录上一层目录的位置<font color=#ff0000><%=request.getRealPath("../")%></font><br>
</body>
</html>

文g属性的取得

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.Date,java.io.*"%>
<html>
<head>
<title>文g属性的取得</title>
</head>
<body>
<%
String path=request.getRealPath("/");
File f=new File(path,"ReadData.txt");
if(f.exists()){
%>
<%=f.getName()%>的属性如下:(x)<br><br>
文g长度为:(x)<%=f.length()%>
<%=f.isFile()?"是文?:"不是文g"%><br>
<%=f.isDirectory()?"是目?:"不是目录"%><br>
<%=f.canRead()?"可读?:"不可d"%><br>
<%=f.canWrite()?"可写?:"不可写入"%><br>
<%=f.isHidden()?"是隐藏文?:"不是隐藏文g"%><br>
文g的最后修Ҏ(gu)期ؓ(f)Q?lt;%=new Date(f.lastModified())%><br>
<%
}else{
f.createNewFile();//在当前目录下建立一个名为ReaData.txt的文?
%>
<%=f.getName()%>的属性如下:(x)<br><br>
文g长度为:(x)<%=f.length()%>
<%=f.isFile()?"是文?:"不是文g"%><br>
<%=f.isDirectory()?"是目?:"不是目录"%><br>
<%=f.canRead()?"可读?:"不可d"%><br>
<%=f.canWrite()?"可写?:"不可写入"%><br>
<%=f.isHidden()?"是隐藏文?:"不是隐藏文g"%><br>
文g的最后修Ҏ(gu)期ؓ(f)Q?lt;%=new Date(f.lastModified())%><br>
<%
}
%>
</body>
</html>

  取出目录中文件的Ҏ(gu)

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>取出目录中文件的Ҏ(gu)--列出目录中的文g</title>
</head>
<body>
<%
String path=request.getRealPath("/");
File d=new File(path);//建立当前目录中文件的File对象
File list[]=d.listFiles();//取得代表目录中所有文件的File对象数组
out.println("<font color=#ff0000>" + path + "目录下的文gQ?lt;/font><br>");
for(int i=0;i<list.length;i++){
if(list<I>.isFile()){
out.println(list<I>.getName() + "<br>");
}
}
out.println("<br><font color=#ff0000>" + path + "目录下的目录Q?lt;/font><br>");
for(int i=0;i<list.length;i++){
if(list<I>.isDirectory()){
out.println(list<I>.getName() + "<br>");
}
}
%>
</body>
</html>

判断是否为空白文?

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>判断是否为空白文?lt;/title>
</head>
<body>
<%
String path=request.getRealPath("/");
out.println(path);
FileReader fr=new FileReader(path + "\\AtEnd.txt");//建立FileReader对象Qƈ实例化ؓ(f)fr
//对FileReadercȝ成的对象使用read()Ҏ(gu)Q可以从字符中d下一个字W?
if(fr.read()==-1)//判断是否已读到文件的l尾
{
out.print("AtEnd.txt文g中没有数?lt;br>");
}else{
out.println("AtEnd.txt文g中有数据");
}
fr.close();
%>
</body>
</html>
    <B>d所有的文g数据</B>
<ccid_nobr>
<table width="400" border="1" cellspacing="0" cellpadding="2"
bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">
<tr>
<td bgcolor="e6e6e6" class="code" style="font-size:9pt">
<pre><ccid_code> <%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*,java.lang.*"%>
<html>
<head>
<title>d所有的文g数据</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileReader fr=new FileReader(path + "\\ReadData.txt");
//关键在于dq程中,要判断所d的字W是否已l到了文件的末尾Q?
q且q个字符是不是文件中的断行符Q即判断该字W值是否ؓ(f)13?
int c=fr.read();//从文件中d一个字W?
//判断是否已读到文件结?
while(c!=-1){
out.print((char)c);//输出d的数?
c=fr.read();//从文件中l箋d数据
if(c==13){//判断是否为断行字W?
out.print("<br>");//输出分行标签
fr.skip(1);//略过一个字W?
//c=fr.read();//d一个字W?
}
}
fr.close();
%>
</body>
</html>

  一行一行读取数?

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>文gd</title>
</head>
<body>
<%
String path=request.getRealPath("");//取得当前目录的\?
FileReader fr=new FileReader(path + "\\file\\inc\\t.txt");//建立FileReader对象Qƈ实例化ؓ(f)fr
BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象Qƈ实例化ؓ(f)br
String Line=br.readLine();//从文件读取一行字W串
//判断d到的字符串是否不为空
while(Line!=null){
out.println(Line + "<br>");//输出从文件中d的数?
Line=br.readLine();//从文件中l箋d一行数?
}
br.close();//关闭BufferedReader对象
fr.close();//关闭文g
%>
</body>
</html>
略过文g中的字符不读?

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>略过字节不读?lt;/title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileReader fr=new FileReader(path + "\\ReadData.txt");
fr.skip(2);//跌2个字?
int c=fr.read();//d一个字?
while(c!=-1){
out.print((char)c);
c=fr.read();
}
fr.close();
%>
</body>
</html>

  数据写入文?

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>数据写入文?lt;/title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileWriter fw=new FileWriter(path + "\\WriteData.txt");//建立FileWriter对象Qƈ实例化fw
//字W串写入文g
fw.write("大家好!");
fw.write("本书是《JSP~程技巧?);
fw.write("请多多指教!");
fw.write("email:stride@sina.com");
fw.close();

FileReader fr=new FileReader(path + "\\WriteData.txt");
BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象Qƈ实例化ؓ(f)br
String Line=br.readLine();
//d一行数?
out.println(Line + "<br>");
br.close();//关闭BufferedReader对象
fr.close();
%>
</body>
</html>

  写入文件的数据分行

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>写入文件的数据分行</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileWriter fw=new FileWriter(path + "\\WriteData.txt");
BufferedWriter bw=new BufferedWriter(fw);
bw.write("大家好!");
bw.write("本书是《JSP~程技巧》?);
bw.newLine();//断行
bw.write("请多多指教!");
bw.newLine();//断行
bw.write("email: stride@sina.com");
bw.flush();//数据更新至文g
fw.close();//关闭文g?
out.println("写入文g内容为:(x)<br>");
FileReader fr=new FileReader(path + "\\WriteData.txt");
BufferedReader br=new BufferedReader(fr);
String Line=br.readLine();//d一行数?
while(Line!=null){
out.println(Line + "<br>");
Line=br.readLine();
}
fr.close();
%>
</body>
</html>

  如何数据追加写入到文g

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>写入文件的数据分行</title>
</head>
<body>
<%
String path=request.getRealPath(".");
RandomAccessFile rf=new RandomAccessFile(path + "\\WriteData.txt","rw");
//定义一个类RandomAccessFile的对象,q实例化
rf.seek(rf.length());//指针移动到文g末尾
rf.writeBytes("\nAppend a line to the file!");
rf.close();//关闭文g?
out.println("写入文g内容为:(x)<br>");
FileReader fr=new FileReader(path + "\\WriteData.txt");
BufferedReader br=new BufferedReader(fr);//d文g的BufferedRead对象
String Line=br.readLine();
while(Line!=null){
out.println(Line + "<br>");
Line=br.readLine();
}
fr.close();//关闭文g
%>
</body>
</html></I></I></I></I>



]]>
如何获取虚拟目录http://www.tkk7.com/faithwind/archive/2006/07/27/60309.html黑咖?/dc:creator>黑咖?/author>Thu, 27 Jul 2006 04:58:00 GMThttp://www.tkk7.com/faithwind/archive/2006/07/27/60309.htmlhttp://www.tkk7.com/faithwind/comments/60309.htmlhttp://www.tkk7.com/faithwind/archive/2006/07/27/60309.html#Feedback0http://www.tkk7.com/faithwind/comments/commentRss/60309.htmlhttp://www.tkk7.com/faithwind/services/trackbacks/60309.html
Web站点ȝ录的位置?lt;%=request.getRealPath("/")%
JSP|页所在的目录位置<%=request.getRealPath("./")%>
JSP|页所在目录上一层目录的位置<%=request.getRealPath("../")%>

]]>
初学者如何开发出一个高质量的J2EEpȝhttp://www.tkk7.com/faithwind/archive/2006/07/20/59244.html黑咖?/dc:creator>黑咖?/author>Thu, 20 Jul 2006 09:23:00 GMThttp://www.tkk7.com/faithwind/archive/2006/07/20/59244.htmlhttp://www.tkk7.com/faithwind/comments/59244.htmlhttp://www.tkk7.com/faithwind/archive/2006/07/20/59244.html#Feedback0http://www.tkk7.com/faithwind/comments/commentRss/59244.htmlhttp://www.tkk7.com/faithwind/services/trackbacks/59244.html
J2EE学习(fn)者越来越多,J2EE本n技术不断在发展Q涌现出各种概念Q本文章试图从一U容易理解的角度对这些概念向初学者进行解释,以便掌握学习(fn)J2EE学习(fn)方向?

  首先我们需要知道Java和J2EE是两个不同概念,Java不只是指一U语aQ已l代表与微Y不同的另外一个巨大阵营,所以Java有时是指一UY件系l的派Q当然目前主要是.NET和Java两大L体系?/p>

  J2EE可以说指Java在数据库信息pȝ上实玎ͼ数据库信息系l从早期的dBase、到Delphi/VB{C/Sl构Q发展到B/SQBrowser览?Server服务器)l构Q而J2EE主要是指B/Sl构的实现?/p>

  J2EE又是一U框架和标准Q框架类似API、库的概念,但是要超出它们。如果需要详l了解框Ӟ可先?a target="_blank">设计模式开始学?fn)?/p>

  J2EE是一个虚的大的概念,J2EE标准主要有三U子技术标准:(x)WEB技术、EJB技术和JMSQ谈到J2EE应该说最l要落实到这三个子概念上?/p>

  q三U技术的每个技术在应用旉涉及(qing)两个部分Q容器部分和应用部分QW(xu)eb容器也是指Jsp/Servlet容器Q你如果要开发一个Web应用Q无论是~译或运行,都必要有Jsp/Servlet库或API支持Q除了JDK/J2SE以外Q?/p>

  Web技术中除了Jsp/Servlet技术外Q还需要JavaBeans或Java Class实现一些功能或者包装携带数据,所以Web技术最初裸体简UCؓ(f)Jsp/Servlet+JavaBeanspȝ?/p>

  谈到JavaBeans技术,涉?qing)到lg构g技术(componentQ,q是Java的核心基部分Q很多Y件设计概念(设计模式Q都是通过JavaBeans实现的?/p>

  JavaBeans不属于J2EE概念范畴中,如果一个JavaBeans对象被Web技术(也就是Jsp/ServletQ调用,那么JavaBeansp行在J2EE的Web容器中;如果它被EJB调用Q它?yu)p行在EJB容器中?/p>

  EJBQ企业JavaBeansQ是普通JavaBeans的一U提升和规范Q因Z业信息系l开发中需要一个可伸羃的性能和事务、安全机Ӟq样能保证企业系l^滑发展,而不是发展到一U规模重新更换一套Y件系l?/p>

  xQJavaBeanslg发展到EJB后,q不是说以前的那UJavaBeans形式消׃Q这p然Ş成了两种JavaBeans技术:(x)EJB和POJOQPOJO完全不同于EJB概念Q指的是普通JavaBeansQ而且q个JavaBeans不依附某U框Ӟ或者干脆可以说Q这个JavaBeans是你个应用程序单独开发创建的?/p>

  J2EE应用pȝ开发工h很多Q如JBuilder、Eclipse{,q些IDE首先是Java开发工P也就是说Q它们首要基本功能是可以开发出JavaBeans或Java classQ但是如果要开发出J2EEpȝQ就要落实到要么是Web技术或EJB技术,那么有可能要一些专门模块功?如eclipse需要lomboz插g)Q最重要的是Q因为J2EEpȝ区分为容器和应用两个部分Q所以,在Q何开发工具中开发J2EE都需要指定J2EE容器?/p>

  J2EE容器分ؓ(f)WEB容器和EJB容器QTomcat/Resin是Web容器QJBoss是EJB容器+Web容器{,其中Web容器直接使用Tomcat实现的。所以你开发的Web应用E序可以在上面两U容器运行,而你开发的Web+EJB应用则只可以在JBoss服务器上q行Q商业品Websphere/Weblogic{和JBoss属于同一U性质?/p>

  J2EE容器也称为J2EE服务器,大部分时它们概念是一致的?/p>

  如果你的J2EE应用pȝ的数据库q接是通过JNDI获得Q也是说是从容器中获得Q那么你的J2EE应用pȝ基本与数据库无关Q如果你在你的J2EE应用pȝ耦合了数据库JDBC驱动的配|,那么你的J2EE应用pȝ有数据库概念色彩,作ؓ(f)一个成熟需要推q的J2EE应用pȝQ不推荐和具体数据库耦合Q当然这其中如何保证J2EE应用pȝq行性能又是体现你的设计水^了?/p>

  衡量J2EE应用pȝ设计开发水q高低的标准是Q解耦性;你的应用pȝ各个功能是否能够dqQ是否不怺依赖Q也只有q样Q才能体现可l护性、可拓展性的软g设计目标?/p>

  Z辑ֈq个目的Q诞生各U框架概念,J2EE框架标准一个系l划分ؓ(f)WEB和EJB主要部分Q当然我们有时不是以q个具体技术区分,而是从设计上抽象现层、服务层和持久层Q这三个层次从一个高度将J2EE分离开来,实现解耦目的?/p>

  因此Q我们实际编E中Q也要将自己的功能向q三个层ơ上靠,做到大方向清楚,泾渭分明Q但是没有技术上U束限制要做到这Ҏ(gu)很不Ҏ(gu)的,因此我们q是必须借助J2EE具体技术来实现Q这Ӟ你可以用EJB规范实现服务层和持久层,W(xu)eb技术实现表现层Q?/p>

  EJBZ么能服务层从Jsp/Servlet手中分离出来Q因为它对JavaBeans~码有强制的U束Q现在有一U对JavaBeansq束,使用Ioc模式实现的(当然EJB 3.0也采取这U方式)Q在Ioc模式诞生前,一般都是通过工厂模式来对JavaBeansU束QŞ成一个服务层Q这也是是Jiveq样开源论坛设计原理之一?/p>

  由此Q将服务层从表现层中分离出来目前有两U可选架构选择Q管理普通JavaBeansQPOJOQ框?如Spring?a target="_blank">JdonFramework)以及(qing)理EJB的EJB框架Q因为EJB不只是框Ӟq是标准Q而标准可以扩展发展,所以,q两U区别将来是可能模糊Q被U_同一个标准了。 但是Q个为:(x)标准制定是ؓ(f)某个目的服务的,总要牺牲一些换取另外一些,所以,q两U架构会(x)长时间ƈ存?/p>

  q两U架构分歧也曄诞生一个新名词Q完全POJO的系l也UCؓ(f)轻量U系l?lightweight)Q其实这个名词本w就没有一个严格定义,更多是一个吸引h的招牌,轻量是指Ҏ(gu)学习(fn)Ҏ(gu)使用吗?按照q个定义Q其实轻量Spring{系lƈ不容易学?fn);而且EJB 3.0Q依然叫EJBQ以后的pȝ是否可称量了呢Q?/p>

  前面谈了服务层框Ӟ使用服务层框架可以将JavaBeans从Jsp/Servlet中分d来,而用表现层框架则可以将Jsp中剩余的JavaBeans完全分离Q这部分JavaBeans主要负责昄相关Q一般是通过标签库(taglibQ实玎ͼ不同框架有不同自q标签库,Struts是应用比较广泛的一U表现层框架?/p>

  q样Q表现层和服务层的分L通过两种框架辑ֈ目的Q剩余的是持久层框架了Q通过持久层的框架数据库存储从服务层中分d来是其目的,持久层框架有两种方向Q直接自q写JDBC{SQL语句Q如iBatisQ;使用O/R Mapping技术实现的Hibernate和JDO技术;当然q有EJB中的实体Bean技术?/p>

  持久层框架目前呈现百花齐放,各有优缺点的现状Q所以正如表现层框架一P目前没有一个框架被指定为标准框Ӟ当然Q表现层框架现在又出来了一个JSFQ它代表的页面组件概忉|一个新的发展方向,但是复杂的实现让人有些忘而却步?/p>

  在所有这些J2EE技术中Q虽然SUN公司发挥了很大的作用Q不qM来说Q网l上有这样一个评P(x)SUN的理论天下无敌;SUN的品用h撞墙Q对于初学者,特别是那些试N过或已l通过SUN认证的初学者,赶快摆脱SUN的阴影,立即开溜,使用开源领域的产品来实现自q应用pȝ?/p>

  最后,你的J2EE应用pȝ如果采取上面提到的表现层、服务层和持久层的框架实玎ͼ基本你也可以在无需深刻掌握设计模式的情况下开发出一个高质量的应用系l了?/p>

  q要注意的是: 开发出一个高质量的J2EEpȝq需要正的业务需求理解,那么域徏模提供了一U比较切实可行的正确理解业务需求的Ҏ(gu)Q相兌l知识可从UML角度l合理解?/p>

  当然Q如果你惌计自q行业框架Q那么第一步从设计模式开始吧Q因计模式提供你一个实现JavaBeans或类之间解耦参考实现方法,当你学会(x)了系l基本单元JavaBean或类之间解耦时Q那么系l模块之间的解耦你可能掌握,q而你可以实现行业框架的提炼了,q又是另外一个发展方向了?/p>

  以上理念可以ȝZ句话Q?br />J2EE开发三件宝: Domain ModelQ域建模Q、patternsQ模式)和frameworkQ框Ӟ?/p>

  推荐一套高质量的J2EE开源系l:(x) JPestore
  
  如果初学者没有理解,Ƣ迎l箋讨论Q大胆提Z心中的疑问?/p>

]]>
Tomcat配置技巧Top 10http://www.tkk7.com/faithwind/archive/2006/07/20/59219.html黑咖?/dc:creator>黑咖?/author>Thu, 20 Jul 2006 08:09:00 GMThttp://www.tkk7.com/faithwind/archive/2006/07/20/59219.htmlhttp://www.tkk7.com/faithwind/comments/59219.htmlhttp://www.tkk7.com/faithwind/archive/2006/07/20/59219.html#Feedback0http://www.tkk7.com/faithwind/comments/commentRss/59219.htmlhttp://www.tkk7.com/faithwind/services/trackbacks/59219.html阅读全文

]]>
JSPq接Mysql数据库攻?/title><link>http://www.tkk7.com/faithwind/archive/2006/07/20/59187.html</link><dc:creator>黑咖?/dc:creator><author>黑咖?/author><pubDate>Thu, 20 Jul 2006 06:55:00 GMT</pubDate><guid>http://www.tkk7.com/faithwind/archive/2006/07/20/59187.html</guid><wfw:comment>http://www.tkk7.com/faithwind/comments/59187.html</wfw:comment><comments>http://www.tkk7.com/faithwind/archive/2006/07/20/59187.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/faithwind/comments/commentRss/59187.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/faithwind/services/trackbacks/59187.html</trackback:ping><description><![CDATA[ <p>q箋几天安装配置和连接Mysql数据库,今天l于成功了,回想q几天,<br />真的是甜酸苦辣都有,单mysql重装了不下10ơ,而在eclipse上编写的q接数据库的E序L报错Q我都已ldown了oracal准备攑ּmysql了,不过Q.Q?br />p?sh)视剧演的那P转机L在这个时候出玎ͼ先是看到了saulzy关于mysql4.1.11版本的安装介l,接着又找C一ƾ不错的mysql 界面插gQ?br />最后在|友的帮助下把mysql的JDBC驱动配好q连通了Q一q?天,日子真不好过阿,不过q个q程中,<br />我也觉得自己学到不少东西Q呵呵,反正都撑q来了,pl箋往前走Q现在,p几天弄的ȝ一下,希望对同是正在学?fn)JAVA技术的同道中h能有帮助Q?/p> <p>我曾写过一叫<<配置Eclpise+tomcatq实现JSP的编写与部v>>Q现在写的这些算是它的后l.</p> <p>一Q  ?软g下蝲<br />Mysql<br />下蝲版本Q?.1.11<br /><a >http://dev.mysql.com/downloads/mysql/4.1.html</a></p> <p>JDBC驱动<br />下蝲版本Q?.1.8<br /><a >http://dev.mysql.com/downloads/connector/j/3.1.html</a></p> <p>Mysql界面插g:mysql-front<br />下蝲版本镜像QHongKongQ我下回来安装就是中文版了)<br /><a >http://www.mysqlfront.de/download.html</a></p> <p>二.    软g安装<br />1.安装mysql<br />    如我上面所说的Q我是参考了saulzy的文章,现在l出saulzyq篇文章的连接:(x)<br /><a >http://blog.csdn.net/saulzy/archive/2005/04/23/359648.aspx</a><br />里面图文q茂Q说得非常清?br />Q在q里再一ơ感谢saulzyQ?/p> <p>2.JDBC驱动Qmysql-connector-java-3.1.8<br />q只是一个压~包Qƈ不需要安装,只要其解压Q我么用的是文件夹mysql-connector-java-3.1.8里的文gQmysql-connector-java-3.1.8-bin.jarQ?/p> <p>3. Mysql界面插g:mysql-front<br />q是一个安装程序,按照提示安装可以了Q?/p> <p>三.    环境配置<br /> 首先Q我要说明的是我现在<br />tomcat的安装\径是: D:\Program Files\Java\Tomcat<br />  JDK的安装\径是QD:\Program Files\Java\j2sdk</p> <p>在这里,需要配|环境变量的是JDBC驱动Q在配置前先要把刚才说到的mysql-connector-java-3.1.8-bin.jar本地盘某处Q我攄地方QD:\Program Files\Java\mysqlforjdbcQ,然后Ҏ(gu)你放的地方,配置classpathQ我的配|是q样的:(x)<br />.;D:\Program files\Java\j2sdk\lib\tools.jar;D:\Program Files\Java\j2sdk\lib\mysql-connector-java-3.1.8-bin-g.jar;D:\Program Files\Java\mysqlforjdbc\mysql-connector-java-3.1.8-bin.jar<br />配置q个的目的是让你的java应用E序扑ֈq接mysql的驱动.</p> <p>配置完环境变量后q有很重要一步就是ؓ(f)JSPq接数据库配|驱动,q个其实很简单,是把mysql-connector-java-3.1.8-bin.jar拷到某些文g多wp了,我在|上看了很多资料问了很多人,各种说法都有Q我l合了一下,Z保险Q我都全做了Q呵呵,反正是拷一?00K的文件而已Q现列出要把mysql-connector-java-3.1.8-bin.jar拯ȝ文g夹,如下Q?br />D:\Program Files\Java\Tomcat\common\lib<br />D:\Program Files\Java\Tomcat\shared\lib</p> <p>四.    数据库的使用</p> <p>Mysql安装完毕以后Q还有一些要注意的地方,q里saulzy也写了篇文章Q大家看看就清楚了,q接如下Q?a >http://blog.csdn.net/saulzy/archive/2005/04/23/359811.aspx</a><br />p在saulzy的文章力提到的,mysql安装好后最重要一样就是要看数据库有没有作为系l服务启动了Q所以在大家q行数据库操作前Q应要看看,在操作系l的<br />开始-Q运行-Q输入services.mscQ确定你在安装时你设|的关于mysql的那个服务已l启动,q样你在操作数据库时不会(x)报连接不上的错误Q?br />上面提到了一个较方便的mysql界面插gQ但是这个界面是我在已经开始用mysql后才扑ֈ的,刚开始我是在dos下用命o(h)行进行操作的Q虽焉个界面也可以q行建库啊,讑֮权限{操作,但是Q我觉得懂得在用命令行也是一个很重要的技能,所以我先从命o(h)行开始说Q怎样单用mysqlQ到后面?x)谈及(qing)mysqlQfront的用.</p> <p>现在我想在mysql里徏一个数据库shujukuQ以?qing)在数据库里Z个表biaoQ具体的命o(h)如下Q假设mysql我是刚安装好的)</p> <p> </p> <p> </p> <p> <br />1.    q入dos状态(C命o(h)行的要运行在mysql的安装目录下的bin目录的)如下图一Q?br /> <br />2.    q接mysql<br />输入Qmysql ?h localhost ?u root ?p<br />出现要求输入密码的界面(如图二)<br /> </p> <p> </p> <p> <br />输入在安装时已设好的密码Q就q入了mysql的命令编辑界面了Q如图三Q?br /> <br />3.    使用mysql的基本命?在mysql命o(h)行编辑每输入完命令后最后一定要有分P不然?x)报?<br />昄数据库:(x)show databases;<br />使用数据库:(x)use 数据库名Q?br />例子如图四:(x)<br /> </p> <p> <br />4Q徏?br />命o(h)Qcreate database shujuku;<br />5.为数据库讄权限Q用户和密码Q?br />命o(h)Qgrant all privileges on shujuku.* to <a href="mailto:test@localhost">test@localhost</a> identified by  ?23456?<br />当你执行完这个命令以后,只要你再以用户名Qtest,密码Q?23456d时你只可以对shujukuq个数据库操作,q样避开使用rootQ对数据库的安全有很大帮助.如图?br /> </p> <p>6.<br />命o(h)Qcreate table biao(id int(8) primary key,name varchar(10));<br />如图?</p> <p>剩下来的与标准sqsl命o(h)基本上是一L(fng)Q具体操作略<br />值得一提的是,你在命o(h)行上输入Q?Q,׃(x)有mysql命o(h)的简单帮助,如图八:(x)<br /> </p> <p>呵呵Q那P我们q可以知道退出,是QexitQ,呵呵Q?/p> <p>五.    关于mysql-front的?br />我找了好几个mysql的界面工P觉得最z方便还是mysql-frontQ可惜的是要收费Q不q还好有试用期,呵呵Q可以先感受感受一下,最重要一Ҏ(gu)mysql-front有简体中文版的,英文不好的我用v来就舒服多了Q下面简单说说用吧Q?br />首先Q安装就不用说了Q有向导Q而且很简单.安装好后W一ơ运行时?x)蟩出来一个要求添加对话的框,在这里你可以d例如上面已经讑֮好的shujukuQ过E如图九(ji)Q十Q十一:<br /> </p> <p> </p> <p> </p> <p>当你在注册的复选框里填上你在上面mysql讑֮好的用户名和密码后,在选择数据库框里就有shujuku 的数据库了,选上Q按定Q进入mysql-fron后,你就?x)看C面的界面Q这是你可以进行操作了Q如囑֍?br /> <br /> <br />要说明的是,你还可以把root用户也加q去Q这要你在mysql-fron的界面上?br />讄Q>对话Q>新徏Q再按上面进行就可以Q出了root你还可以加入更多的用PҎ(gu)q是一L(fng)Q设|不同的用户Q是方便对不同数据库q行理Q呵呵,root是权限最高的Q可不要随便让别Z用你的root用户Q保正你数据库的安全Q?/p> <p>六.    JSPq接mysql<br />现在是试用jspq接mysql?br />我在eclipse里徏了个test_mysql.jsp面Q代码如下:(x)</p> <p><%@ page contentType="text/html; charset=gb2312" %><br /><%@ page language="java" %><br /><%@ page import="com.mysql.jdbc.Driver" %><br /><%@ page import="java.sql.*" %><br /><%<br />  //驱动E序?br />  String driverName="com.mysql.jdbc.Driver";<br />  //数据库用户名<br />  String userName="cl41";<br />  //密码<br />  String userPasswd="123456";<br />  //数据库名<br />  String dbName="db";<br />  //表名<br />  String tableName="dbtest";<br />  //联结字符?br />  String url="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPasswd;<br />  Class.forName("com.mysql.jdbc.Driver").newInstance();<br />  Connection connection=DriverManager.getConnection(url);<br />  Statement statement = connection.createStatement();<br />  String sql="SELECT * FROM "+tableName;<br />  ResultSet rs = statement.executeQuery(sql); <br />  //获得数据l果集合<br />   ResultSetMetaData rmeta = rs.getMetaData();<br />  //定数据集的列数Q亦字段?br />   int numColumns=rmeta.getColumnCount();<br />  // 输出每一个数据?br /> out.print("id"); <br /> out.print("|");<br /> out.print("num");<br /> out.print("<br>");<br />while(rs.next()) {<br />out.print(rs.getString(1)+" ");   <br />out.print("|");<br />out.print(rs.getString(2));<br />out.print("<br>");  <br />}   <br />out.print("<br>");<br />out.print("数据库操作成功,恭喜?); <br />rs.close();   <br />statement.close();   <br />connection.close();   <br />%>   </p> <p>然后把testR_mysql.jsp部v到tomcat处,如何部v可参考我的另一文?lt;<配置Eclpise+tomcatq实现JSP的编写与部v>></p> <p>在浏览器Q你可以看到如囑֍三的Q?br /> </p> <p>呵呵Q文章终于写完了Q原来写简z清晎ͼ图文q茂的文章真的不Ҏ(gu)Q还是那句话Q希望对度这文章的你有帮助吧!Good luck!<br />׃q里不能贴图片,我把我文章里面的囄都打包了Q在附g处!<br />Q如有{载,h明原作者是cl41,谢谢合作Q) <br /></p> <p> </p> <img src ="http://www.tkk7.com/faithwind/aggbug/59187.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/faithwind/" target="_blank">黑咖?/a> 2006-07-20 14:55 <a href="http://www.tkk7.com/faithwind/archive/2006/07/20/59187.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MYSQL初学者用指?/title><link>http://www.tkk7.com/faithwind/archive/2006/07/20/59176.html</link><dc:creator>黑咖?/dc:creator><author>黑咖?/author><pubDate>Thu, 20 Jul 2006 06:02:00 GMT</pubDate><guid>http://www.tkk7.com/faithwind/archive/2006/07/20/59176.html</guid><wfw:comment>http://www.tkk7.com/faithwind/comments/59176.html</wfw:comment><comments>http://www.tkk7.com/faithwind/archive/2006/07/20/59176.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/faithwind/comments/commentRss/59176.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/faithwind/services/trackbacks/59176.html</trackback:ping><description><![CDATA[     摘要: 有很多朋友虽然安装好? mysql 但却不知如何使用它。在q篇文章中我们就从连? mysql ? 修改密码、增加用L(fng)斚w来学?fn)一? mysql 的常用命令? ...  <a href='http://www.tkk7.com/faithwind/archive/2006/07/20/59176.html'>阅读全文</a><img src ="http://www.tkk7.com/faithwind/aggbug/59176.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/faithwind/" target="_blank">黑咖?/a> 2006-07-20 14:02 <a href="http://www.tkk7.com/faithwind/archive/2006/07/20/59176.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>smalltalk概述http://www.tkk7.com/faithwind/archive/2006/07/06/56972.html黑咖?/dc:creator>黑咖?/author>Thu, 06 Jul 2006 08:28:00 GMThttp://www.tkk7.com/faithwind/archive/2006/07/06/56972.htmlhttp://www.tkk7.com/faithwind/comments/56972.htmlhttp://www.tkk7.com/faithwind/archive/2006/07/06/56972.html#Feedback0http://www.tkk7.com/faithwind/comments/commentRss/56972.htmlhttp://www.tkk7.com/faithwind/services/trackbacks/56972.htmlhttp://www.chimu.com/publications/J...talkSyntax.html
它很small,而且像talk一hqh的语a?br />


---------------------以下是{载:(x)
smalltalk
可是面向对象的程序设计语a的E阿Qƈ且正在蓬勃的发展Q没有过时。它是纯面向对象的语aQ就q整C是对象。开攄境也非常集成Q如果感兴趣可以C下网站下载,l对有耳目一新的感觉。D个例子,

循环语句在smalltalk中是向一个整数对象发送消息:(x)

10 timesRepeat: [ teresa moveRight: 10 ].

其中timesRepeat:为消息名Uͼ10为接受消息的整数对象Q?
[ teresa moveRight: 10 ].是消息的参数Q?


q又是smalltalk强大的地方,它可以把一D늨序作为参C递给某个对象Q!Q?
Squeak Smalltalk
http://www.squeak.org/ q是一个非常有的smalltalk版本Q看上去像在你的电(sh)脑上模拟了另外一套完成的H口pȝQ这里面的窗口更加利宻I你甚臛_以旋转它Q不看不知道Q看了才发现q有q么奇妙的语aQ这么奇妙的开发环境?0M左右

Cincom Smalltalk
http://www.cincom.com/scripts/smalltalk.dll/home.ssp q个版本比较实用Q有详细的帮助,可以开发真正的windowsE序?0M左右

Dolphin Smalltalk
http://www.object-arts.com/ q里提供的免费smalltalk版本只有3M不到Q如果你惛_试一下这U语a的话Q可以下载这个?br />
q是一个支持unicode的smalltalk版本Q?br />http://www.objectconnect.com/
可以下蝲 限时?img src ="http://www.tkk7.com/faithwind/aggbug/56972.html" width = "1" height = "1" />

]]>
JAVA资源(感谢提供资料的朋?http://www.tkk7.com/faithwind/archive/2006/07/06/56904.html黑咖?/dc:creator>黑咖?/author>Thu, 06 Jul 2006 02:34:00 GMThttp://www.tkk7.com/faithwind/archive/2006/07/06/56904.htmlhttp://www.tkk7.com/faithwind/comments/56904.htmlhttp://www.tkk7.com/faithwind/archive/2006/07/06/56904.html#Feedback0http://www.tkk7.com/faithwind/comments/commentRss/56904.htmlhttp://www.tkk7.com/faithwind/services/trackbacks/56904.html
A.书名Q《Thinking in Java?e中文?侯捷 / 王徏?合译
URL: http://jjhou.csdn.net/thinking-in-java-20010919.pdf
B.书名QJBuilder5中文帮助文g
URL: http://www.code-labs.com/manual/Jb5cn_help1.rar
http://www.code-labs.com/manual/Jb5cn_help2.rar
C.书名QThink in Java(中文?---chm格式
URL: http://www.code-labs.com/manual/Think%20In%20Java.chm
D.书名QJbuilder开发h员指?完整版)
URL: http://www.java-cn.net/book/books-zip/JbuilderGuide.zip
E.书名QJava2~程详解(Special_Edition_Using_JavaQ?br />URL: http://www.java-cn.net/book/books-zip/Java2Xiangjie.zip
F.书名QJava2 Lq阶
URL: http://www.java-cn.net/book/books-zip/java11.zip
G.书名Q?JavaBeans开发用手?br />URL: http://www.java-cn.net/book/books-zip/JavaBeansDevelop.zip
H.书名QJava1.3API手册
URL: http://www.java-cn.net/book/books-zip/api.zip

java 教程与实?br />http://download.pchome.net/php/download2.php?sid=10837&url=/development/reference/Javateach0307.zip&svr=3

I.书名QSCJP认证W记
URL: http://vanstone.myetang.com/scjp/scjpnotes.rar
J.书名QSun培训教材中文E?br />URL: http://vanstone.myetang.com/scjp/javabook/sl275cn.pdf
K.书名QSCJP认证Bible
URL: http://vanstone.myetang.com/scjp/scjpbible.rar
L.书名Qjava开发规范(htmlQ?br />URL: http://www.cn-java.com/target/download.php?id=790&downurl=../download/book/javaformat.zip
M.书名QEJB2.0 Entity bean(PDF)
URL: http://www.cn-java.com/target/download.php?id=708&downurl=../download/book/EJB2.0.zip
N.书名QJ2ME用户使用手册(PDF)
URL: http://www.cn-java.com/target/download.php?id=667&downurl=../download/book/UserGuide.pdf
O.书名QJavaServerPages基础
URL: http://www.java-cn.net/book/books-zip/JSPIntro.zip
P.书名QRMI Enhancements
URL: http://www.cn-java.com/target/download.php?id=297&downurl=/download/tools/rmispecjdk12.zip
Q.书名Q无废话XML
URL: http://www.cn-java.com/target/download.php?id=222&downurl=../download/tools/wfhxml_gb.zip

R.书名:Design Pattens
注释Q号UY件工E师的床头必备书c,非常l典Q对面向对象思想在实践应用中的模式做了经典性的ȝ
URL: http://automation.seu.edu.cn/auto/content/Design.zip

S.书名:设计模式 可复用面向对象Y件的基础
注释Q南京大学翻译的Design Patterns的中译本Q机械工业出版社出版Q翻译质量较?br />URL: http://automation.seu.edu.cn/auto/content/DesignCh.zip

T.书名:Thinking in Java with Patten
注释Q与Thinking in Java为同一作者所著,设计模式与Java的结?br />URL: http://automation.seu.edu.cn/auto/content/TIPatterns[Thinking%20in%20Pattern%20with%20java].zi
p

U.书名:The Design Pattens Java Companion
注释Q另一本Design patten 与Java相结合的?James w.Cooper?br />URL: http://automation.seu.edu.cn/auto/content/DesignJava.zip

V.书名:Java 2 q_安全技术-l构QAPI设计和实?br />注释Q来自china pubQPDF文档,中译?br />URL: http://automation.seu.edu.cn/auto/content/Java2Safe.zip

W.书名:Mastering Enterprise JavaBeans
注释QEd Roman著,EJB的优U书籍
URL: http://automation.seu.edu.cn/auto/content/EJB-book.zip

X.书名:Pure JSP
注释QJames Goodwill?Sams, Macmillan Computer Publishing 2000.6.8出版
URL: http://automation.seu.edu.cn/auto/content/Pure%20jsp.zip

Y.书名:Sun Tutorial 2001.5
注释QSun公司的经典教E,入门必读
URL: http://automation.seu.edu.cn/auto/content/tutorial_2001.zip

Z.书名:JDK1.3.1 document Winhelp 格式
注释QWinhelp格式的JDK文档Q更易阅d查找Q很?br />URL: http://automation.seu.edu.cn/auto/content/jdk13doc_help.zip


1A.书名:The Java Virtual Machine Specification Second Edition
注释QJava 虚拟范,有助于理解Java的实现原理,Sun出版
URL:http://automation.seu.edu.cn/auto/content/vmspec.2nded.html.zip

1B.书名:The Java Language Sepcification Second Edition
注释QJava 语言规范QJava~程语言的详l说明,Sun出版
URL: http://automation.seu.edu.cn/auto/content/langspec-2.0.zip

1C.书名:Java programmer's FAQ
注释QSun公司的FAQQ内容丰富,覆盖面广
URL: http://automation.seu.edu.cn/auto/content/faq.zip

1D.书名:Cocoon 2 ?br />注释QCocoon 是一U?Java 服务器框Ӟ它允怋?XSLT转换动态发?XML 内容。通过依靠 XML 描述内容Q?XSLT 内容{换成多种格式QCocoon 提供了用于构建内宏V?br />逻辑和表C在很大E度上彼此分ȝ应用E序的^台?本教E将介绍 Cocoon 2Q一个比原始 Cocoon 应用E序更有效和更可伸羃的^台?br />URL: http://www-900.ibm.com/developerWorks/cn/education/xml/x-cocoon/tutorial/x-cocoon.zip

1E.书名:java事g传递技?br />注释QJava 2 q_使程序员可以从事件的角度来思考系l,而不从是传统的调?q回Qcall-returnQ体pȝ构风格的角度。在该^台本w内部,有对多U事仉知模式的直接支持。思考事件的一U方
式是通过事g的粒度和所有权。一些事件模式适合在对象实例状态变化的_度上表CZ件?br />URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-delivery/tutorial/j-delivery.zip

1F.书名:使用 JDBC 构徏Z Web 的应用程?br />注释Q如果?zhn)?gu)Z?JDBC 讉K数据库的 Web 应用E序的各U方法感兴趣Q那么本教程适合于?zhn)。在q一实践指南中,(zhn)将通过使用三项独立的技术来学习(fn)q一q程的基知识Q这三项技术是Qservle
t Ҏ(gu)、JavaServer PagesQJSPQ页面方法以?JSP、JavaBeans ?servlet 相结合的Ҏ(gu)Q也UCؓ(f) Model TwoQ?br />URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-jdbcweb/tutorial/j-jdbcweb.zip

1G.书名:Java 3D 探奇
注释Q本教程是ؓ(f)没有M 3D ~程l验?Java E序员而编写的。我们将从一些基本的 3D 概念入手Q探索如何构Z副场景图 ?用于描述我们惌渲染的场景的基本对象。然后,我们接?Java
3D 的一些更强大的功能。我们的重点放在用一?Java 3D 实用cL开始?zhn)的编E?br />URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-java3d/tutorial/j-java3d.zip
1Q.书名:Java 调试
注释Q即使是最高的开发h员所开发的最单的应用E序也可能包含错误。如果要成ؓ(f)好的调试人员Q不必象大侦探那栯查蛛丝马qV?zhn)只需了解概念q熟(zhn)正的工具。在本教E中Q我们提供了关于基本 Java ?br />试概念和更高U调试类型的详细信息?br />URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-debug/j-debug.zip

1R.书名:构徏定制的树(wi)型视?br />注释Q在q篇免费?dW 专有的独家教E中Q讲qC关于 Swing ?wi)型视图的概c它们所昄的内宏V如何设|它们以?qing)如何定制它们。它q讲qC使用U程来执行长旉q行d的概念,q样用户界面可以保
持迅速反应。研I?Java Swing ?wi)的相关c,演示了如何定制基本数据模型和?wi)节点的l制。ؓ(f)说明q些概念Q我们将生成一个增强型 JTreeQJMagnitudeTree。这个增强型 JTree ?br />以显C树(wi)节点的相Ҏ(gu)量,以及(qing)标准节点名称和整个树(wi)型结构。例如,如果?wi)显C的是文件目录结构,那么它可以指出所有文件和目录的相对大。本教程q不试图充当~程参考,因此合适的 Swing 参考资料或在线文档
也许?x)有帮助?br />URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-magnitudetree/MagnitudeTree.zip

1S.书名:构徏 Java 聊天服务?br />注释Q在q篇免费?dW 专有的独家教E中Q我们将构徏一个简单聊天系l的服务器和客户机方。?zhn)在q个q程中学到创样一个服务器时可以用到的基本框架Q该框架使用在很多情况下都能很好工作的传l技术。我
们还讨论框架的一些限Ӟq找到克服这些限制的Ҏ(gu)?br />URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-chat/tutorial/j-chat.zip

1T.书名:构徏带会(x)话跟t的 Servlet
注释Q本教程讲授使用 Servlet ?JSP 技术构建因特网应用的技巧。其关键是启用会(x)话处理,那么 Servlet 可以知道哪个用户在q什么。本教程昄了一?URL 书签pȝQ在q个pȝ中,
多个用户讉K一个系l以d、除d更新 HTML 书签列表。Servlet 使用 JSP 技术来处理用户交互?br />URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-servlets2/tutorial/j-servlets2.zip


1H.书名:使用 JDBC 的高U数据库操作
注释Q本教程旨在向?zhn)介绍几种高数据库操作,包括存储q程和高U数据类型,它们可以通过使用 JDBC ?Java 应用E序执行。教E中的示例代码是?DB2 通用数据?7.2 ~写的,但因Z用了
DataSource 对象Q修改这些代码以适用于其它数据库是不成问题的?br />URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-jdbcadv/tutorial/j-jdbcadv.zip

1I.书名:?JDBC 理数据库连?br />注释Q本教程介绍了用“Java 数据库连接”(Java Database ConnectionQJDBCQ)?Java 应用E序内部建立和管理数据库q接所涉及(qing)的不同概c?br />URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-jdbc/tutorial/j-jdbc.zip
1J.书名:Java 集合框架
注释Q本教程带(zhn)O?“Java 集合框架”(Java Collection FrameworkQ。ؓ(f)了尽快开始学?fn)“集合框架”,教程从一些面向初学者和专家{读者的单编E示例入手。接着Q教El?br />讨论集(setQ和映射QmapQ,它们的属性以?qing)它们数学上的定义与“集合框架”中?Set?Map ?Collection 定义有何不同。“Java 集合框架”的历史那一节澄清了集和映射相关cȝ一
些؜淆。本教程d介绍了“集合框架”中所有的接口和实现这些接口的cR本教程不仅谈到了用U程安全和只L式处理集合,q探讨了集合的算法支持。此外,教程q讨Z?JDK 1.1 中用“集合框架”的一?br />子集。最后,教程以先于“Java 集合框架”的 ObjectSpace 中一U广泛用的法和数据结构库 JGL 的介l作为结束?br />URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-collections/tutorial/j-collections.z
ip

1K.书名:Java 套接字(socketQ?01
注释Q本教程告诉?zhn)什么是套接字(socketQƈ教?zhn)如何?Java E序中用它。通过实际分析几个CZQ从单个客户机/服务器通讯到池中的一l客h讉K服务器,(zhn)将学到如何用套接字处理现实世界中碰
到的典型情Ş?br />URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-sockets/tutorial/j-sockets.zip

1L.书名:Java Message Service 基础教程
注释Q本教程向?zhn)介绍?Java 消息服务QJava Message ServiceQJMSQ概qͼq提供了使用它开发程序的基本知识。Sun Microsystems 开?JMS 是ؓ(f) Java
E序讉K企业消息传递系l、也U面向消息的中间ӞMOMQ提供一U途径。通过中介q种间接方式来支持应用程序间数据的异步传递,MOM 提供了一U以松散l织的、灵zȝ风格来集成应用程序的机制?br />URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-jms/tutorial/j-jms.zip

1M.书名:JavaMail API 基础教程
注释Q想邮件工L(fng)合到(zhn)独立于q_?Java 解决Ҏ(gu)中吗Q再没有?JavaMail API 更合适的了,它提供了个独立于协议的模块,能用?IMAP、POP、SMTP、MIME 和其它涉?qing)?br />特网的消息传递协议。现在,有了 JavaBeans Activation Framework (JAFQ的支持Q?zhn)的应用程序经?JavaMail API p启用邮g功能啦?br />URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-javamail/tutorial/j-javamail.zip

1N.书名:J2ME 循序渐进
注释Q本教程详细审查了袖珍版 Java 2 q_ (J2ME)Q它主要面向?Java ~程?qing)面向对象设计与开发方面有深厚背景的中U开发者?(zhn)可以首先了?J2ME 的背景ƈ研究 J2ME 的配|?br />和简表。随后,逐步建立(zhn)的开发环境,用于开?J2ME 应用E序?br />本教E将向?zhn)介绍一些课题如 K 虚拟?(KVM)Q和 KJava API -- 用于兌q接有限讑֤配置 (CLDC) 和?CLDC 的移动信息设备简表。之后?zhn)构造一个简单的应用E序来看看?zhn)?br />?J2ME 做些什么。?zhn)?CLDC ?KJava 开发一个基本绘囑ֺ用程序以?qing)一个小?MIDP 应用E序?br />URL: http://www-900.ibm.com/developerWorks/cn/education/java/j2me/tutorial.zip

1O.书名:构徏自己?Java ?br />注释Q此教E主要教(zhn)怎样使用 Java 语言来构q可重用的cd。内容包括设计良好类库的一些关键事以?qing)有效方法,Z更好的说明内容,教程q给Z一个简单的cd设计的例子?br />URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-library/j-library.zip

1P.书名:了解 Java ClassLoader
注释QJava ClassLoader 是一个重要的、但又常常被人忽略的 Java q行时系l组件。它是负责在q行时查扑֒装入cL件的cR创q ClassLoader 可以以实用且有趣的方式定
?JVMQ这样可以让(zhn)彻底重新定义如何将cL件引入系l?br />URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-classloader/j-classloader.zip

1Q.书名:Java 调试
注释Q即使是最高的开发h员所开发的最单的应用E序也可能包含错误。如果要成ؓ(f)好的调试人员Q不必象大侦探那栯查蛛丝马qV?zhn)只需了解概念q熟(zhn)正的工具。在本教E中Q我们提供了关于基本 Java ?br />试概念和更高U调试类型的详细信息?br />URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-debug/j-debug.zip


1R.书名:构徏定制的树(wi)型视?br />注释Q在q篇免费?dW 专有的独家教E中Q讲qC关于 Swing ?wi)型视图的概c它们所昄的内宏V如何设|它们以?qing)如何定制它们。它q讲qC使用U程来执行长旉q行d的概念,q样用户界面可以保
持迅速反应。研I?Java Swing ?wi)的相关c,演示了如何定制基本数据模型和?wi)节点的l制。ؓ(f)说明q些概念Q我们将生成一个增强型 JTreeQJMagnitudeTree。这个增强型 JTree ?br />以显C树(wi)节点的相Ҏ(gu)量,以及(qing)标准节点名称和整个树(wi)型结构。例如,如果?wi)显C的是文件目录结构,那么它可以指出所有文件和目录的相对大。本教程q不试图充当~程参考,因此合适的 Swing 参考资料或在线文档
也许?x)有帮助?br />URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-magnitudetree/MagnitudeTree.zip

1S.书名:构徏 Java 聊天服务?br />注释Q在q篇免费?dW 专有的独家教E中Q我们将构徏一个简单聊天系l的服务器和客户机方。?zhn)在q个q程中学到创样一个服务器时可以用到的基本框架Q该框架使用在很多情况下都能很好工作的传l技术。我
们还讨论框架的一些限Ӟq找到克服这些限制的Ҏ(gu)?br />URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-chat/tutorial/j-chat.zip

1T.书名:构徏带会(x)话跟t的 Servlet
注释Q本教程讲授使用 Servlet ?JSP 技术构建因特网应用的技巧。其关键是启用会(x)话处理,那么 Servlet 可以知道哪个用户在q什么。本教程昄了一?URL 书签pȝQ在q个pȝ中,
多个用户讉K一个系l以d、除d更新 HTML 书签列表。Servlet 使用 JSP 技术来处理用户交互?br />URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-servlets2/tutorial/j-servlets2.zip

1U.书名:Java 语言基础
注释Q本教程介绍?Java ~程语言Q包括一些用来说明面向对象架构语a的语法的CZQ?以及(qing)一些标准编E的l习(fn)Q如定义实例Ҏ(gu)Q用内?built-in)cdQ创建用戯定义cdQ?使用引用变量(
reference variables){?br />URL: http://www-900.ibm.com/developerWorks/cn/education/java/javaintro/tutorial/javaintro.zip


1V.书名:JavaRMI入门实战(实在找不到页面下载,q是ftp下蝲的)
URL:ftp://218.242.4.185/pub/work/JAVA_JSP_J2EE/Articles/RMI/JavaRMI%C8%EB%C3%C5%CA%B5%D5%BD.pdf

1W.书名:Java Xml ~程指南书籍源码
URL:ftp://202.115.39.65/--==Incoming==--/Documents/Tech/Java/J2EE/Java%20Xml%20~程指南书籍源码.rar

1X.书名:XML解决Ҏ(gu)开发实?br />URL:
http://www.guxiang.com/epubcn/readings/diannaotushu/100/download/xmlsolution.zip

]]>
Thread 的理解、?/title><link>http://www.tkk7.com/faithwind/archive/2006/06/22/54524.html</link><dc:creator>黑咖?/dc:creator><author>黑咖?/author><pubDate>Thu, 22 Jun 2006 08:54:00 GMT</pubDate><guid>http://www.tkk7.com/faithwind/archive/2006/06/22/54524.html</guid><wfw:comment>http://www.tkk7.com/faithwind/comments/54524.html</wfw:comment><comments>http://www.tkk7.com/faithwind/archive/2006/06/22/54524.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/faithwind/comments/commentRss/54524.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/faithwind/services/trackbacks/54524.html</trackback:ping><description><![CDATA[ <p>try {<br />     new Thread(new Runnable() {<br />      public void run() {<br />       TaskService taskService = (TaskService)context.getBean(TaskService.SERVICE_NAME);<br />       List<Task> taskSharedList = taskService.getAllSharedTaskList();<br />       for (Task task : taskSharedList) {<br />        task.setOwner(mainFrame.getUserName());<br />       }<br />       try {<br />        ((LoginServiceProxyImpl) context.getBean(LoginServiceProxyImpl.SERVICE_NAME))<br />          .shareTask(taskSharedList);<br />       } catch (RemoteException e) {<br />        e.printStackTrace();<br />       } catch (ServiceException e) {<br />        e.printStackTrace();<br />       }<br />      }<br />     }).run();</p> <p>    } catch (Exception e) {<br />    }<br /></p> <img src ="http://www.tkk7.com/faithwind/aggbug/54524.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/faithwind/" target="_blank">黑咖?/a> 2006-06-22 16:54 <a href="http://www.tkk7.com/faithwind/archive/2006/06/22/54524.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>了解UUIDhttp://www.tkk7.com/faithwind/archive/2006/05/26/48381.html黑咖?/dc:creator>黑咖?/author>Fri, 26 May 2006 09:13:00 GMThttp://www.tkk7.com/faithwind/archive/2006/05/26/48381.htmlhttp://www.tkk7.com/faithwind/comments/48381.htmlhttp://www.tkk7.com/faithwind/archive/2006/05/26/48381.html#Feedback0http://www.tkk7.com/faithwind/comments/commentRss/48381.htmlhttp://www.tkk7.com/faithwind/services/trackbacks/48381.html通用惟一标识W(UUIDQ是128?/a>比特的数字,用来惟一地标识因特网上的某些对象或者实体。根据用的特定机制Q通用惟一标识W不仅需要保证是彼此不相同的Q或者最也是与公元3400q之前其他Q何生成的通用惟一标识W有非常大的区别。通用惟一标识W依靠保证惟一性的部分的组合。有保证的通用惟一标识W包括一个指向生成通用惟一标识W的L的网l地址Q时间戳Q用来记录事务的_旉的记录)Q以?qing)一个随机生成的lg。因为网l地址标识了惟一的一台计机 Qƈ且时间戳对于某台L上的生成的每个通用惟一标识W也是惟一的,那么q两个部分就完全可以保证惟一性了。然而,随机生成的通用惟一标识W的元素也可以作Z护措施来防止所有的不可预见的问题。  

通用惟一标识W是作ؓ(f)tModel 数据l构中的一部分Q这U数据结构标识通用描述、发玎ͼ和整合(UDDIQ注册中的一U服务的cdQ注册服务的通用表示法)。这U机制可用来发现|络服务。  

通用惟一标识W还可以用来指向大多数的可能的物体。微软和其他一些Y件公叔R們֐使用全球惟一标识W(GUIDQ,q也是通用惟一标识W的一U类型,可用来指?a class="bluekey" target="_blank">l徏对象模块对象和其他的软glg。第一个通用惟一标识W是在网|计机pȝQNCSQ中创徏Qƈ且随后成为开放Y?a class="bluekey" target="_blank">基金?x)(OSFQ的分布式计环境(DCEQ的lg?br />

UUIDQ是128位整?16字节)的全局唯一标识W?Universally Unique Identifier)?br />
UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常q_?x)提供生成UUID的API。UUID按照开放Y件基金会(x)(OSF)制定的标准计,用到了以太网卡地址、纳U旉、芯片ID码和许多可能的数字。由以下几部分的l合Q当前日期和旉(UUID的第一个部分与旉有关Q如果你在生成一个UUID之后Q过几秒又生成一个UUIDQ则W一个部分不同,其余相同)Q时钟序列,全局唯一的IEEE机器识别P如果有网卡,从网卡获得,没有|卡以其他方式获得)QUUID的唯一~陷在于生成的结果串?x)比较长。关于UUIDq个标准使用最普遍的是微Y的GUID(Globals Unique Identifiers)?br />在ColdFusion中可以用CreateUUID()函数很简单的生成UUIDQ其格式为:(x)xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16)Q其中每?x ?0-9 ?a-f 范围内的一个十六进制的数字。而标准的UUID格式为:(x)xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx (8-4-4-4-12)
Q可以从cflib 下蝲CreateGUID() UDFq行转换?br />使用UUID的好处在分布式的软gpȝ中(比如QDCE/RPC, COM+,CORBAQ就能体现出来,它能保证每个节点所生成的标识都不会(x)重复Qƈ且随着WEB服务{整合技术的发展QUUID的优势将更加明显?br />
PSQ在MMColdFusion技术支持中心找?a >一文?/a>Q其中提C用CreateUUID()?x)将WINq_下的pȝ旉加快10毫秒Q原因是JVM1.3.x ?.4.x的bugQ文章提C解决Ҏ(gu)?/div>

]]>title中有回R的解x案(只适合IEQ?/title><link>http://www.tkk7.com/faithwind/archive/2006/05/19/47029.html</link><dc:creator>黑咖?/dc:creator><author>黑咖?/author><pubDate>Fri, 19 May 2006 04:07:00 GMT</pubDate><guid>http://www.tkk7.com/faithwind/archive/2006/05/19/47029.html</guid><wfw:comment>http://www.tkk7.com/faithwind/comments/47029.html</wfw:comment><comments>http://www.tkk7.com/faithwind/archive/2006/05/19/47029.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/faithwind/comments/commentRss/47029.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/faithwind/services/trackbacks/47029.html</trackback:ping><description><![CDATA[<span title="W一?amp;#13;&#10;W二?>haha haha haha</span><br /><img src ="http://www.tkk7.com/faithwind/aggbug/47029.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/faithwind/" target="_blank">黑咖?/a> 2006-05-19 12:07 <a href="http://www.tkk7.com/faithwind/archive/2006/05/19/47029.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://jiayila.com" target="_blank">޳avƬ</a>| <a href="http://8mav938.com" target="_blank">һ߹ۿ</a>| <a href="http://www-887234.com" target="_blank">Ʒþþþþþþþ </a>| <a href="http://ningxialanh.com" target="_blank">޳˵Ӱվwww</a>| <a href="http://hkcp168.com" target="_blank">޹ŮƷþ</a>| <a href="http://3y0r.com" target="_blank">6666˹ۿ</a>| <a href="http://tianwu520.com" target="_blank">avרۿƷ</a>| <a href="http://kanboy.com" target="_blank">һ</a>| <a href="http://moushengguigz.com" target="_blank">ٶ˽ȫֱ</a>| <a href="http://77110524.com" target="_blank">޾ƷĻ </a>| <a href="http://fsrongxing.com" target="_blank">ѧһëƬѿ</a>| <a href="http://slotvip24.com" target="_blank">һƷ</a>| <a href="http://46339cc.com" target="_blank">Ƶ</a>| <a href="http://nkldj.com" target="_blank">2022</a>| <a href="http://jiuse54.com" target="_blank">ëƬAV뾫Ʒҹ</a>| <a href="http://5g6z.com" target="_blank">һĻר </a>| <a href="http://xfmkt.com" target="_blank">ѹۿһëƬa</a>| <a href="http://www65axax.com" target="_blank">޹V߹ۿ</a>| <a href="http://szjmlr.com" target="_blank">Ӱһ޹ģƷһ </a>| <a href="http://2c06xyz.com" target="_blank">ھƷþþþþþ</a>| <a href="http://6217c.com" target="_blank">7777þĻ</a>| <a href="http://43caopen.com" target="_blank">ɫƷva߹ۿƵ</a>| <a href="http://xj47777.com" target="_blank">ëƬ벥</a>| <a href="http://fennenll.com" target="_blank">99þֻƷ</a>| <a href="http://nnlxl.com" target="_blank">ձƬѹۿ</a>| <a href="http://jyzs888.com" target="_blank">Ƶ</a>| <a href="http://fuzhiwushu.com" target="_blank">þҹɫƷAV̬ͼ</a>| <a href="http://wjjccw.com" target="_blank">޳˸߹ۿ</a>| <a href="http://benjiebf.com" target="_blank">þþþŮʦһ</a>| <a href="http://51ykz.com" target="_blank">޶߹ۿվ</a>| <a href="http://nibayuan.com" target="_blank">þþ޾ƷƵ</a>| <a href="http://yy6636.com" target="_blank">һƵ</a>| <a href="http://langtuojidian.com" target="_blank">ĻĻ</a>| <a href="http://www50884.com" target="_blank">Ʒһþ </a>| <a href="http://dodxs.com" target="_blank">ŮƵ</a>| <a href="http://8b22.com" target="_blank">aëƬѹۿ</a>| <a href="http://tjtangpu.com" target="_blank">ģƵ</a>| <a href="http://by9277.com" target="_blank">ۺҹ</a>| <a href="http://gg596gg.com" target="_blank">ŷ߹ۿ</a>| <a href="http://jkc178.com" target="_blank">Ʒþһ </a>| <a href="http://516698.com" target="_blank">AVһ </a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>