2006年11月30日

         如果需要在查询语句返回的列中包含一列表示该条记录在整个结果集中的行号, ISO SQL:2003 标准提出的方法是提供 ROW_NUMBER() / RANK() 函数。 Oracle 中可以使用标准方法(8i版本以上),也可以使用非标准的 ROWNUM ; MS SQL Server 则在 2005 版本中提供了 ROW_NUMBER() 函数;但在 MySQL 中似乎还没有这样的系统自带功能。虽然 LIMIT 可以很方便的对返回的结果集数量和位置进行过滤,但过滤出来的记录的行号却没办法被 SELECT 到。据说 MySQL 是早就想增加这个功能了,但我是还没找到。

解决方法是通过预定义用户变量来实现:

set @mycnt = 0;
select (@mycnt := @mycnt + 1) as ROWNUM , othercol from tblname order by othercol;

这样查询出来的结果集中 ROWNUM 就保存了行编号信息。这个行编号信息的某种用途在于当你需要根据需要对数据按照某种规则排序并取出排序之后的某一行数据,并且希望知道这行数据在之前排序中的位置时就用得着了。比如:

set @mycnt = 0;
select * from (
    select (@mycnt := @mycnt + 1) as ROWNUM , othercol
     from tblname order by othercol
) as A where othercol=OneKeyID;

注意:以上语句在mysql4中只能执行:

select * from (
    select (@mycnt := @mycnt + 1) as ROWNUM , othercol
     from tblname order by othercol
)

不能执行:

set @mycnt = 0;
select * from (
    select (@mycnt := @mycnt + 1) as ROWNUM , othercol
     from tblname order by othercol
) as A where othercol=OneKeyID;

在mysql5中可以执行整条语句;

当然你也可以通过创建临时表的方法把查询结果写到某个拥有 auto_increment 字段的临时表中再做查询,但考虑到临时表在 MySQL master / slave 模式下可能产生的问题,用这样临时用户定义变量的方式来计算查询结果集每一行对应的行号还是更为简洁 — 除非你愿意在 PHP 或其他语言脚本中对返回的整个结果集再作处理。

 

转于:http://www.zeali.net/entry/452

2006年11月29日

今天在项目里用了写ajax技术其中出现了些问题,后来经过努力终于解决了,特意记下来免得下次再遇到这样的问题浪费时间.

       我用ajax来验证当前用户是否登陆,就是去session中取用户变量,如果存在就证明当前用户已登陆。方法写在一个action中(使用了struts)在jsp页面中我希望用open的同步方法去访问一个验证用户的方法比如叫:checkedUser.do,那么代码如下:
 xmlHttp.open("GET", "checkedUser.do", false);
注意我把第三个参数设置成了false,也就是同步机制;这样写在IE中没有问题,当我用FireFox时,没有触发 onreadystatechange 方法,也就不能进一步得到验证结果了。后来改成异步机制,也就是把open的第三个参数设成true,然后把其他的javaScript方法改了一下,就可以了。

      还遇到一个问题,我在jsp页面中用struts 标签,<text:textarea property="context"……./> ,结果在FireFox中用
document.getElementById("context") 得不到对象,在ie中就没问题,后来改成<textarea …../> 就可以了。

       还有我发现ajax open方法在IE中第一次会去访问设置的URL,第二次就不会了。后来得知是浏览器cache的问题,我在返回的方法中加入 response.setHeader("Cache-Control", "no-cache") 就可以了

2006年11月17日

   今天早上在网页的论坛中看见一个贴,名字叫一个在街头乞讨的小姑娘之死(感动中国?),看完之后我被其中的事所感动,更被故事中的那个记者所感动,他的勇气值得我们学习。这些使我对记者本人产生了好奇,在贴子中的图片里有 “感恩中国”的字样,还有一个web地址:www.owecn.com,接着我打开了这个网站,看了之后才知道,这是一个个人性质的网站,主题是帮助那些需要帮助的人。网站没有任何经济来源,完全是凭着“站长”个人在支撑着。同时“站长”自己也是一个很困难的人。一间大约3平米,月租50元的平房就是这个网站的办公地点和“站长”的住所。看了这些我真的很感动,也更加的佩服这位“站长”了。希望大家多去他的网站看看,哪怕看看也是对他的支持。同时还有另外一群人,他们高高在上,拿着人民的钱,开着高级的车,喝着“龙井”茶,坐在有空调的高级office,却没有做该做的事。

2006年11月16日

import org.apache.commons.lang.StringUtils;

/**
 * Created by IntelliJ IDEA.
 * User: lly
 * Date: 2006-11-16
 * Time: 11:01:36
 * <p/>
 *  一个带输入框的窗体,用户在此输入框内输入许可证密钥。您希望允许输入1110-JAVA格式的密钥。您必须进行以下操作:
 * <p/>
 * 1.检查是否为空字符串。
 * 2.忽略空格。
 * 3.密钥区分大小写。
 * 4.用“-”标记分隔密钥字符串,然后检查第一部分是否全部是数字,第二部分包含的字符是否只来自有效字符集“J”、“A”、“V”、“A”。
 * 5.两个部分均应有四个字符。
 * 6.第一部分的第四个数字应该是“0”。
 */
public class StringUtilsTest {
    /**
     * Check if the key is valid
     *
     * @param key license key value
     * @return true if key is valid, false otherwise.
     */
    public static boolean checkLicenseKey(String key) {
        //checks if empty or null
        if (StringUtils.isBlank(key)) {
            return false;
        }

        //delete all white space
        key = StringUtils.deleteWhitespace(key);

        //Split String using the – separator
        String[] keySplit = StringUtils.split(key, "-");

        //check lengths of whole and parts
        if (keySplit.length != 2 || keySplit[0].length() != 4 || keySplit[1].length() != 4) {
            return false;
        }

        //Check if first part is numeric
        if (!StringUtils.isNumeric(keySplit[0])) {
            return false;
        }

        //Check if second part contains only
        //the four characters ‘J’, ‘A’, ‘V’ and ‘A’
        if (! StringUtils.containsOnly(keySplit[1],new char[]{‘J’, ‘A’, ‘V’, ‘A’})) {
            return false;
        }

        //Check if the fourth character
        //in the first part is a ‘0′
        if (StringUtils.indexOf(keySplit[0], ‘0′) != 3) {
            return false;
        }

        //If all conditions are fulfilled, key is valid.
        return true;
    }

    public static void main(String[] args) {
        String pass = "1110-JAVA";
        System.out.println("this.clone().equals()checkLicenseKey(pass) = " + StringUtilsTest.checkLicenseKey(pass));
    }
}

引用于:http://dev2dev.bea.com.cn/techdoc/2005071902.html

2006年11月06日

  在xml中想放入一个html代码,其中出现了点问题,html中有 "<" , ">" 符号,放在xml会出错的,要用xml转意符号:

&lt; < less than
&gt; > greater than
&amp; & ampersand 
&apos; apostrophe
&quot; " quotation mark

比如xml如下

<html><input type="text" name="name" size="10"/></html>要写成

<html>&lt;input type="text" name="name" size="10"/&gt;</html>

注意:那个“;”不能掉了;