无忧无卤

鸟在笼中,恨关羽不能张飞;人处世上,要八戒更需悟空

2008年12月2日

    一、编写helloworld程序

从helloworld开始,在JQuery库中,$为JQuery的简写形式。

<html> 

        <head> 

            <script src="../jquery-1.3.1.js" type="text/javascript"></script>     

            <script type="text/javascript"> 

                //其中$(document).ready(function(){}),可以简写为$(function(){}); 

                $(document).ready(function(){ //dom加载完毕后执行,类似于window.onload 

                        alert('helloworld !'); 

                }); 

            </script> 

        </head> 

        <body><body> 

</html> 

    二、$(document).ready与window.onload比较。

    1、执行时机,window.onload为必须等待网页所有内容加载完毕后(包括图片)后才能执行。

         而$(document).ready则在网页DOM结构绘制完毕后就执行,可能内容没有加载完毕。

    2、编写个数,window.onload不能进行多次编写,后面编写的将覆盖前面编写的。$(document).ready可以进行多次编写。

         每次都能够执行。

posted @ 2011-04-08 23:09 beyond 阅读(886) | 评论 (0)编辑 收藏

解决方法:
1、修改ext-all.css,找到.x-grid3-header-offset,修改为.x-grid3-header-offset{padding-left:1px;/*width:10000px;*/width:auto;}
2、在grid中加入下面代码:

复制代码 代码如下:

monitorResize: true,
doLayout: function() {
this.setSize(Ext.get(this.getEl().dom.parentNode).getSize(true));
Ext.grid.GridPanel.prototype.doLayout.call(this);
}

 

转http://www.fengfly.com/plus/view-165078-1.html
posted @ 2010-02-04 14:33 beyond 阅读(366) | 评论 (0)编辑 收藏

js 未结束的字符串常量

今天在做JAVASCRIPT的时候,发现老是出现”未结束的字符串常量”.

自己找了下应该是传参数的时候,有特殊字符引起的.网上也找了下,也有好多出现这种情况.做下总结,以方便以后查阅.

1.JAVASCRIPT引用时,使用的字符语言不一致.
比如:<script type=”text/javascript” src=”xxx.js” charset=”UTF-8″>.xxx.js文件内部使用的是GB2312的格式,外面调用使用的是UTF-8,所以文件内部部分特殊字符因为格式不一致,出现乱码,造成此原因.

2.JAVASCRIPT输出HTML字符时,前后标记不匹配.
这种比较常见,往往在输出字符串时,出现单引号(’)或双引号(”)不配对,或者是在document.write()的时候,没有正确输出单引号(’)或双引号(”)

3.参数内出现HTML标记语言或包含换行符
我今天所遇到的是这种情况.因为我所得到的数据以参数形式传给一函数,结果该数据里包含换行符,造成了此错误.
如:一般测试时只使用单行的数据,是正常的,未出现这个错误,.
当测试时使用多行数据,并使用回车链换行,就出行了此错误.因为里面包含了换行符

对于第3种情况,我的解决方法是:不直接将该数据以参数形式传递,而是先将其赋值在一个隐藏的文本内,需要调用的函数里只需读取该文本里的内容即可.

转 http://www.javaeye.com/topic/400721
posted @ 2010-02-04 10:27 beyond 阅读(329) | 评论 (0)编辑 收藏
Weblogic和hibernate3异常:ClassNotFoundException: org.hibernate.hql.ast.HqlToken
2009年08月25日 星期二 12:37

在做项目的时候,我用weblogic跑了一下自己的程序(开发一直在tomcat下),发现出现了这样的问题,
ClassNotFoundException: org.hibernate.hql.ast.HqlToken ,郁闷了半天,在tomcat下没有任何错误,为何到weblogic就有问题了呢?
在百度和google上搜了好久,换了n个关键词,才搜到原因如下:
原因:
Hibernate3.0 采用新的基于ANTLR的HQL/SQL查询翻译器,在Hibernate的配置文件中,hibernate.query.factory_class属性用来选择查询翻译器。
(1)选择Hibernate3.0的查询翻译器:
hibernate.query.factory_class= org.hibernate.hql.ast.ASTQueryTranslatorFactory
(2)选择Hibernate2.1的查询翻译器
hibernate.query.factory_class= org.hibernate.hql.classic.ClassicQueryTranslatorFactory
为了使用3.0的批量更新和删除功能,只能选择(1)否则不能解释批量更新的语句,当使用的时候出现了不支持条件输入中文的情况。
选择(2)可以支持输入中文,但没法解释批量更新语句了
在hibernate3中需要用到antlr,然而这个包在weblogic.jar中已经包含了antrl类库,就会产生一些类加载的错误,
无法找到在war或者ear中的hibernate3.jar。
出现这个错误之后,antlr会调用System.exit(),这样weblogic就会中止服务。
原来是冲突了,解决方法也很简单,就是添加
<prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory
</prop>
这个属性后,就可以解决这个问题了。
有一个人的博客上写的也是也这个方法,不过他的org.hibernate.hql.classic.ClassicQueryTranslatorFactory写错了,
害的我以为这个方法不能用了,结果看看了,是他上面写错了,下面的是正确的,郁闷的是我拷贝的是上面的,最总还是被我发现了。


转 http://hi.baidu.com/lei55022033/blog/item/b20ad52c8c9f7ae58b139940.html

posted @ 2010-02-01 15:31 beyond 阅读(1080) | 评论 (0)编辑 收藏

Red Hat Enterprise 5 序列号2007年03月29日 星期四 上午 02:06作系统版本的第四次重要版本发布, Red Hat 酝酿发布 RHEL 5 已经超过了两年, 主要变化包括 Linux 内核由

2.6.9 升级为 2.6.18, 支持 Xen 虚拟化技术, 集群存储等.
RHEL5的版本主要分为 Sever 和 Desktop 两个版本。
具体来说,Server版本分为:
· Red Hat Enterprise Linux Advanced Platform - 对应以前的 Red Hat Enterprise Linux AS
· Red Hat Enterprise Linux - 对应以前的 Red Hat Enterprise Linux ES
Desktop 版本分为:
· Red Hat Enterprise Linux Desktop - 对应以前的Red Hat Desktop
· Red Hat Enterprise Linux Desktop with Workstation option - 对应以前的Red Hat Enterprise

Linux WS
主要的功能包括:
1. 虚拟化技术
在各种平台上支持虚拟化技术
在 Red Hat Enterprise Linux Advanced Platform 支持存储与扩展的服务器虚拟化技术
Red Hat Network 提供各种虚拟化系统的支持
virt-manager, libvirt/virsh管理工具
2. 内核与性能
基于 Linux 2.6.18 内核
支持多核处理器
广泛的新硬件支持
更新的基于 Kexec/Kdump 的 Dump 支持
支持 Intel Network Accelerator Technology (IOAT)
对于大型SMP系统技持的增强
增强的管道缓存
内核缓存接合能力用于改进IO缓存操作
3. 安全
SELinux 增强
图形化 SELinux 管理界面
集成的目录和安全机制
增强的 IPESEC 提高安全与性能
新的审计机制用于提供新的搜索、报表和实时监控的能力
4. 网络与互操作性
支持 Autofs, FS-Cache 和 iSCSI
增强的 IPv6 支持
改进的 Microsoft 文件/打印和Active Directory集成
5. 桌面
更新的管理工具、应用程序和对笔记本的支持
改进的 ACPI (一种高级的电源管理)支持,包括 Suspend to Disk
智能卡登录,包括 PKI/Kerberos 认证
集成的多媒体支持
增强的即插即用支持
Network Manager 提供自动的有线和无线网络配置
基于 AIGLX/Compiz 的图形化界面(支持淡化、透明等效果)
6. 开发环境
增强的开发工具,包括 System Tap 和 Frysk
GCC4.1 和 glibc 2.5 工具链
7. 存储
支持根设置多路 IO ( MPIO ),提高可用性
服务器产品中包含单系统/客户的 Red Hat Global File System 支持
块设备数据加密支持
8. 管理
安装过程更新简化系统配
基于 Yum/Pup 的 Red Hat Network 更新
Conga 集群和存储管理

ISO 的内容和注册
与产品相关套件的软件组件包的结构与以前版本的 红帽企业 Linux 有所不同。不同种类的媒介套件和 ISO 映像被减少到两种:

红帽企业 Linux 5 服务器

红帽企业 Linux 5 客户端


ISO 映像包含大量的可选软件包,它提供了核心分发版本外的其他功能,如:虚拟化、群集和群集存储。关于服务器套件、客户端套件和可选套件的更多信息,请参考 http://www.redhat.com/rhel/

因为可选的内容也存在在相同的树或 ISO 映像中,所以应该特别注意不要使安装的组件和订阅所提供的组件不匹配。如果这种情况发生了,系统存在错误或安全漏洞的可能性将会增加。

为了保证安装的组件和订阅相匹配,红帽企业 Linux 5 需要输入一个 安装号。它被用来配置安装程序来提供正确的软件包。安装号码包含在你的订阅里。

如果您没有输入安装号码,只有核心服务器或 Desktop 将会被安装。其它功能可以在以后被手工安装。关于安装号码的更多信息,请参考 http://www.redhat.com/apps/support/in.html

在安装过程中被使用的安装号码将被存放在 /etc/sysconfig/rhn/install-num 里。当在 红帽网络 注册时,这个文件将自动被 rhn_register 引用,来决定系统应该订阅到哪个合适的子通道。

RHEL 5 安装 序列号

服务器:

* Red Hat Enterprise Linux (Server including virtualization):
2515dd4e215225dd

+ Red Hat Enterprise Linux Virtualization Platform:
49af89414d147589

客户端:

* Red Hat Enterprise Linux Desktop:
660266e267419c67

+ Red Hat Enterprise Linux Desktop + Workstation Option:
da3122afdb7edd23

+ Red Hat Enterprise Linux Desktop + Workstation + DualOS Option
(Virtualization):
7fcc43557e9bbc42

+ Red Hat Enterprise Linux Desktop + DualOS Option (Virtualization):
fed67649ff918c77

posted @ 2009-11-12 21:52 beyond 阅读(1472) | 评论 (0)编辑 收藏

    整合ssh框架
    翻译drools5
posted @ 2009-06-26 18:08 beyond 阅读(244) | 评论 (1)编辑 收藏
1.什么是数据库事务,以及作用?

    数据库事务:
                 事务是由相关操作构成的一个完整的操作单元,在一个事物内,数据的修改一起提交或撤销,如果发生故障或系统错误,
                 整个事物也会自动撤销。
    优点:
          把逻辑相关的操作分成了一个组
          在数据永久改变前,可以预览数据变化
          能过保证数据的读一致性
posted @ 2009-06-22 11:35 beyond 阅读(565) | 评论 (0)编辑 收藏

1. 介绍

1)DOM(JAXP Crimson解析器)
        DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。

2)SAX

        SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。
   选择DOM还是选择SAX? 对于需要自己编写代码来处理XML文档的开发人员来说,  选择DOM还是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档,而SAX采用的事件模型。

  DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。

  SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。

3)JDOM           http://www.jdom.org/

          JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102”将它最终用作“Java标准扩展”。从2000年初就已经开始了JDOM开发。

  JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。

  JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题”(根据学习曲线假定为20%)。JDOM对于大多数Java/XML应用程序来说当然是有用的,并且大多数开发者发现API比DOM容易理解得多。JDOM还包括对程序行为的相当广泛检查以防止用户做任何在XML中无意义的事。然而,它仍需要您充分理解XML以便做一些超出基本的工作(或者甚至理解某些情况下的错误)。这也许是比学习DOM或JDOM接口都更有意义的工作。

  JDOM自身不包含解析器。它通常使用SAX2解析器来解析和验证输入XML文档(尽管它还可以将以前构造的DOM表示作为输入)。它包含一些转换器以将JDOM表示输出成SAX2事件流、DOM模型或XML文本文档。JDOM是在Apache许可证变体下发布的开放源码。

4)DOM4J http://dom4j.sourceforge.net/ 
            
        虽然DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API和标准DOM接口具有并行访问功能。从2000下半年开始,它就一直处于开发之中。

  为支持所有这些功能,DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然DOM4J付出了更复杂的API的代价,但是它提供了比JDOM大得多的灵活性。

  在添加灵活性、XPath集成和对大文档处理的目标时,DOM4J的目标与JDOM是一样的:针对Java开发者的易用性和直观操作。它还致力于成为比JDOM更完整的解决方案,实现在本质上处理所有Java/XML问题的目标。在完成该目标时,它比JDOM更少强调防止不正确的应用程序行为。

  DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用DOM4J。

2.. 比较

1)DOM4J性能最好,连Sun的JAXM也在用DOM4J。目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件。如果不考虑可移植性,那就采用DOM4J.

2)JDOM和DOM在性能测试时表现不佳,在测试10M文档时内存溢出。在小文档情况下还值得考虑使用DOM和JDOM。虽然JDOM的开发者已经说明他们期望在正式发行版前专注性能问题,但是从性能观点来看,它确实没有值得推荐之处。另外,DOM仍是一个非常好的选择。DOM实现广泛应用于多种编程语言。它还是许多其它与XML相关的标准的基础,因为它正式获得W3C推荐(与基于非标准的Java模型相对),所以在某些类型的项目中可能也需要它(如在JavaScript中使用DOM)。

3)SAX表现较好,这要依赖于它特定的解析方式-事件驱动。一个SAX检测即将到来的XML流,但并没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏在内存中)。

3. 四种xml操作方式的基本使用方法

xml文件:

<?xml version="1.0" encoding="utf-8" ?>
<Result>
   <VALUE>
       <NO DATE="2005">A1</NO>
       <ADDR>GZ</ADDR>
   </VALUE>
   <VALUE>
       <NO DATE="2004">A2</NO>
       <ADDR>XG</ADDR>
  </VALUE>
</Result>

1)DOM

import java.io.*;
import java.util.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;

public class MyXMLReader{
 public static void main(String arge[]){

  long lasting =System.currentTimeMillis();
  try{ 
   File f=new File("data_10k.xml");
   DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
   DocumentBuilder builder=factory.newDocumentBuilder();
   Document doc = builder.parse(f);
   NodeList nl = doc.getElementsByTagName("VALUE");
   for (int i=0;i<nl.getLength();i++){
    System.out.print("车牌号码:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());
    System.out.println("车主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());
   }
  }catch(Exception e){
   e.printStackTrace();
}

2)SAX

import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;

public class MyXMLReader extends DefaultHandler {

 java.util.Stack tags = new java.util.Stack();
 public MyXMLReader() {
  super();
   }

 public static void main(String args[]) {
  long lasting = System.currentTimeMillis();
  try {
   SAXParserFactory sf = SAXParserFactory.newInstance();
   SAXParser sp = sf.newSAXParser();
   MyXMLReader reader = new MyXMLReader();
   sp.parse(new InputSource("data_10k.xml"), reader);
  } catch (Exception e) {
   e.printStackTrace();
  }

  System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + "毫秒");}
  public void characters(char ch[], int start, int length) throws SAXException {
  String tag = (String) tags.peek();
  if (tag.equals("NO")) { 
   System.out.print("车牌号码:" + new String(ch, start, length));
    }
    if (tag.equals("ADDR")) {
  System.out.println("地址:" + new String(ch, start, length));
    }
   }

  public void startElement(String uri,String localName,String qName,Attributes attrs) {
  tags.push(qName);}

3) JDOM

import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.*;

public class MyXMLReader {

 public static void main(String arge[]) {
  long lasting = System.currentTimeMillis();
  try {
   SAXBuilder builder = new SAXBuilder(); 
   Document doc = builder.build(new File("data_10k.xml")); 
   Element foo = doc.getRootElement(); 
   List allChildren = foo.getChildren(); 
   for(int i=0;i<allChildren.size();i++) { 
    System.out.print("车牌号码:" + ((Element)allChildren.get(i)).getChild("NO").getText());
    System.out.println("车主地址:" + ((Element)allChildren.get(i)).getChild("ADDR").getText());
   }
  } catch (Exception e) {
   e.printStackTrace();
}

}

4)DOM4J

import java.io.*;
import java.util.*;
import org.dom4j.*;
import org.dom4j.io.*;

public class MyXMLReader {

 public static void main(String arge[]) {
  long lasting = System.currentTimeMillis();
  try {
   File f = new File("data_10k.xml");
   SAXReader reader = new SAXReader();
   Document doc = reader.read(f);
   Element root = doc.getRootElement();
   Element foo;
   for (Iterator i = root.elementIterator("VALUE"); i.hasNext();) {
    foo = (Element) i.next();
    System.out.print("车牌号码:" + foo.elementText("NO"));
    System.out.println("车主地址:" + foo.elementText("ADDR"));
   }
  } catch (Exception e) {
   e.printStackTrace();
    }
}

转自:http://blog.chinaunix.net/u/25176/showart_379827.html

posted @ 2009-06-17 11:42 beyond 阅读(232) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2009-06-10 17:38 beyond 阅读(839) | 评论 (0)编辑 收藏

定制的Spring Security(Acegi)的并发会话过滤器(ConcurrentSessionFilter)的编码过程

上一帖述及使用ConcurrentSessionFilter限制同帐号登录多次的方法,同帐号多次登录限制是运行系统必需的功能,所以作者对其深入测试,在上一帖中也列举了Spring Security的ConcurrentSessionFilter和ConcurrentSessionControllerImpl类的几个限制。做一下简单的总结,下面假设同时使用DigestProcessingFilter和辅助类:

  • 如果exceptionIfMaximumExceeded = true,即第二个发起的会话被禁止,如果一个用户重新启动浏览器,再次登录失败,因为前一个会话没有超时,被当成了多次登录。
  • 如果exceptionIfMaximumExceeded = false,如果两个人使用同一个帐号登录,将出现交互将对方踢出去的现象,实际上并没有禁止任何人登录,只是每次要先将另一个人踢下去。


需求

我想使用exceptionIfMaximumExceeded = true,同时允许同一个用户在同一台机器上连续登录多次,我采取了编写定制的ConcurrentSessionController实现类的方法。



原理

ConcurrentSessionController是一个接口,有两个需要实现的方法:checkAuthenticationAllowed()和registerSuccessfulAuthentication(),Spring Security提供了一个实现类ConcurrentSessionControllerImpl,经过分析缺省的实现类,发现方法allowableSessionsExceeded()处理多次并发会话,在SecurityRegistry中保存每个会话的信息,主要是用户帐号对应的会话ID(sessionId)和最后发起时间,在并发发生时,从SecurityRegistry中取出关于某个用户帐号的所有会话,如果exceptionIfMaximumExceeded = false,找到最早一个会话,将其释放掉,腾出空间给新会话,如果exceptionIfMaximumExceeded = true,将发出一个异常。

所以,需要改进allowableSessionsExceeded(),如果exceptionIfMaximumExceeded = true让程序判断客户地址,如果同一个IP,则允许登录,将最早的会话释放掉,如果不是同一个IP在发出异常。

在SecurityRegistry中,用户帐号信息存在一个对象中,名字是principal,当前是一个Object对象,实际上只是存了一个字符串,所以需要扩展principal,写一个定制的类(我的类含有两个属性:username和userip),里面保存客户IP信息。allowableSessionsExceeded()只是使用SecurityRegistry,SecurityRegistry中的内容是由registerSuccessfulAuthentication()方法写入的,所以,在该方法中需要将原来的pricipal对象替换成定制的Principal类的对象。同时checkAuthenticationAllowed()方法也要修改,因为这个方法要查询SecurityRegistry,查询条件替换成定制的Principal类的对象。



注意事项

定制的Principal类要实现equals()和hashCode()和toString()三个方法,在equals()方法中只要username相同就表示两个对象相同,而在hashCode()中只需要将username的hashcode计算在内,因为SecurityRegistry是以principal为关键字的Map容器,这两个方法决定了对Map的查询。toString()方法可以根据自己的需要写,我只是将username输出。



测试

将定制的ConcurrentSessionController对象编制(wire)到应用系统中,经过测试,能够达到预想目的。



存在的问题

原来想省点劲,只要继承ConcurrentSessionControllerImpl并重载上述三个方法就行了,但是不知道为什么securityRegistery属性一直注入不了,一气之下,写了一个直接实现ConcurrentSessionController接口的新类。实际上也不是从头写,将ConcurrentSessionControllerImpl代码改吧该吧即可,用不了几分钟,这就是开源的好处。



    转自 http://www.gooseeker.com/cn/node/517
posted @ 2009-05-08 10:33 beyond 阅读(3303) | 评论 (0)编辑 收藏
/*********************
 * 四舍五入到小数点后两位
燃料子系统有很多数据都要求是固定的格式,并要求四舍五入,一般都是number(12, 2),
如果画面出现数据: 3.1230032..此类可以用myRound(arg1, arg2)处理。
例:
var num = 3.1260032;
var result = myRound(num, 2);    // result = 3.13
 
若num = 1,则结果为1.00
 *********************/
/*
 * 四舍五入到指定位数
 *
 * num 要处理的数字
 * n 小数点后几位
 */
function myRound(num,n){
    var   dd=1;  
    var   tempnum;  
    for(i=0;i<n;i++){  
        dd*=10;
    }  
    tempnum=num*dd;
    
    // 如果参数非数字,将值置为0
    // modified by liyj 2008/6/16 PM
    if (tempnum+""=="NaN") {
        return formatnumber(0,n);  
    }
      
    tempnum=Math.round(tempnum);
    return formatnumber(tempnum/dd,n);  
}  
 /*
  * 格式化数字
  *
  * value  数值
  * num 位数
  */
function formatnumber(value, num) {
    var a, b, c, i;
    a = value.toString();
    b = a.indexOf(".");
    c = a.length;
    if (num == 0) {
        if (b != -1) {
            a = a.substring(0, b);
        }
    } else {
        if (b == -1) {
            a = a + ".";
            for (i = 1; i <= num; i++) {
                a = a + "0";
            }
        } else {
            a = a.substring(0, b + num + 1);
            for (i = c; i <= b + num; i++) {
                a = a + "0";
            }
        }
    }
    return a;
} 
posted @ 2009-03-22 11:28 beyond 阅读(129) | 评论 (0)编辑 收藏

测试….

posted @ 2009-03-22 11:17 beyond 阅读(95) | 评论 (0)编辑 收藏
posted @ 2009-03-22 11:12 beyond 阅读(74) | 评论 (0)编辑 收藏
一、%rowtype只是指明引用的记录的类型,但不保证NOT NULL约束

我们知道使用%type和%rowtype可以分别指定引用的字段、记录类型,但其中有一个特别需要注意的地方:

%type和%rowtype都不保证NOT NULL约束。例如:

DECLARE
  my_empno emp.empno%TYPE;  --emp.empno should not be null
  ...
BEGIN
  my_empno := NULL;  - - this works well

以上这段代码在emp表的empno字段不能为空的情况下依然是可以执行的。


二、%rowtype记录的赋值

用%ROWTYPE作声明的时候是不可以进行初始化赋值的,但是有两种方法可以一次性为所有字段赋值。

方法一:假如两个记录类型的声明引用了同一数据表或游标,那么它们就可以相互赋值,如:

DECLARE
  dept_rec1 dept
%ROWTYPE;
  dept_rec2 dept
%ROWTYPE;
  
CURSOR c1 IS   SELECT * FROM dept;
  dept_rec3 c1
%ROWTYPE;

BEGIN
  .. . 
  dept_rec1 :
= dept_rec2  --this works well

但是,如果一个类型是引用的是数据表而另一个引用的是游标的话,那么,即使它们表现的内容相同,也是不能相互赋值的

dept_rec2 := dept_rec3; - - not allowed

因为此处的dept_rec2引用是表,而dept_rec3引用的是游标,所以即便它们查询的内容一样也

方法二:我们可以使用SELECT或FETCH语句将取得的数据赋给记录。但在表或视图中定义的字段名称顺序要与记录中的名称顺序相同。

DECLARE
  dept_rec dept
%ROWTYPE;
  ...
BEGIN
  
SELECT * INTO dept_rec FROM dept WHERE deptno = 30;
  ...
END

但是,我们不能使用赋值语句来把字段列表中的值赋给记录。所以,下面的语法形式是不允许的:

record_name := (value1, value2, value3, ...); -- not allowed 


 三、
使用别名

从游标中取出的数据,如果游标定义中含有表达式时,我们就需要使用别名才能正确地为%ROWTYPE类型记录赋值:

DECLARE
  
CURSOR my_cursor IS
    
SELECT sal + NVL(comm, 0wages, ename FROM emp;
  my_rec my_cursor
%ROWTYPE;
BEGIN
  
OPEN my_cursor;
  LOOP
    
FETCH my_cursor
      
INTO my_rec;
    
EXIT WHEN my_cursor%NOTFOUND;
    
IF my_rec.wages > 2000 THEN
      
INSERT INTO temp VALUES (NULL, my_rec.wages, my_rec.ename);
    
END IF;
  
END LOOP;
  
CLOSE my_cursor;
END;

 

posted @ 2009-02-25 15:49 beyond 阅读(684) | 评论 (0)编辑 收藏

<html>
<head>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data" name="form1">
<input name="attach" type="file" onchange="javascript:ShowImg(this.value);" onKeyDown="javascript:return(false);" size="20">
<script language="JavaScript">
function ShowImg(src)
{
document.getElementById("imgDiv").innerHTML="图片预览:<br><img id='imgObj' onerror='javascript:GetError()' onload='javascript:GetSize()' src='file:///" + src + "'>";
}
function GetSize()
{
var width,height;
var imgObj=document.getElementById("imgObj");
width=imgObj.width;
height=imgObj.height;
document.getElementById("err_msg").innerHTML="图片大小(宽×高):<font color=red>" + width + "×" + height + "</font>";
if(width>164){
imgObj.width=164;
imgObj.height=imgObj.height/(imgObj.width/164);
}
}
function GetError()
{
document.getElementById("err_msg").innerHTML="图片大小(宽×高):<font color=red>NaN</font>";
document.getElementById("imgDiv").innerHTML="";
document.getElementById("err_msg").innerHTML="图片文件不存在或格式错误!"
}
</script>
<div id="imgDiv" align="center"></div>
<div id="err_msg" align="center"></div>
</form>
</body>
</html>

    申明:此代码来自互联网。

posted @ 2008-12-02 22:05 beyond 阅读(967) | 评论 (0)编辑 收藏

导航

<2008年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

统计

常用链接

留言簿(1)

随笔档案

相册

搜索

最新评论

  • 1. re: 近期任务
  • 大哥 等着你的drools5翻译呢 drools4把我搞死了 如果你有关于drools4的心得的话请指教 感觉自己使用的不是很好 望赐教 QQ:53816565 谢谢
  • --sunnidy
  • 2. re: Mysql迁移到Oracle
  • 不错,看样子支持大多数数据库迁移到oracle,不知道是否支持从oracle转出?
  • --FastUnit

阅读排行榜

评论排行榜