??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品免费在线视频,亚洲精品视频久久久,亚洲AV永久无码精品一福利http://www.tkk7.com/fhtdy2004/category/39268.htmll验薄Q耐心U篏Q记性不好,记诸文字zh-cnMon, 15 Feb 2010 09:58:34 GMTMon, 15 Feb 2010 09:58:34 GMT60【{】Hibernate/Spring/Struts架构使用OpenSessionInView的问?/title><link>http://www.tkk7.com/fhtdy2004/archive/2009/08/09/290400.html</link><dc:creator>Frank_Fang</dc:creator><author>Frank_Fang</author><pubDate>Sat, 08 Aug 2009 16:14:00 GMT</pubDate><guid>http://www.tkk7.com/fhtdy2004/archive/2009/08/09/290400.html</guid><wfw:comment>http://www.tkk7.com/fhtdy2004/comments/290400.html</wfw:comment><comments>http://www.tkk7.com/fhtdy2004/archive/2009/08/09/290400.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/fhtdy2004/comments/commentRss/290400.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/fhtdy2004/services/trackbacks/290400.html</trackback:ping><description><![CDATA[<br /> http://www.javaeye.com/topic/15057<br /> <br /> 值得研究一?br /> <img src ="http://www.tkk7.com/fhtdy2004/aggbug/290400.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/fhtdy2004/" target="_blank">Frank_Fang</a> 2009-08-09 00:14 <a href="http://www.tkk7.com/fhtdy2004/archive/2009/08/09/290400.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【{】Spring ?struts1.2 整合的三U方?/title><link>http://www.tkk7.com/fhtdy2004/archive/2009/08/08/290395.html</link><dc:creator>Frank_Fang</dc:creator><author>Frank_Fang</author><pubDate>Sat, 08 Aug 2009 15:35:00 GMT</pubDate><guid>http://www.tkk7.com/fhtdy2004/archive/2009/08/08/290395.html</guid><wfw:comment>http://www.tkk7.com/fhtdy2004/comments/290395.html</wfw:comment><comments>http://www.tkk7.com/fhtdy2004/archive/2009/08/08/290395.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/fhtdy2004/comments/commentRss/290395.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/fhtdy2004/services/trackbacks/290395.html</trackback:ping><description><![CDATA[<div id="ftnfvfp" class="blog_content"> <p>1Q用Spring ?ActionSupport <br /> 2, 使用Spring ?DelegatingRequestProcessor cR?br /> 3Q全权委托?/p> <p>无论用那U方法来整合W一步就是要为struts来装载spring的应用环境?是?struts 中加入一个插件?br /> struts-config.xml?/p> <p> <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"><br />   <set-property property="contextConfigLocation" value<span style="color: #ff0000">="/WEB-INF/applicationContext.xml</span>"/><br />  </plug-in></p> <p><br /> spring 的配|文件被作ؓ参数配置q来。这样可以省略对web.xml 文g中的配置?span style="color: #ff0000">保你的applicationContext.xml 在WEB-INF目录下面</span></p> <p><strong>1Q用Spring的ActionSupport .</strong><br /> Spring 的ActionSupport l承?org.apache.struts.action.Action <br /> ActionSupport的子cd以或?WebApplicationContextcd的全局变量。通过getWebApplicationContext()可以获得q个变量?/p> <p>q是一?servlet 的代码:<br /> public class LoginAction extends org.springframework.web.struts.<span style="color: #ff0000">ActionSupport</span> {<br />  <br />  public ActionForward execute(ActionMapping mapping, ActionForm form,<br />    HttpServletRequest request, HttpServletResponse response) {<br />   LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub<br />                 //获得  WebApplicationContext  对象              <br />   <span style="color: #ff0000">WebApplicationContext ctx = this.getWebApplicationContext();<br />   <br />   LoginDao dao = (LoginDao) ctx.getBean("loginDao");<br /> </span>  User u = new User();<br />   <br />   u.setName(loginForm.getName());<br />   u.setPwd(loginForm.getPwd());<br />   <br />   <br />   if(dao.checkLogin(u)){<br />    return mapping.findForward("success");<br />   }else{<br />    return  mapping.findForward("error");<br />   }<br />   <br />  }<br /> }</p> <p>applicationContext.xml 中的配置<br /> <beans><br />  <bean id="loginDao" class="com.cao.dao.LoginDao"/><br /> </beans></p> <p>q中配置方式同直接在web.xml文g配置差别不大。注意:Actionl承?org.springframework.web.struts.ActionSupport 使得struts和spring耦合在一赗?br /> 但实C表示层和业务逻辑层的解?LoginDao dao = (LoginDao) ctx.getBean("loginDao"))?/p> <p><br /> <strong>2,使用Spring ?DelegatingRequestProcessor c?/strong><br /> DelegatingRequestProcessor  l承?org.apache.struts.action.RequestProcessor q覆盖了里面的方法?br /> sturts-config.xml  ?nbsp; <span style="color: #ff0000"><controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/></span> 通过 <controller >来替?br />                         org.apache.struts.action.RequestProcessor 的请求处理?/p> <p>public class LoginAction extends <span style="color: #ff0000">Action</span> {<br />  //利用spring来注入这个对象?br />  <span style="color: #ff0000">private LoginDao dao ;<br />  <br />  public void setDao(LoginDao dao) {<br />   System.out.println("执行注入");<br />   this.dao = dao;<br />  }</span></p> <p> public LoginDao getDao() {<br />   return dao;<br />  }</p> <p> public ActionForward execute(ActionMapping mapping, ActionForm form,<br />    HttpServletRequest request, HttpServletResponse response) {<br />   LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub<br />   <span style="color: #ff0000">//q样一改这行代码似乎没有必要了?br />   //WebApplicationContext ctx = this.getWebApplicationContext();<br />   //LoginDao dao = (LoginDao) ctx.getBean("loginDao");<br /> </span> <br />   User u = new User();<br />   <br />   u.setName(loginForm.getName());<br />   u.setPwd(loginForm.getPwd());<br />   <br />   //直接用dao来调用spring会将q个对象实例化?br />   if(dao.checkLogin(u)){<br />    return mapping.findForward("success");<br />   }else{<br />    return  mapping.findForward("error");<br />   }<br />   <br />  }<br /> }<br /> q里的?br /> LoginAction extends Action 说明 struts 每有和spring 耦合?br /> 看一?br /> applicationContext.xml 中的配置?br /> <beans><br />  <bean id="loginDao" class="com.cao.dao.LoginDao"/><br />  <br />  <bean <span style="color: #ff0000">name="/login" </span>class="com.cao.struts.action.LoginAction"><br />   <property name="dao"><br />    <ref local="loginDao"/><br />   </property><br />  </bean><br /> </beans></p> <p><span style="color: #ff0000">q里 name="/login" 与struts 中的path匚w <br />     class="com.cao.struts.action.LoginAction" 与struts 中的type匚w</span> </p> <p>q要?LoginAction 提供必要的setXXXҎ?获得ApplicationCotext和依赖注入的工作都在DelegatingRequestProcessor中完成?/p> <p><br /> <strong>3Q全权委托:<br /> </strong>Action 的创建和对象的依赖注入全部由IOC容器来完成?使用Spring的DelegatingAcionProxy来帮助实C理的工作 <br /> org.springframework.web.struts.DelegatingActiongProxyl承于org.apache.struts.action.Action .</p> <p><br /> 全权委托的配|方式同 方式 2 cM (applcationContext.xml文g的配|和 Actioncȝ实现方式相同)?br /> <struts-config><br />   <data-sources /><br />   <form-beans ><br />     <form-bean name="loginForm" type="com.cao.struts.form.LoginForm" /></p> <p>  </form-beans></p> <p>  <global-exceptions /><br />   <global-forwards /><br />  <action-mappings ><br />     <!-- type指向的是spring 的代理类 --><br />     <action<br />       attribute="loginForm"<br />       input="login.jsp"<br />       name="loginForm"<br />       path="/login"<br />       scope="request"</p> <p>    <span style="color: #ff0000">  type="org.springframework.web.struts.DelegatingActionProxy"</span> ><br />       <br />       <forward name="success" path="/ok.jsp" /><br />       <forward name="error" path="/error.jsp" /><br />     </action><br />  <br />  </action-mappings><br />  <br />   <br />   <message-resources parameter="com.cao.struts.ApplicationResources" /></p> <p> <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"><br />   <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/><br />  </plug-in></p> <p></struts-config><br /> <span style="color: #ff0000">不同之处</span><br /> <span style="color: #ff0000">1Q?<action>?type指向的是spring 的代理类</span></p> <p><span style="color: #ff0000">2Q?Lstruts-config.xml?<controller ></span></p> <p> </p> <p>三种整和方式中我们优先选用 全权委托的方式?br /> 理由Q?br /> 1Q第一U得过多的耦合了Spring和Action .<br /> 2,RequestProcessorcdl被代理 如果要再实现自己的实现方式(如:~码处理Q怕有炚w烦?/p> <p>ȝ一下:<br /> 整合工作中的步骤Q?br /> 1Q修改struts-config.xml   <br /> 2, 配置applicationContext.xml<br /> 3, 为Actiondget/setҎ 来获得依赖注入的功能?/p> <p>本文转自Q?a >http://blog.csdn.net/caoyinghui1986/archive/2008/06/02/2501914.aspx</a></p> </div> <img src ="http://www.tkk7.com/fhtdy2004/aggbug/290395.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/fhtdy2004/" target="_blank">Frank_Fang</a> 2009-08-08 23:35 <a href="http://www.tkk7.com/fhtdy2004/archive/2009/08/08/290395.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解惑 spring 嵌套事务http://www.tkk7.com/fhtdy2004/archive/2009/08/02/289424.htmlFrank_FangFrank_FangSat, 01 Aug 2009 16:05:00 GMThttp://www.tkk7.com/fhtdy2004/archive/2009/08/02/289424.htmlhttp://www.tkk7.com/fhtdy2004/comments/289424.htmlhttp://www.tkk7.com/fhtdy2004/archive/2009/08/02/289424.html#Feedback0http://www.tkk7.com/fhtdy2004/comments/commentRss/289424.htmlhttp://www.tkk7.com/fhtdy2004/services/trackbacks/289424.html 解惑 spring 嵌套事务 http://www.javaeye.com/topic/35907?page=1

Spring声明式事务管理源码解M事务开?http://www.javaeye.com/topic/87426

Spring声明式事务管理源码解M事务提交  http://www.javaeye.com/topic/88189

Frank_Fang 2009-08-02 00:05 发表评论
]]>
【{】关于oracle数据库隔ȝ别isolation level 的一些问题!http://www.tkk7.com/fhtdy2004/archive/2009/08/01/292542.htmlFrank_FangFrank_FangSat, 01 Aug 2009 10:16:00 GMThttp://www.tkk7.com/fhtdy2004/archive/2009/08/01/292542.htmlhttp://www.tkk7.com/fhtdy2004/comments/292542.htmlhttp://www.tkk7.com/fhtdy2004/archive/2009/08/01/292542.html#Feedback0http://www.tkk7.com/fhtdy2004/comments/commentRss/292542.htmlhttp://www.tkk7.com/fhtdy2004/services/trackbacks/292542.htmloracle中锁的类型:
然后再读时不需要加锁,q一点Oracle的共享锁的实C上一中的共享锁原理有点不同Q?/strong>


今天在查看oracle官方文档lock的那一部分的时候发C个新的概念,isolation level (数据隔离U别)Q虽然以前学q,但是忘的差不多了?br /> 隔离U别Qisoation eveQ?/strong>

隔离U别定义了事务与事务之间的隔ȝ度?/p>

隔离U别与ƈ发性是互ؓ矛盾的:隔离E度高Q数据库的ƈ发性越差;隔离E度低Q数据库的ƈ发性越好?/p>

ANSI/ISO SQ92标准定义了一些数据库操作的隔ȝ别:

  • 未提交读Qread uncommittedQ?
  • 提交读(read committedQ?nbsp; 
  • 重复读(repeatabe readQ?nbsp; 
  • 序列化(seriaizabeQ?

通过一些现象,可以反映出隔ȝ别的效果。这些现象有Q?/p>

  • 更新丢失Qost updateQ:当系l允怸个事务同时更新同一数据是,发生更新丢失?nbsp; 
  • 脏读Qdirty readQ:当一个事务读取另一个事务尚未提交的修改Ӟ产生脏读?
  • ?重复读(nonrepeatabe readQ:同一查询在同一事务中多ơ进行,׃其他提交事务所做的修改或删除,每次q回不同的结果集Q此时发生非重复诅R?A transaction rereads data it has previousy read and finds that another committed transaction has modified or deeted the data. )
  • q?像(phantom readQ:同一查询在同一事务中多ơ进行,׃其他提交事务所做的插入操作Q每ơ返回不同的l果集,此时发生qd诅R?A transaction reexecutes a query returning a set of rows that satisfies a search condition and finds that another committed transaction has inserted additiona rows that satisfy the condition. )

下面是隔ȝ别及其对应的可能出现或不可能出现的现?/p>
Dirty Read NonRepeatabe Read Phantom Read
Read uncommitted Possible Possible Possible
Read committed not possible Possible Possible
Repeatabe read not possible not possible Possible
Seriaizabe not possible not possible not possible

 

ORACE的隔ȝ?/strong>

ORACE提供了SQ92标准中的read committed和seriaizabeQ同时提供了非SQ92标准的read-ony?/p>

read committedQ?/strong>

  • q是ORACE~省的事务隔ȝ别?/font>
  • 事务中的每一条语句都遵从语句U的M致性?
  • 保证不会脏读Q但可能出现非重复读和像?

seriaizabeQ(串行执行事务Qƈ发性最)

  • 单地_seriaizabe是使事务看h象是一个接着一个地序地执行?/font>
  • 仅仅能看见在本事务开始前由其它事务提交的更改和在本事务中所做的更改?
  • 保证不会出现非重复读和像?
  • Seriaizabe隔离U别提供了read-ony事务所提供的读一致性(事务U的M致性)Q同时又允许DM操作?

如果有在seriaizabe事务开始时未提交的事务在seriaizabe事务l束之前修改了seriaizabe事务要修改的行q进行了提交Q则seriaizabe事务不会dq些变更Q因此发生无法序列化讉K的错误。(换一U解释方法:只要在seriaizabe事务开始到l束之间有其他事务对seriaizabe事务要修改的东西q行了修改ƈ提交了修改,则发生无法序列化讉K的错?/strong>。)

If a serializable transaction contains data manipulation language (DML) that attempts to update any resource that may have been updated in a transaction uncommitted at the start of the serializable transaction, Qƈ且修改在后来被提交而没有回滚)Qthen the DML statement fails. q回的错误是ORA-08177: Cannot serialize access for this transaction?/p>

ORACE在数据块中记录最q对数据行执行修Ҏ作的N个事务的信息Q目的是定本事务开始时Q是否存在未提交的事务修改了本事务将要修改的行。具体见英文Q?/p>

Oracle permits a serializable transaction to modify a data row only if it can determine that prior changes to the row were made by transactions that had committed when the serializable transaction began.

To make this determination efficiently, Oracle uses control information stored in the data block that indicates which rows in the block contain committed and uncommitted changes. In a sense, the block contains a recent history of transactions that affected each row in the block. The amount of history that is retained is controlled by the INITRANS parameter of CREATE TABLE and ALTER TABLE. Under some circumstances, Oracle may have insufficient history information to determine whether a row has been updated by a "too recent" transaction. This can occur when many transactions concurrently modify the same data block, or do so in a very short period. You can avoid this situation by setting higher values of INITRANS for tables that will experience many transactions updating the same blocks. Doing so will enable Oracle to allocate sufficient storage in each block to record the history of recent transactions that accessed the block.

The INITRANS ParameterQOracle stores control information in each data block to manage access by concurrent transactions. Therefore, if you set the transaction isolation level to serializable, you must use the ALTER TABLE command to set INITRANS to at least 3. This parameter will cause Oracle to allocate sufficient storage in each block to record the history of recent transactions that accessed the block. Higher values should be used for tables that will undergo many transactions updating the same blocks.

read-onyQ?/strong>

  • 遵从事务U的M致性,仅仅能看见在本事务开始前由其它事务提交的更改?
  • 不允许在本事务中q行DM操作?
  • read ony是seriaizabe的子集。它们都避免了非重复dqd。区别是在read ony中是只读Q而在seriaizabe中可以进行DM操作?
  • Export with CONSISTENT = Y sets the transaction to read-ony.

 

read committed和seriaizabe的区别和联系Q?/strong>

事务1先于事务2开始,q保持未提交状态。事?惌修改正被事务1修改的行。事?{待。如果事?回滚Q则事务2Q不论是read committedq是seriaizabe方式Q进行它惌做的修改。如果事?提交Q则当事?是read committed方式Ӟq行它想要做的修改;当事?是seriaizabe方式Ӟp|q报?#8220;Cannot seriaize access”Q因Z?看不见事?提交的修改,且事?惛_事务1修改的基上再做修攏V?/p>

即seriaizabe不允许存在事务嵌?/p>

具体见英文:

Both read committed and serializable transactions use row-level locking, and both will wait if they try to change a row updated by an uncommitted concurrent transaction. The second transaction that tries to update a given row waits for the other transaction to commit or roll back and release its lock. If that other transaction rolls back, the waiting transaction (regardless of its isolation mode) can proceed to change the previously locked row, as if the other transaction had not existed. However, if the other (blocking) transaction commits and releases its locks, a read committed transaction proceeds with its intended update. A serializable transaction, however, fails with the error "Cannot serialize access", because the other transaction has committed a change that was made since the serializable transaction began.

read committed和seriaizabe可以在ORACEq行服务器中使用?/p>

关于SET TRANSACTION READ WRITEQread write和read committed 应该是一L。在L面,它们都避免了脏读Q但都无法实现重复读。虽然没有文档说明read write在写斚w与read committed一_但显然它在写的时候会加排他锁以避免更C失。在加锁的过E中Q如果遇到待锁定资源无法锁定Q应该是{待而不是放弃。这?read committed一致?/p>

语句U的M致?/p>

  • ORACE保证语句U的M致性,即一个语句所处理的数据集是在单一旉点上的数据集Q这个时间点是这个语句开始的旉?
  • 一个语句看不见在它开始执行后提交的修攏V?
  • 对于DM语句Q它看不见由自己所做的修改Q即DM语句看见的是它本w开始执行以前存在的数据?

事务U的M致?/p>

  • 事务U的M致性保证了可重复读Qƈ保证不会出现qd?

讄隔离U别

讄一个事务的隔离U别

  • SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
  • SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
  • SET TRANSACTION READ ONLY;

讄增个会话的隔ȝ?/p>

  • ATER SESSION SET ISOLATION_LEVE SERIALIZABLE;
  • ATER SESSION SET ISOLATION_LEVE READ COMMITTED;

 

Choice of Isolation Level

Application designers and developers should choose an isolation level based on application performance and consistency needs as well as application coding requirements.

For environments with many concurrent users rapidly submitting transactions, designers must assess transaction performance requirements in terms of the expected transaction arrival rate and response time demands. Frequently, for high-performance environments, the choice of isolation levels involves a trade-off between consistency and concurrency.

Read Committed Isolation

For many applications, read committed is the most appropriate isolation level. Read committed isolation can provide considerably more concurrency with a somewhat increased risk of inconsistent results due to phantoms and non-repeatable reads for some transactions.

Many high-performance environments with high transaction arrival rates require more throughput and faster response times than can be achieved with serializable isolation. Other environments that supports users with a very low transaction arrival rate also face very low risk of incorrect results due to phantoms and nonrepeatable reads. Read committed isolation is suitable for both of these environments.

两种情况Q(1Q在事务量大、高性能的计环境,需要更高的吞吐量和响应旉Q(2Q事务数,q且发生qd和不可重复读的几率的比较?/p>

Oracle read committed isolation provides transaction set consistency for every query. That is, every query sees data in a consistent state. Therefore, read committed isolation will suffice for many applications that might require a higher degree of isolation if run on other database management systems that do not use multiversion concurrency control.

Read committed isolation mode does not require application logic to trap the "Cannot serialize access" error and loop back to restart a transaction. In most applications, few transactions have a functional need to issue the same query twice, so for many applications protection against phantoms and non-repeatable reads is not important. Therefore many developers choose read committed to avoid the need to write such error checking and retry code in each transaction.

Serializable Isolation

Oracle's serializable isolation is suitable for environments where there is a relatively low chance that two concurrent transactions will modify the same rows and the long-running transactions are primarily read-only. It is most suitable for environments with large databases and short transactions that update only a few rows.

Q?Q适合于很存在两个事务同时修改同一条记录的情况

Q?Q长事务以只Mؓ?/p>

Q?Q大型数据库q且每个短事务只修改很少的记?/p>

Serializable isolation mode provides somewhat more consistency by protecting against phantoms and nonrepeatable reads and can be important where a read/write transaction executes a query more than once.

Unlike other implementations of serializable isolation, which lock blocks for read as well as write, Oracle provides nonblocking queries and the fine granularity of row-level locking, both of which reduce write/write contention. For applications that experience mostly read/write contention, Oracle serializable isolation can provide significantly more throughput than other systems. Therefore, some applications might be suitable for serializable isolation on Oracle but not on other systems.

All queries in an Oracle serializable transaction see the database as of a single point in time, so this isolation level is suitable where multiple consistent queries must be issued in a read/write transaction. A report-writing application that generates summary data and stores it in the database might use serializable mode because it provides the consistency that a READ ONLY transaction provides, but also allows INSERT, UPDATE, and DELETE.




Frank_Fang 2009-08-01 18:16 发表评论
]]>
【{】详解spring事务属?/title><link>http://www.tkk7.com/fhtdy2004/archive/2009/08/01/289387.html</link><dc:creator>Frank_Fang</dc:creator><author>Frank_Fang</author><pubDate>Sat, 01 Aug 2009 06:17:00 GMT</pubDate><guid>http://www.tkk7.com/fhtdy2004/archive/2009/08/01/289387.html</guid><wfw:comment>http://www.tkk7.com/fhtdy2004/comments/289387.html</wfw:comment><comments>http://www.tkk7.com/fhtdy2004/archive/2009/08/01/289387.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.tkk7.com/fhtdy2004/comments/commentRss/289387.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/fhtdy2004/services/trackbacks/289387.html</trackback:ping><description><![CDATA[     摘要: http://www.javaeye.com/topic/78674 回帖中也有些需要注意的地方。。可以仔l看? 先了解一下数据库q发操作带来的数据不一致性包括三c:丢失修改Q不可重复读Q第二个事务修改Q或插入Q或删除Q应该说q读是指插入或删除的情况Q,脏读?  T1 ...  <a href='http://www.tkk7.com/fhtdy2004/archive/2009/08/01/289387.html'>阅读全文</a><img src ="http://www.tkk7.com/fhtdy2004/aggbug/289387.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/fhtdy2004/" target="_blank">Frank_Fang</a> 2009-08-01 14:17 <a href="http://www.tkk7.com/fhtdy2004/archive/2009/08/01/289387.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【{】解析oracle的ROWNUM http://www.tkk7.com/fhtdy2004/archive/2009/07/30/289189.htmlFrank_FangFrank_FangThu, 30 Jul 2009 15:43:00 GMThttp://www.tkk7.com/fhtdy2004/archive/2009/07/30/289189.htmlhttp://www.tkk7.com/fhtdy2004/comments/289189.htmlhttp://www.tkk7.com/fhtdy2004/archive/2009/07/30/289189.html#Feedback1http://www.tkk7.com/fhtdy2004/comments/commentRss/289189.htmlhttp://www.tkk7.com/fhtdy2004/services/trackbacks/289189.html对于rownum来说它是oraclepȝ序分配Z查询q回的行的编Pq回的第一行分配的?Q第二行?Q依此类推,q个伪字D可以用于限制查询返回的总行敎ͼ而且rownum不能以Q何表的名UC为前~?br /> 举例说明Q?br /> 例如表:student(学生)表,表结构ؓQ?br /> ID       char(6)      --学号
name    VARCHAR2(10)   --姓名
create table student (ID char(6), name VARCHAR2(100));
insert into sale values('200001',‘张一’);
insert into sale values('200002',‘王二’);
insert into sale values('200003',‘李三’);
insert into sale values('200004',‘赵四’);
commit;

(1) rownum 对于{于某值的查询条g
如果希望扑ֈ学生表中W一条学生的信息Q可以用rownum=1作ؓ条g。但是想扑ֈ学生表中W二条学生的信息Q用rownum=2l果查不到数据。因为rownum都是?开始,但是1以上的自然数在rownum做等于判断是时认为都是false条gQ所以无法查到rownum = nQn>1的自然数Q?br /> SQL> select rownum,id,name from student where rownum=1;Q可以用在限制返回记录条数的地方Q保证不出错Q如Q隐式游标)
SQL> select rownum,id,name from student where rownum=1;
    ROWNUM ID     NAME
---------- ------ ---------------------------------------------------
         1 200001 张一
SQL> select rownum,id,name from student where rownum =2;
    ROWNUM ID     NAME
---------- ------ ---------------------------------------------------

Q?Qrownum对于大于某值的查询条g
   如果xCW二行记录以后的记录Q当使用rownum>2是查不出记录的,原因是由于rownum是一个L?开始的伪列QOracle 认ؓrownum> n(n>1的自然数)q种条g依旧不成立,所以查不到记录
SQL> select rownum,id,name from student where rownum >2;
ROWNUM ID     NAME
---------- ------ ---------------------------------------------------
那如何才能找到第二行以后的记录呀。可以用以下的子查询方法来解决。注意子查询中的rownum必须要有别名Q否则还是不会查录来Q这是因为rownum不是某个表的列,如果不v别名的话Q无法知道rownum是子查询的列q是L询的列?br /> SQL>select * from(select rownum no ,id,name from student) where no>2;
        NO ID     NAME
---------- ------ ---------------------------------------------------
         3 200003 李三
         4 200004 赵四
SQL> select * from(select rownum,id,name from student)where rownum>2;
    ROWNUM ID     NAME
---------- ------ ---------------------------------------------------

Q?Qrownum对于于某值的查询条g
如果x到第三条记录以前的记录,当用rownum<3是能得到两条记录的。显然rownum对于rownum<nQ?n>1的自然数Q的条g认ؓ是成立的Q所以可以找到记录?br /> SQL> select rownum,id,name from student where rownum <3;
    ROWNUM ID     NAME
---------- ------ ---------------------------------------------------
        1 200001 张一
        2 200002 王二
lg几种情况Q可能有时候需要查询rownum在某区间的数据,那怎么办呀从上可以看出rownum对小于某值的查询条g是h为true的,rownum对于大于某值的查询条g直接认ؓ是false的,但是可以间接的让它{为是true的。那必M用子查询。例如要查询rownum在第二行到第三行之间的数据,包括W二行和W三行数据,那么我们只能写以下语句,先让它返回小于等于三的记录行Q然后在L询中判断新的rownum的别名列大于{于二的记录行。但是这L操作会在大数据集中媄响速度?br /> SQL> select * from (select rownum no,id,name from student where rownum<=3 ) where no >=2;
        NO ID     NAME
---------- ------ ---------------------------------------------------
         2 200002 王二
         3 200003 李三

Q?Qrownum和排?br /> Oracle中的rownum的是在取数据的时候生的序号Q所以想Ҏ定排序的数据L定的rowmun行数据就必须注意了?br /> SQL> select rownum ,id,name from student order by name;
    ROWNUM ID     NAME
---------- ------ ---------------------------------------------------
         3 200003 李三
         2 200002 王二
         1 200001 张一
         4 200004 赵四
可以看出Qrownumq不是按照name列来生成的序受系l是按照记录插入时的序l记录排的号Qrowid也是序分配的。ؓ了解册个问题,必须使用子查?br /> SQL> select rownum ,id,name from (select * from student order by name);
    ROWNUM ID     NAME
---------- ------ ---------------------------------------------------
         1 200003 李三
         2 200002 王二
         3 200001 张一
         4 200004 赵四
q样成了按name排序Qƈ且用rownum标出正确序号Q有到大)
W者在工作中有一上百万条记录的表Q在jsp面中需对该表进行分|C, 便考虑用rownum来作Q下面是具体Ҏ(每页
昄20?Q?
“select * from tabname where rownum<20 order by name" 但却发现oracle却不能按自己的意愿来执行Q而是先随?br /> ?0条记录,然后?order byQ后l咨询oracle,说rownum实pP想用的话Q只能用子查?来实现先排序Q后
rownumQ方法如下:
"select * from (select * from tabname order by name) where rownum<20",但这样一来,效率会较低很多?
后经W者试验,只需在order by 的字D上加主键或索引卛_让oracle先按 该字D|序,然后再rownumQ方法不变:
   “select * from tabname where rownum<20 order by name"

取得某列中第N大的?/p>

select column_name from
(select table_name.*,dense_rank() over (order by column desc) rank from table_name)
where rank = &NQ?
 假如要返回前5条记录:

  select * from tablename where rownum<6;(或是rownum <= 5 或是rownum != 6)
假如要返回第5-9条记录:

select * from tablename
where …
and rownum<10
minus
select * from tablename
where …
and rownum<5
order by name
选出l果后用name排序昄l果?先选再排序)

注意Q只能用以上W号(<?lt;=?=)?/p>

select * from tablename where rownum != 10;q回的是前9条记录?
不能用:>,>=,=,Between...and。由于rownum是一个L?开始的伪列QOracle 认ؓq种条g 不成立,查不到记?

另外Q这个方法更快:

select * from (
select rownum r,a from yourtable
where rownum <= 20
order by name )
where r > 10
q样取出W?1-20条记?(先选再排序再?

要先排序再选则ȝselect嵌套Q内层排序外层选?
rownum是随着l果集生成的Q一旦生成,׃会变化了Q同?生成的结果是依次递加的,没有1永q不会有2!
rownum 是在 查询集合产生的过E中产生的伪列,q且如果where条g中存?rownum 条g的话Q则:

1Q?假如 判定条g是常量,则:
只能 rownum = 1, <= 大于1 的自然数Q?= 大于1 的数是没有结果的Q?大于一个数也是没有l果?
?当出C?rownum 不满x件的时候则 查询l束   this is stop key!

2: 当判定g是常量的时?
若条件是 = var , 则只有当 var ? 的时候才满条gQ这个时候不存在 stop key ,必须q行 full scan ,Ҏ个满_他where条g的数据进行判?
选出一行后才能去选rownum=2的行……



Frank_Fang 2009-07-30 23:43 发表评论
]]>
【{】drop、truncate和delete的区?/title><link>http://www.tkk7.com/fhtdy2004/archive/2009/07/28/288796.html</link><dc:creator>Frank_Fang</dc:creator><author>Frank_Fang</author><pubDate>Tue, 28 Jul 2009 11:43:00 GMT</pubDate><guid>http://www.tkk7.com/fhtdy2004/archive/2009/07/28/288796.html</guid><wfw:comment>http://www.tkk7.com/fhtdy2004/comments/288796.html</wfw:comment><comments>http://www.tkk7.com/fhtdy2004/archive/2009/07/28/288796.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/fhtdy2004/comments/commentRss/288796.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/fhtdy2004/services/trackbacks/288796.html</trackback:ping><description><![CDATA[<p>查到很多Q能理解的就q几条了Q?/p> <p>   Q?Q回?日志。DELETE语句执行删除的过E是每次从表中删除一行,q且同时该行的的删除操作作Z务记录在日志中保存以便进行进行回滚操作。TRUNCATE TABLE 则一ơ性地从表中删除所有的数据ƈ不把单独的删除操作记录记入日志保存,删除行是不能恢复的。ƈ且在删除的过E中不会ȀzM表有关的删除触发器。执行速度快?/p> <p>   Q?Q表和烦引所占空间。当表被TRUNCATE 后,q个表和索引所占用的空间会恢复到初始大,而DELETE操作不会减少表或索引所占用的空间?/p> <p>   Q?Q应用范围。TRUNCATE 只能对TABLEQDELETE可以是table,view,synonym</p> <p>   Q?QTRUNCATE 和DELETE只删除数据,而DROP则删除整个表Q结构和数据Q?</p> <p>   Q?QTRUNCATE 是DDLQDELETE是DML?/p> <p> <br /> truncate、deleteQ不带where子句Q与drop的异同点Q?br /> 相同之处Q?br />     三者均会删除表内的data?br /> 不同点:<br />    <1>、truncate与不带where的delete Q只删除数据Q而不删除表的l构Q定义)<br />         drop语句删除表的结构被依赖的约束(constrain),触发器(trigger), 索引Qindex);依赖于该表的存储q程/函数被保留Q但其状态会变ؓQinvalid?br />    <2>、delete语句为DMLQdata maintain Language),q个操作会被攑ֈ rollback segment?事务提交后才生效。如果有相应?tigger,执行的时候将被触发?br />        truncate、drop是DLLQdata define language),操作立即生效Q原数据不放?rollback segment中,不能回滚Q操作不触发 trigger?br />    <3>、delete语句不媄响表所占用?extentQ段Q?高水U(high watermark)保持原位|不动?br />          drop语句表所占用的空间全释放掉?br />          truncate语句~省情况下将I间释放?minextents ?extent,除非使用 renuse storage;truncate 会将高水U?high watermark)复位Q回到最初位|)?br />    <4>、速度Q?br />       一般而言Qdrop > truncate > delete?br />    <5>、安全性:<br />        在没有备份情况下Q}慎?drop ?truncate。要删除部分数据行采?delete且注意结合where来约束媄响范围。回滚段要够大。要删除表用drop;若想保留表而将表中数据删除Q如果于事务无关Q用truncate卛_实现。如果和事务有关Q或老师惌发trigger,q是用delete?br />       如果是整理表内部的碎片,可以用truncateq结合reuse storage,再重新导?插入数据?br /> 附Microsoft SQL<br /> Truncate是SQL中的一个删除数据表内容的语句,用法是:<br /> TRUNCATE TABLE [Table Name]?br /> 下面是对Truncate语句在MSSQLServer2000中用法和原理的说明:<br /> Truncate table 表名 速度?而且效率?因ؓ: <br /> truncate table 在功能上与不?WHERE 子句?DELETE 语句相同Q二者均删除表中的全部行。但 TRUNCATE TABLE ?DELETE 速度快,且用的pȝ和事务日志资源少?<br /> DELETE 语句每次删除一行,q在事务日志中ؓ所删除的每行记录一VTRUNCATE TABLE 通过释放存储表数据所用的数据|删除数据Qƈ且只在事务日志中记录늚释放?<br /> TRUNCATE TABLE 删除表中的所有行Q但表结构及其列、约束、烦引等保持不变。新行标识所用的计数值重|ؓ该列的种子。如果想保留标识计数|h?DELETE。如果要删除表定义及其数据,请?DROP TABLE 语句?<br /> 对于?FOREIGN KEY U束引用的表Q不能?TRUNCATE TABLEQ而应使用不带 WHERE 子句?DELETE 语句。由?TRUNCATE TABLE 不记录在日志中,所以它不能Ȁz触发器?<br /> TRUNCATE TABLE 不能用于参与了烦引视囄?/p> <img src ="http://www.tkk7.com/fhtdy2004/aggbug/288796.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/fhtdy2004/" target="_blank">Frank_Fang</a> 2009-07-28 19:43 <a href="http://www.tkk7.com/fhtdy2004/archive/2009/07/28/288796.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【{】MySql常用命ohttp://www.tkk7.com/fhtdy2004/archive/2009/07/25/288277.htmlFrank_FangFrank_FangFri, 24 Jul 2009 16:24:00 GMThttp://www.tkk7.com/fhtdy2004/archive/2009/07/25/288277.htmlhttp://www.tkk7.com/fhtdy2004/comments/288277.htmlhttp://www.tkk7.com/fhtdy2004/archive/2009/07/25/288277.html#Feedback0http://www.tkk7.com/fhtdy2004/comments/commentRss/288277.htmlhttp://www.tkk7.com/fhtdy2004/services/trackbacks/288277.htmlmysql alter命定
关键? mysql
mysql alter 语句用法,d、修攏V删除字D늭


//主键549830479

   alter table tabelname add new_field_id int(5) unsigned default 0 not null auto_increment ,add primary key (new_field_id);
//增加一个新?49830479

   alter table t2 add d timestamp;
alter table infos add ex tinyint not null default '0';
//删除?49830479

   alter table t2 drop column c;
//重命名列549830479

   alter table t1 change a b integer;

//改变列的cd549830479

   alter table t1 change b b bigint not null;
alter table infos change list list tinyint not null default '0';

//重命名表549830479

   alter table t1 rename t2;
加烦?49830479

   mysql> alter table tablename change depno depno int(5) not null;
mysql> alter table tablename add index 索引?(字段?[Q字D名2 …]);
mysql> alter table tablename add index emp_name (name);
加主关键字的索引549830479

mysql> alter table tablename add primary key(id);
加唯一限制条g的烦?49830479

  mysql> alter table tablename add unique emp_name2(cardnumber);
删除某个索引549830479

   mysql>alter table tablename drop index emp_name;
修改表:549830479

增加字段Q?49830479

   mysql> ALTER TABLE table_name ADD field_name field_type;
修改原字D名U及cdQ?49830479

   mysql> ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;
删除字段Q?49830479

   mysql> ALTER TABLE table_name DROP field_name;

 

mysql 常用增删Ҏ命定
关键? mysql增删Ҏ
插入一条记?
          mysql> insert into table_name (column_name1,column_name2,.) values (value1,value2,..);
更新一条记录:
          mysql> update tbl_name
set col_name1=expr1 [, col_name2=expr2 ...][WHERE where_definition]
[ORDER BY ...][LIMIT row_count];
删除一条记录:
         mysql>delete from table_name where id=XX;
删除整个表的数据Q?
         mysql> drop from table_name;
查询一条记录:
         mysql>select * from table_name where id=XX;

 

 

mysql中删除部分重复记录的Ҏ
关键? mysql中删除部分重复记?
假设person表中有三个字D?分别是id(自增) name age 部分记录中的name ,age出现重复
比如
id             name              age
1           zhangsan            20
2           zhangsan            20
3               lisi                    25
4               lisi                    25
1 ,2 部分重复Q?,4也是部分重复 Q现在四条记录我只保留不重复的两条。删除方法如下:

1.按name,age分组查询出所有不重复的idq放入到tmp表中
  create table tmp select min(id) as id from person group by name,age;

2.Ҏ上面查询出的id号从person表中查询出所有的数据q放到表tmp2?
  create table tmp2 select person.* from person,tmp where person.id = tmp.id;

3.删除person?
  drop table person;

4.把tmp2重命名ؓperson
  rename table tmp2 to person;

 


 



Frank_Fang 2009-07-25 00:24 发表评论
]]>
[转]MySQL索引http://www.tkk7.com/fhtdy2004/archive/2009/07/25/288274.htmlFrank_FangFrank_FangFri, 24 Jul 2009 16:11:00 GMThttp://www.tkk7.com/fhtdy2004/archive/2009/07/25/288274.htmlhttp://www.tkk7.com/fhtdy2004/comments/288274.htmlhttp://www.tkk7.com/fhtdy2004/archive/2009/07/25/288274.html#Feedback0http://www.tkk7.com/fhtdy2004/comments/commentRss/288274.htmlhttp://www.tkk7.com/fhtdy2004/services/trackbacks/288274.html
假如我们创徏了一个testIndex?
create TABLE testIndex(i_testID INT NOT NULL,vc_Name VARCHAR(16) NOT NULL);

我们随机向里面插入了1000条记录,其中有一?
    i_testID    vc_Name
      555    erquan
    
在查找vc_Name="erquan"的记?
select * FROM testIndex where vc_Name='erquan';
Ӟ如果在vc_Name上已l徏立了索引QMySql无须M扫描Q即准确可找到该记录Q相反,MySql会扫描所有记录,卌查询1000ơ啊~~可以索引查询速度提高100倍?

一、烦引分单列索引和组合烦?
   单列索引Q即一个烦引只包含单个列,一个表可以有多个单列烦引,但这不是l合索引?
   l合索引Q即一个烦包含多个列?

二、介l一下烦引的cd

    1.普通烦引?
      q是最基本的烦引,它没有Q何限制。它有以下几U创建方式:
       Q?Q创建烦引:create INDEX indexName ON tableName(tableColumns(length));如果是CHAR,VARCHARcdQlength可以于字段实际长度;如果?BLOB ?TEXT cdQ必L定lengthQ下同?
      Q?Q修改表l构Qalter tableName ADD INDEX [indexName] ON (tableColumns(length))
      Q?Q创的时候直接指定:create TABLE tableName ( [...], INDEX [indexName] (tableColumns(length)) ;
   
    2.唯一索引?
       它与前面?普通烦?cMQ不同的是Q烦引列的值必d一Q但允许有空倹{如果是l合索引Q则列值的l合必须唯一。它有以下几U创建方式:
       Q?Q创建烦引:create UNIQUE INDEX indexName ON tableName(tableColumns(length))
      Q?Q修改表l构Qalter tableName ADD UNIQUE [indexName] ON (tableColumns(length))
      Q?Q创的时候直接指定:create TABLE tableName ( [...], UNIQUE [indexName] (tableColumns(length));

     3.主键索引
        它是一U特D的唯一索引Q不允许有空倹{一般是在徏表的时候同时创Z键烦引:create TABLE testIndex(i_testID INT NOT NULL AUTO_INCREMENT,vc_Name VARCHAR(16) NOT NULL,PRIMARY KEY(i_testID)); 当然也可以用alter命o?
       CQ一个表只能有一个主键?

      4.全文索引
        MySQL?.23.23版开始支持全文烦引和全文索。这里不作讨论,呵呵~~

    删除索引的语法:drop INDEX index_name ON tableName

三、单列烦引和l合索引

    Z形象地对比两者,再徏一个表Q?
    create TABLE myIndex ( i_testID INT NOT NULL AUTO_INCREMENT, vc_Name VARCHAR(50) NOT NULL, vc_City VARCHAR(50) NOT NULL, i_Age INT NOT NULL, i_SchoolID INT NOT NULL, PRIMARY KEY (i_testID) );

    在这10000条记录里??下地分布?条vc_Name="erquan"的记录,只不qcity,age,school的组合各不相同?
  来看q条T-SQLQ?
    select i_testID FROM myIndex where vc_Name='erquan' AND vc_City='郑州' AND i_Age=25;

    首先考虑建单列烦引:
     在vc_Name列上建立了烦引。执行T-SQLӞMYSQL很快目标锁定在了vc_Name=erquan?条记录上Q取出来攑ֈ一中间l果集。在q个l果集里Q先排除掉vc_City不等?郑州"的记录,再排除i_Age不等?5的记录,最后筛选出唯一的符合条件的记录?

    虽然在vc_Name上徏立了索引Q查询时MYSQL不用扫描整张表,效率有所提高Q但L们的要求q有一定的距离。同LQ在vc_City和i_Age分别建立的单列烦引的效率怼?

    Zq一步榨取MySQL的效率,p考虑建立l合索引。就是将vc_Name,vc_City,i_Age建到一个烦引里Q?
    alter TABLE myIndex ADD INDEX name_city_age (vc_Name(10),vc_City,i_Age);--注意了,Ӟvc_Name长度?0Q这里ؓ什么用10呢?因ؓ一般情况下名字的长度不会超q?0Q这样会加速烦引查询速度Q还会减烦引文件的大小Q提高insert的更新速度?

    执行T-SQLӞMySQL无须扫描M记录到扑ֈ唯一的记录!Q?

     肯定有h要问了,如果分别在vc_Name,vc_City,i_Age上徏立单列烦引,让该表有3个单列烦引,查询时和上述的组合烦引效率一样吧Q嘿嘿,大不一Pq远低于我们的组合烦引~~虽然此时有了三个索引Q但MySQL只能用到其中的那个它认ؓg是最有效率的单列索引?

    建立q样的组合烦引,其实是相当于分别建立?
        vc_Name,vc_City,i_Age
        vc_Name,vc_City
        vc_Name
    q样的三个组合烦引!Z么没有vc_City,i_Age{这Ll合索引呢?q是因ؓmysqll合索引"最左前~"的结果。简单的理解是只从最左面的开始组合。ƈ不是只要包含q三列的查询都会用到该组合烦引,下面的几个T-SQL会用刎ͼ
    select * FROM myIndex WHREE vc_Name="erquan" AND vc_City="郑州"
    select * FROM myIndex WHREE vc_Name="erquan"
而下面几个则不会用到Q?
    select * FROM myIndex WHREE i_Age=20 AND vc_City="郑州"
    select * FROM myIndex WHREE vc_City="郑州"

四、用烦?
     到此你应该会建立、用烦引了吧?但什么情况下需要徏立烦引呢Q一般来_在where和join中出现的列需要徏立烦引,但也不完全如此,因ؓ MySQL只对 <Q?lt;=Q?Q?gt;Q?gt;=QBETWEENQINQ以及某些时候的like(后面有说?才会使用索引?
    select t.vc_Name FROM testIndex t LEFT join myIndex m ON t.vc_Name=m.vc_Name where m.i_Age=20 AND m.vc_City='郑州'  Ӟ有对myIndex表的vc_City和i_Age建立索引的需要,׃testIndex表的vc_Name开出现在了join子句中,也有对它建立索引的必要?

    刚才提到了,只有某些时候的like才需建立索引Q是的。因为在以通配W?% ?_ 开头作查询ӞMySQL不会使用索引Q如
    select * FROM myIndex where vc_Name like'erquan%'
会用烦引,?
    select * FROM myIndex wheret vc_Name like'%erquan'
    ׃会用烦引了?


五、烦引的不之处

    上面说了那么多烦引的好话Q它真的有像传说中那么优U么?当然会有~点了?

    1.虽然索引大大提高了查询速度Q同时却会降低更新表的速度Q如对表q行insert、update和delete。因为更新表ӞMySQL不仅要保存数据,q要保存一下烦引文?

    2.建立索引会占用磁盘空间的索引文g。一般情况这个问题不太严重,但如果你在一个大表上创徏了多U组合烦引,索引文g的会膨胀很快?


    尾Q?
    讲了q么多,无非是想利用索引提高数据库的执行效率。不q烦引只是提高效率的一个因素。如果你的MySQL有大数据的表Q就需要花旉研究建立最优秀的烦引或优化查询语句?

Frank_Fang 2009-07-25 00:11 发表评论
]]>
[转]left outer join,inner join,right outer join的区?/title><link>http://www.tkk7.com/fhtdy2004/archive/2009/07/24/288250.html</link><dc:creator>Frank_Fang</dc:creator><author>Frank_Fang</author><pubDate>Fri, 24 Jul 2009 10:26:00 GMT</pubDate><guid>http://www.tkk7.com/fhtdy2004/archive/2009/07/24/288250.html</guid><wfw:comment>http://www.tkk7.com/fhtdy2004/comments/288250.html</wfw:comment><comments>http://www.tkk7.com/fhtdy2004/archive/2009/07/24/288250.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/fhtdy2004/comments/commentRss/288250.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/fhtdy2004/services/trackbacks/288250.html</trackback:ping><description><![CDATA[使用关系代数合ƈ数据<br /> 1 关系代数<br /> 合ƈ数据集合的理论基是关pM敎ͼ它是由E.F.Codd?970q提出的?br /> 在关pM数的形式化语a中:<br />         用表、或者数据集合表C关pL者实体?br />         用行表示元组?br />          用列表示属性?br /> 关系代数包含以下8个关p运符<br />         选取――返回满x定条件的行?br />          投媄――从数据集合中返回指定的列?br />          W卡积――是关系的乘法,它将分别来自两个数据集合中的行以所有可能的方式q行l合?br />          q――关pȝ加法和减法,它可以在行的方向上合q两个表中的数据Q就像把一个表垒在另一个表之上一栗?br />          交――返回两个数据集合所共有的行?br />          差――返回只属于一个数据集合的行?br />          q接――在水^方向上合q两个表Q其Ҏ是:两个表中在共同数据上怺匚w的那些行合ƈh?br />          除――返回两个数据集之间的精匹配?br /> 此外Q作ZU实现现代关pM数运的ҎQSQLq提供了Q?br />          子查询――类gq接Q但更灵z;在外部查询中Q方式可以用表辑ּ、列表或者数据集合的地方都可以用子查询的结果?br /> 本章主要讲q多U类型的q接、简单的和相关的子查询、几U类型的q、关p除以及其他的内宏V?br /> 2 使用q接<br /> 2.1 q接cd<br /> 在关pMCQ连接运是׃个笛卡尔U运和一个选取q算构成的。首先用W卡积完成对两个数据集合的乘运,然后对生成的l果集合q行选取q算Q确?只把分别来自两个数据集合q且h重叠部分的行合ƈ在一赗连接的全部意义在于在水qx向上合ƈ两个数据集合Q通常是表Q,q生一个新的结果集合,其方 法是一个数据源中的行于另一个数据源中和它匹配的行组合成一个新元组?br /> SQL提供了多U类型的q接方式Q它们之间的区别在于Q从怺交叠的不同数据集合中选择用于q接的行时所采用的方法不同?br /> q接cd         定义<br /> 内连?nbsp;        只连接匹配的?br /> 左外q接         包含左边表的全部行(不管双的表中是否存在与它们匚w的行Q,以及双表中全部匚w的行<br /> 叛_q接         包含双表的全部行(不管左边的表中是否存在与它们匚w的行Q,以及左边表中全部匚w的行<br /> 全外q接         包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行?br /> (H)(theta)q接         使用{g外的条g来匹配左、右两个表中的行<br /> 交叉q接         生成W卡积Q它不用Q何匹配或者选取条gQ而是直接一个数据源中的每个行与另一个数据源的每个行都一一匚w<br /> 在INFORMIX中连接表的查?br /> 如果FROM子句指定了多于一个表引用Q则查询会连接来自多个表的行。连接条件指定各列之_每个表至一列)q行q接的关pR因为正在比较连接条件中的列Q所以它们必d有一致的数据cd?br /> SELECT语句的FROM子句可以指定以下几种cd的连?br /> FROM子句关键?nbsp;        相应的结果集<br /> CROSS <strong style="color: black; background-color: rgb(153,255,153)">JOIN</strong>         W卡乘U(所有可能的行对Q?br /> INNER <strong style="color: black; background-color: rgb(153,255,153)">JOIN</strong>         仅对满q接条g的CROSS中的?br /> <strong style="color: black; background-color: rgb(255,255,102)">LEFT</strong> <strong style="color: black; background-color: rgb(160,255,255)">OUTER</strong> <strong style="color: black; background-color: rgb(153,255,153)">JOIN</strong>         一个表满条g的行Q和另一个表的所有行<br /> RIGHT <strong style="color: black; background-color: rgb(160,255,255)">OUTER</strong> <strong style="color: black; background-color: rgb(153,255,153)">JOIN</strong>         ?strong style="color: black; background-color: rgb(255,255,102)">LEFT</strong>相同Q但两个表的角色互换<br /> FULL <strong style="color: black; background-color: rgb(160,255,255)">OUTER</strong> <strong style="color: black; background-color: rgb(153,255,153)">JOIN</strong>        <strong style="color: black; background-color: rgb(255,255,102)">LEFT</strong> <strong style="color: black; background-color: rgb(160,255,255)">OUTER</strong> ?RIGHT <strong style="color: black; background-color: rgb(160,255,255)">OUTER</strong>中所有行的超?br /> <br /> 2.2 内连接(Inner <strong style="color: black; background-color: rgb(153,255,153)">Join</strong>Q?br /> 内连接是最常见的一U连接,它页被称为普通连接,而E.FCodd最早称之ؓ自然q接?br /> 下面是ANSI SQLQ?2标准<br /> select * <br /> from   t_institution i <br /> inner <strong style="color: black; background-color: rgb(153,255,153)">join</strong> t_teller t <br /> on i.inst_no = t.inst_no<br /> where i.inst_no = "5801"<br /> 其中inner可以省略?br /> {h于早期的q接语法<br /> select * <br /> from t_institution i, t_teller t <br /> where i.inst_no = t.inst_no<br /> and i.inst_no = "5801"<br /> <br /> 2.3 外连?br /> 2.3.1         左外q接(<strong style="color: black; background-color: rgb(255,255,102)">Left</strong> <strong style="color: black; background-color: rgb(160,255,255)">Outer</strong> Jion)<br /> select * <br /> from   t_institution i <br /> <strong style="color: black; background-color: rgb(255,255,102)">left</strong> <strong style="color: black; background-color: rgb(160,255,255)">outer</strong> <strong style="color: black; background-color: rgb(153,255,153)">join</strong> t_teller t <br /> on i.inst_no = t.inst_no<br /> 其中<strong style="color: black; background-color: rgb(160,255,255)">outer</strong>可以省略?br /> 2.3.2         叛_q接(Rigt <strong style="color: black; background-color: rgb(160,255,255)">Outer</strong> Jion)<br /> select * <br /> from   t_institution i <br /> right <strong style="color: black; background-color: rgb(160,255,255)">outer</strong> <strong style="color: black; background-color: rgb(153,255,153)">join</strong> t_teller t <br /> on i.inst_no = t.inst_no<br /> 2.3.3         全外q接(Full <strong style="color: black; background-color: rgb(160,255,255)">Outer</strong>)<br /> 全外q接q回参与q接的两个数据集合中的全部数据,无论它们是否h与之相匹配的行。在功能上,它等价于对这两个数据集合分别q行左外q接和右外连接,然后再用消去重复行的ƈ操作上qC个结果集合ƈZ个结果集?br /> 在现实生zMQ参照完整性约束可以减对于全外连接的使用Q一般情况下左外q接p够了。在数据库中没有利用清晰、规范的U束来防范错误数据情况下Q全外连接就变得非常有用了,你可以用它来清理数据库中的数据?br /> select * <br /> from   t_institution i <br /> full <strong style="color: black; background-color: rgb(160,255,255)">outer</strong> <strong style="color: black; background-color: rgb(153,255,153)">join</strong> t_teller t <br /> on i.inst_no = t.inst_no<br /> 2.3.4         外连接与条g配合使用<br /> 当在内连接查询中加入条g是,无论是将它加入到<strong style="color: black; background-color: rgb(153,255,153)">join</strong>子句Q还是加入到where子句Q其效果是完全一LQ但对于外连接情况就不同了。当把条件加入到<strong style="color: black; background-color: rgb(153,255,153)">join</strong>?句时QSQL Server、Informix会返回外q接表的全部行,然后使用指定的条件返回第二个表的行。如果将条g攑ֈwhere子句 中,SQL Server会首先q行q接操作Q然后用where子句对连接后的行q行{选。下面的两个查询展示了条件放|位子对执行l果的媄响:<br /> 条g?strong style="color: black; background-color: rgb(153,255,153)">join</strong>子句<br /> select * <br /> from   t_institution i <br /> <strong style="color: black; background-color: rgb(255,255,102)">left</strong> <strong style="color: black; background-color: rgb(160,255,255)">outer</strong> <strong style="color: black; background-color: rgb(153,255,153)">join</strong> t_teller t <br /> on i.inst_no = t.inst_no<br /> and i.inst_no = “5801”<br /> l果是:<br /> inst_no     inst_name             inst_no     teller_no   teller_name<br /> 5801        天河?nbsp;               5801        0001        tom<br /> 5801        天河?nbsp;               5801        0002        david<br /> 5802        秀?br /> 5803        白云?br /> 条g在where子句<br /> select * <br /> from   t_institution i <br /> <strong style="color: black; background-color: rgb(255,255,102)">left</strong> <strong style="color: black; background-color: rgb(160,255,255)">outer</strong> <strong style="color: black; background-color: rgb(153,255,153)">join</strong> t_teller t <br /> on i.inst_no = t.inst_no<br /> where i.inst_no = “5801”<br /> l果是:<br /> inst_no     inst_name             inst_no     teller_no   teller_name<br /> 5801        天河?nbsp;               5801        0001        tom<br /> 5801        天河?nbsp;               5801        0002        david<br /> <br /> 2.4 自nq接<br /> 自nq接是指同一个表自己与自p行连接。这U一元连接通常用于从自反关p(也称作递归关系Q中抽取数据。例如h力资源数据库中雇员与老板的关pR?br /> 下面例子是在机构表中查找本机构和上机构的信息?br /> select s.inst_no superior_inst, s.inst_name sup_inst_name, i.inst_no, i.inst_name<br /> from t_institution i<br /> <strong style="color: black; background-color: rgb(153,255,153)">join</strong> t_institution s<br /> on i.superior_inst = s.inst_no<br /> <br /> l果是:<br /> superior_inst sup_inst_name         inst_no     inst_name<br /> 800            q州?nbsp;               5801        天河?br /> 800            q州?nbsp;               5802        秀?br /> 800            q州?nbsp;               5803        白云?br /> <br /> 2.5 交叉(无限? q接<br /> 交叉q接用于对两个源表进行纯关系代数的乘q算。它不用连接条件来限制l果集合Q而是分别来自两个数据源中的行以所有可能的方式q行l合。数据集合中 一的每个行都要与数据集合二中的每一个行分别l成一个新的行。例如,如果W一个数据源中有5个行Q而第二个数据源中?个行Q那么在它们之间q行交叉q接 ׃产生20个行。h们将q种cd的结果集UCؓW卡乘U?br /> 大多C叉连接都是由于错误操作而造成的;但是它们却非帔R合向数据库中填充例子数据,或者预先创Z些空行以便ؓE序执行期间所要填充的数据保留I间?br /> select *<br /> from   t_institution i <br /> cross <strong style="color: black; background-color: rgb(153,255,153)">join</strong> t_teller t<br /> 在交叉连接中没有on条g子句 <img src ="http://www.tkk7.com/fhtdy2004/aggbug/288250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/fhtdy2004/" target="_blank">Frank_Fang</a> 2009-07-24 18:26 <a href="http://www.tkk7.com/fhtdy2004/archive/2009/07/24/288250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySql存储q程和触发器的编?/title><link>http://www.tkk7.com/fhtdy2004/archive/2009/06/30/284830.html</link><dc:creator>Frank_Fang</dc:creator><author>Frank_Fang</author><pubDate>Tue, 30 Jun 2009 13:06:00 GMT</pubDate><guid>http://www.tkk7.com/fhtdy2004/archive/2009/06/30/284830.html</guid><wfw:comment>http://www.tkk7.com/fhtdy2004/comments/284830.html</wfw:comment><comments>http://www.tkk7.com/fhtdy2004/archive/2009/06/30/284830.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/fhtdy2004/comments/commentRss/284830.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/fhtdy2004/services/trackbacks/284830.html</trackback:ping><description><![CDATA[以及如何用Hibernate来? <img src ="http://www.tkk7.com/fhtdy2004/aggbug/284830.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/fhtdy2004/" target="_blank">Frank_Fang</a> 2009-06-30 21:06 <a href="http://www.tkk7.com/fhtdy2004/archive/2009/06/30/284830.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts 注解配置例子及redirect,redirectAction,chain的区?/title><link>http://www.tkk7.com/fhtdy2004/archive/2009/05/03/268720.html</link><dc:creator>Frank_Fang</dc:creator><author>Frank_Fang</author><pubDate>Sun, 03 May 2009 12:09:00 GMT</pubDate><guid>http://www.tkk7.com/fhtdy2004/archive/2009/05/03/268720.html</guid><wfw:comment>http://www.tkk7.com/fhtdy2004/comments/268720.html</wfw:comment><comments>http://www.tkk7.com/fhtdy2004/archive/2009/05/03/268720.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/fhtdy2004/comments/commentRss/268720.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/fhtdy2004/services/trackbacks/268720.html</trackback:ping><description><![CDATA[     摘要:  1 package edu.b.recommender.actions;  2   3 import org.apache.struts2.convention.annotation.Action;  4 import org.apache.struts2.convention.a...  <a href='http://www.tkk7.com/fhtdy2004/archive/2009/05/03/268720.html'>阅读全文</a><img src ="http://www.tkk7.com/fhtdy2004/aggbug/268720.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/fhtdy2004/" target="_blank">Frank_Fang</a> 2009-05-03 20:09 <a href="http://www.tkk7.com/fhtdy2004/archive/2009/05/03/268720.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>?struts2采用convention-plugin实现雉|?/title><link>http://www.tkk7.com/fhtdy2004/archive/2009/05/03/268718.html</link><dc:creator>Frank_Fang</dc:creator><author>Frank_Fang</author><pubDate>Sun, 03 May 2009 11:59:00 GMT</pubDate><guid>http://www.tkk7.com/fhtdy2004/archive/2009/05/03/268718.html</guid><wfw:comment>http://www.tkk7.com/fhtdy2004/comments/268718.html</wfw:comment><comments>http://www.tkk7.com/fhtdy2004/archive/2009/05/03/268718.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/fhtdy2004/comments/commentRss/268718.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/fhtdy2004/services/trackbacks/268718.html</trackback:ping><description><![CDATA[    只有注册用户d后才能阅读该文?a href='http://www.tkk7.com/fhtdy2004/archive/2009/05/03/268718.html'>阅读全文</a><img src ="http://www.tkk7.com/fhtdy2004/aggbug/268718.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/fhtdy2004/" target="_blank">Frank_Fang</a> 2009-05-03 19:59 <a href="http://www.tkk7.com/fhtdy2004/archive/2009/05/03/268718.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SSH整合配置http://www.tkk7.com/fhtdy2004/archive/2009/05/03/268715.htmlFrank_FangFrank_FangSun, 03 May 2009 11:42:00 GMThttp://www.tkk7.com/fhtdy2004/archive/2009/05/03/268715.htmlhttp://www.tkk7.com/fhtdy2004/comments/268715.htmlhttp://www.tkk7.com/fhtdy2004/archive/2009/05/03/268715.html#Feedback0http://www.tkk7.com/fhtdy2004/comments/commentRss/268715.htmlhttp://www.tkk7.com/fhtdy2004/services/trackbacks/268715.html<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jee
="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:context
="http://www.springframework.org/schema/context"
    xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"
    default-lazy-init
="true">

    
<description>Spring公共配置文g </description>

    
<!-- 定义受环境媄响易变的变量 -->
    
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
        
<property name="ignoreResourceNotFound" value="true" />
        
<!-- 属性文件读?nbsp;-->
        
<property name="locations">
            
<list>
                
<!-- 标准配置 -->
                
<value>classpath*:/application.properties</value>
                
<!-- 本地开发环境配|?nbsp;-->
                
<value>classpath*:/application.local.properties</value>
                
<!-- 服务器生产环境配|?nbsp;-->
                
<!-- <value>file:/var/myapp/application.server.properties</value> -->
            
</list>
        
</property>
    
</bean>

    
<!-- 使用Spring annotation 自动注册bean,q保证@Autowired(required=false/true)的属性被注入 -->
    
<!-- 打开lg扫描配置base-package表示自动扫描org.springside.example.miniwe包以及它的子?nbsp;-->
    
<!-- 
    spring2.5引入了组件自动扫描的机制Q可以采用在classpath自动扫描方式把classpath中所有的lg都纳入到spring 容器来进行管理?br />     但是q些c需要用?nbsp;@Service,@Controller, @Repository q几个注解。它的作用与在xml文g中用bean节点配置lg式一L?br />    ·@Service用于标注业务层组?br />    ·@Controller用于标注控制层组Ӟ比如struts中的action
   ·@Repository用于标注数据讉KlgQ如DAOlg
   ·@Component泛指lgQ当lg不好归类的时候,我们可以使用它进行标?br />      
-->
    
<!-- context:component-scan base-package="org.springside.examples.miniweb" -->
    
<context:component-scan base-package="edu.b.recommender" />

    
<!-- 数据源配|?使用应用内的DBCP数据库连接池 -->
    
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        
<!-- Connection Info -->
        
<property name="driverClassName" value="${jdbc.driverClassName}" />
        
<property name="url" value="${jdbc.url}" />
        
<property name="username" value="${jdbc.username}" />
        
<property name="password" value="${jdbc.password}" />

        
<!-- Connection Pooling DBCP -->
        
<property name="initialSize" value="5" />
        
<property name="maxActive" value="100" />
        
<property name="maxIdle" value="30" />
        
<property name="maxWait" value="1000" />
        
<property name="poolPreparedStatements" value="true" />
        
<property name="defaultAutoCommit" value="false" />
    
</bean>

    
<!-- 数据源配|?使用应用服务器的数据库连接池 -->
    
<!--<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/ExampleDB" />-->

    
<!-- Hibernate配置 使用注解来取代了.hbm.xml文g -->
    
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        
<property name="dataSource" ref="dataSource" />
        
<property name="namingStrategy">
            
<bean class="org.hibernate.cfg.ImprovedNamingStrategy" />
        
</property>
        
<property name="hibernateProperties">
            
<props>
                
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
                
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
                
<prop key="hibernate.use_outer_join">${hibernate.use_outer_join}</prop>
                
<prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size}</prop>
                
<prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop>
                
<prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>
                
<!--是否使用查询~存  <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop> -->
                
<prop key="hibernate.cache.provider_configuration_file_resource_path">${hibernate.ehcache_config_file}</prop>
            
</props>
        
</property>
        
<!-- 使用Hibernate annotation自动扫描此包中的实体cpo,q些po使用JPA注解来映数据库文g -->
        
<property name="packagesToScan" value="edu.b.recommender.*" />
    
</bean>

    
<!-- 事务理器配|?单数据源事务 -->
    
<!-- Transaction事务处理使用Spring来托事务的处理 -->
    
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        
<property name="sessionFactory" ref="sessionFactory" />
    
</bean>

    
<!-- 事务理器配|?多数据源JTA事务-->
    
<!--
        <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager or
        WebLogicJtaTransactionManager" />
    
-->

    
<!-- 使用annotation定义事务 -->
    
<!-- 支持 @Transactional 标记 -->
    
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>

Frank_Fang 2009-05-03 19:42 发表评论
]]>
Spring自动扫描classpath,及po is not mapped问题解决http://www.tkk7.com/fhtdy2004/archive/2009/05/03/268714.htmlFrank_FangFrank_FangSun, 03 May 2009 11:39:00 GMThttp://www.tkk7.com/fhtdy2004/archive/2009/05/03/268714.htmlhttp://www.tkk7.com/fhtdy2004/comments/268714.htmlhttp://www.tkk7.com/fhtdy2004/archive/2009/05/03/268714.html#Feedback0http://www.tkk7.com/fhtdy2004/comments/commentRss/268714.htmlhttp://www.tkk7.com/fhtdy2004/services/trackbacks/268714.html阅读全文

Frank_Fang 2009-05-03 19:39 发表评论
]]>
Spring注解单介l?/title><link>http://www.tkk7.com/fhtdy2004/archive/2009/05/03/268713.html</link><dc:creator>Frank_Fang</dc:creator><author>Frank_Fang</author><pubDate>Sun, 03 May 2009 11:24:00 GMT</pubDate><guid>http://www.tkk7.com/fhtdy2004/archive/2009/05/03/268713.html</guid><wfw:comment>http://www.tkk7.com/fhtdy2004/comments/268713.html</wfw:comment><comments>http://www.tkk7.com/fhtdy2004/archive/2009/05/03/268713.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/fhtdy2004/comments/commentRss/268713.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/fhtdy2004/services/trackbacks/268713.html</trackback:ping><description><![CDATA[    只有注册用户d后才能阅读该文?a href='http://www.tkk7.com/fhtdy2004/archive/2009/05/03/268713.html'>阅读全文</a><img src ="http://www.tkk7.com/fhtdy2004/aggbug/268713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/fhtdy2004/" target="_blank">Frank_Fang</a> 2009-05-03 19:24 <a href="http://www.tkk7.com/fhtdy2004/archive/2009/05/03/268713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2入门学习http://www.tkk7.com/fhtdy2004/archive/2009/05/03/268712.htmlFrank_FangFrank_FangSun, 03 May 2009 11:21:00 GMThttp://www.tkk7.com/fhtdy2004/archive/2009/05/03/268712.htmlhttp://www.tkk7.com/fhtdy2004/comments/268712.htmlhttp://www.tkk7.com/fhtdy2004/archive/2009/05/03/268712.html#Feedback0http://www.tkk7.com/fhtdy2004/comments/commentRss/268712.htmlhttp://www.tkk7.com/fhtdy2004/services/trackbacks/268712.html阅读全文

Frank_Fang 2009-05-03 19:21 发表评论
]]>
struts2 struts.xml配置文g详解markhttp://www.tkk7.com/fhtdy2004/archive/2009/05/03/268711.htmlFrank_FangFrank_FangSun, 03 May 2009 11:15:00 GMThttp://www.tkk7.com/fhtdy2004/archive/2009/05/03/268711.htmlhttp://www.tkk7.com/fhtdy2004/comments/268711.htmlhttp://www.tkk7.com/fhtdy2004/archive/2009/05/03/268711.html#Feedback0http://www.tkk7.com/fhtdy2004/comments/commentRss/268711.htmlhttp://www.tkk7.com/fhtdy2004/services/trackbacks/268711.html阅读全文

Frank_Fang 2009-05-03 19:15 发表评论
]]>
Struts2 + jQuery 的简单例子?/title><link>http://www.tkk7.com/fhtdy2004/archive/2009/04/29/268036.html</link><dc:creator>Frank_Fang</dc:creator><author>Frank_Fang</author><pubDate>Wed, 29 Apr 2009 01:13:00 GMT</pubDate><guid>http://www.tkk7.com/fhtdy2004/archive/2009/04/29/268036.html</guid><wfw:comment>http://www.tkk7.com/fhtdy2004/comments/268036.html</wfw:comment><comments>http://www.tkk7.com/fhtdy2004/archive/2009/04/29/268036.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/fhtdy2004/comments/commentRss/268036.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/fhtdy2004/services/trackbacks/268036.html</trackback:ping><description><![CDATA[Struts2 + jQuery 实现完成hQ不做页面蟩转的ajax效果<br /> <p>需求要求实现用弹出层发送邮件。提交后层关闭,E序再服务器端响应?/p> <p> </p> <p><a title="json" target="_blank"><strong><span style="text-decoration: underline"><span style="color: #204890">JSON</span></span></strong></a>插g提供了一U名为json的ResultTypeQ一旦ؓ某个Action指定了一个类型ؓjson的ResultQ则该Result无需映射CQ何视图资源。因为JSON插g会负责将Action里的状态信息序列化成JSON格式的数据,q将该数据返回给客户端页面的JavaScript ?/p> <p> </p> <p>单地_JSON插g允许我们在JavaScript中异步调用ActionQ而且Action不再需要用视图资源来昄该Action里的状态信息,而是由JSON插g负责Action里的状态信息返回给调用面——通过q种方式Q就可以完成<a title="ajax" target="_blank"><strong><span style="text-decoration: underline"><span style="color: #204890">Ajax</span></span></strong></a>交互?br /> <br /> 1、将struts2的json插g加入web工程的libQjsonplugin的下载地址Q?a target="_blank">http://code.google.com/p/jsonplugin/downloads/list</a> <br /> <br /> 2、struts.xmld专ؓajax使用的package <br /> <br />  <span style="color: #0000ff"><</span><span style="color: #800000">package </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="ajax"</span><span style="color: #ff0000"> extends</span><span style="color: #0000ff">="json-default"</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">action </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="ajaxRequest"</span><span style="color: #ff0000">  class</span><span style="color: #0000ff">="org.david.struts2.HelloWorld"</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #0000ff"><</span><span style="color: #800000">result </span><span style="color: #ff0000">type</span><span style="color: #0000ff">="json"</span><span style="color: #0000ff">></</span><span style="color: #800000">result</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #0000ff"></</span><span style="color: #800000">action</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> </span><span style="color: #0000ff"></</span><span style="color: #800000">package</span><span style="color: #0000ff">></span>        <br />              <br /> 3、在面中引?nbsp;<span style="color: #0000ff">jquery的js文g?/span>       <br /> <br />     <span style="color: #0000ff"><</span><span style="color: #800000">SCRIPT </span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text/javascript"</span><span style="color: #ff0000"> src</span><span style="color: #0000ff">="js/jquery-1.2.6.min.js"</span><span style="color: #0000ff">></</span><span style="color: #800000">script</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img style="display: none" alt="" src="http://www.tkk7.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /> </span><span style="color: #0000ff"><</span><span style="color: #800000">SCRIPT </span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text/javascript"</span><span style="color: #0000ff">></span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.tkk7.com/Images/dot.gif" /></span><span><span style="color: #000000; background-color: #f5f5f5"><br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="color: #0000ff; background-color: #f5f5f5">function</span><span style="color: #000000; background-color: #f5f5f5"> clickButton()<br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img style="display: none" alt="" src="http://www.tkk7.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.tkk7.com/Images/dot.gif" /></span><span><span style="color: #000000; background-color: #f5f5f5">{    <br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="color: #0000ff; background-color: #f5f5f5">var</span><span style="color: #000000; background-color: #f5f5f5"> url </span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5"> 'ajaxRequest.action';<br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img style="display: none" alt="" src="http://www.tkk7.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span><span style="color: #0000ff; background-color: #f5f5f5">var</span><span style="color: #000000; background-color: #f5f5f5"> params </span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5"> </span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.tkk7.com/Images/dot.gif" /></span><span><span style="color: #000000; background-color: #f5f5f5">{<br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align="top" />                        name:$('#name').attr('value'),<br />                            contactEmail:$('#contactEmail').attr('value'),<br />                            subject:$('#subject').attr('value'),<br />                            content:$('#content').attr('value')<img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                </span></span></span></span> </p> <p><span><span><span><span style="color: #000000; background-color: #f5f5f5">                       }</span></span><span style="color: #000000; background-color: #f5f5f5">; //通过id获得输入?br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align="top" />                 jQuery.post(url, params, callbackFun, 'json');</span></span></span></p> <p><span><span><span style="color: #000000; background-color: #f5f5f5">       </span></span></span></p> <p><span><span><span style="color: #000000; background-color: #f5f5f5">               } //urlQ响应acitonQparamsQ传入参敎ͼcallbackFunQ响应完成后的回调函敎ͼ<br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            </span></span></span></p> <p><span><span><span style="color: #000000; background-color: #f5f5f5">           </span></span><span style="color: #000000; background-color: #f5f5f5">    </span><span style="color: #0000ff; background-color: #f5f5f5">function</span><span style="color: #000000; background-color: #f5f5f5"> callbackFun(data)<br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img style="display: none" alt="" src="http://www.tkk7.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.tkk7.com/Images/dot.gif" /></span><span><span style="color: #000000; background-color: #f5f5f5">{<br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/InBlock.gif" align="top" />                 alert("SUCCESS");<br />    <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />             }</span></span><span style="color: #000000; background-color: #f5f5f5"><br /> <img alt="" src="http://www.tkk7.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />     </span></span><span style="color: #0000ff"></</span><span style="color: #800000">SCRIPT</span><span style="color: #0000ff">><br /> </span><span style="color: #000000"><br /> 4、action逻辑与普通的ation写法无大区别?/span></p> <p><span style="color: #000000">     JSONAction里的状态信息序列化成JSON格式的数?/span></p> <img src ="http://www.tkk7.com/fhtdy2004/aggbug/268036.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/fhtdy2004/" target="_blank">Frank_Fang</a> 2009-04-29 09:13 <a href="http://www.tkk7.com/fhtdy2004/archive/2009/04/29/268036.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://dgyxcsb.com" target="_blank">99ƷƵѹۿ</a>| <a href="http://thegaybdsm.com" target="_blank">þþƷҹɫA</a>| <a href="http://0967c.com" target="_blank">Ƶۿ</a>| <a href="http://dsdkg.com" target="_blank">Ʒ۲ӰԺ</a>| <a href="http://papapa97.com" target="_blank">޸Ƶ</a>| <a href="http://zzz477.com" target="_blank">ާѡþþþƷ9966</a>| <a href="http://www77753.com" target="_blank">aһëƬѸ</a>| <a href="http://vip98888.com" target="_blank">޾Ʒ</a>| <a href="http://baicaijia666.com" target="_blank">պѿվ</a>| <a href="http://mm9d.com" target="_blank">޾ƷŮþþþ9999</a>| <a href="http://ziguang1688.com" target="_blank">vavava</a>| <a href="http://323799.com" target="_blank">޳ַ</a>| <a href="http://7778tv.com" target="_blank">޴ɫƵ</a>| <a href="http://14743592.com" target="_blank">߹ۿ</a>| <a href="http://cxljdz.com" target="_blank">ëƬȫѹۿ</a>| <a href="http://by8847.com" target="_blank">þ޾Ʒۺ</a>| <a href="http://vip98888.com" target="_blank">ҹþAAAAAëƬѿ</a>| <a href="http://331927.com" target="_blank">91Ƶ</a>| <a href="http://bbscqz.com" target="_blank">ۺϼС˵</a>| <a href="http://mangaou.com" target="_blank">һỵĺʹȫƵƵ߹ۿ</a>| <a href="http://28896543.com" target="_blank">Ʒպ99޵߷</a>| <a href="http://pecbj.com" target="_blank">߻ɫӰ</a>| <a href="http://abc17171.com" target="_blank">˳վ߹ۿ</a>| <a href="http://yw323.com" target="_blank">˾Ʒձרһ</a>| <a href="http://by6216.com" target="_blank">1000žžëƬѿ</a>| <a href="http://benjiebf.com" target="_blank">аӰԺ߹ۿ</a>| <a href="http://www5g9.com" target="_blank">պŷƵ</a>| <a href="http://vvihh.com" target="_blank">avƬһ</a>| <a href="http://27simnjingmiguan.com" target="_blank">Ʒۿ˳</a>| <a href="http://by6216.com" target="_blank">ӰԺѹۿ</a>| <a href="http://bjsunic.com" target="_blank">С˵ͼƬ</a>| <a href="http://88109a.com" target="_blank">èԴ߹ۿ </a>| <a href="http://cqkalai.com" target="_blank">8xƵ</a>| <a href="http://bovch.com" target="_blank">޾Ʒ߲</a>| <a href="http://9797ww.com" target="_blank">Ƶ</a>| <a href="http://longcais.com" target="_blank">91ۺ</a>| <a href="http://xvwenyue.com" target="_blank">߹ۿ</a>| <a href="http://dzhankong.com" target="_blank">ҹҹˬ</a>| <a href="http://72c5.com" target="_blank">Ůۺһ</a>| <a href="http://4922000.com" target="_blank">ھƷѾþӰԺ</a>| <a href="http://yanshimlxg.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>