今天看的代码是数据池类,对其中的Hashtable,Vector和Properties三个类返回Enumeration类型的方法注意了一下。
Hashtable返回枚举类型的方法有elements()返回此哈希表中的值的枚举keys()返回此哈希表中的键的枚举。
Vector有elements()返回此向量的组件的枚举
Properties有propertyNames()返回属性列表中所有键的枚举,如果在主属性列表中未找到同名的键,则包括默认属性列表中不同的键。
PropertiesgetProperty方法有两个;
一个是getProperty(String key)用指定的键在此属性列表中搜索属性
一个是getProperty(String key, String defaultValue)用指定的键在属性列表中搜索属性。如果在属性列表中未找到该键,则接着递归检查默认属性列表及其默认值。如果未找到属性,则此方法返回默认值变量。

ThreadGroup    线程组表示一个线程的集合。此外,线程组也可以包含其他线程组。线程组构成一棵树,在树中,除了初始线程组外,每个线程组都有一个父线程组。

构造方法摘要
ThreadGroup(String name)
          构造一个新线程组。
ThreadGroup(ThreadGroup parent, String name)
          创建一个新线程组。


 

posted @ 2008-11-14 11:58 勒紧皮带向前冲 阅读(201) | 评论 (0)编辑 收藏
 
posted @ 2008-11-11 21:18 勒紧皮带向前冲 阅读(208) | 评论 (0)编辑 收藏
 
     摘要: 第一个   1/** *//************************************************   2MD5 算法的Java Bean   3@author:Topcat Tuppin   4Last Modified:10,Mar...  阅读全文
posted @ 2008-11-11 11:38 勒紧皮带向前冲 阅读(253) | 评论 (0)编辑 收藏
 
     摘要:   1import java.io.*;   2import java.util.*;   3/** *//**   4  *   5  * <p>Title: LOG 日志记录&...  阅读全文
posted @ 2008-11-11 11:24 勒紧皮带向前冲 阅读(263) | 评论 (0)编辑 收藏
 
 1import java.util.*;
 2/**
 3 * <p>Title: Time  </p>
 4 * <p>Description: </p>
 5 *      此类主要用来取得本地系统的系统时间并用下面5种格式显示
 6 *              1. YYMMDDHH         8位
 7 *              2. YYMMDDHHmm       10位
 8 *              3. YYMMDDHHmmss     12位
 9 *              4. YYYYMMDDHHmmss   14位
10 *              5. YYMMDDHHmmssxxx  15位 (最后的xxx 是毫秒)
11 * <p>Copyright: Copyright (c) 2003</p>
12 * <p>Company: hoten </p>
13 * @author lqf
14 * @version 1.0
15 */

16public class CTime {
17    public static final int YYMMDDhhmmssxxx=15;
18    public static final int YYYYMMDDhhmmss=14;
19    public static final int YYMMDDhhmmss=12;
20    public static final int YYMMDDhhmm=10;
21    public static final int YYMMDDhh=8;
22/**
23 * 取得本地系统的时间,时间格式由参数决定
24 * @param format 时间格式由常量决定
25 * @return String 具有format格式的字符串
26 */

27    public synchronized static String  getTime(int format){
28        StringBuffer cTime=new StringBuffer(10);
29        Calendar time=Calendar.getInstance();
30        int miltime=time.get(Calendar.MILLISECOND);
31        int second=time.get(Calendar.SECOND);
32        int minute=time.get(Calendar.MINUTE);
33        int hour=time.get(Calendar.HOUR_OF_DAY);
34        int day =time.get(Calendar.DAY_OF_MONTH);
35        int month=time.get(Calendar.MONTH)+1;
36        int year =time.get(Calendar.YEAR);
37        if(format!=14){
38            if(year>=2000) year=year-2000;
39            else year=year-1900;
40        }

41        if(format>=2){
42            if(format==14) cTime.append(year);
43            else    cTime.append(getFormatTime(year,2));
44        }

45        if(format>=4)
46            cTime.append(getFormatTime(month,2));
47        if(format>=6)
48            cTime.append(getFormatTime(day,2));
49        if(format>=8)
50            cTime.append(getFormatTime(hour,2));
51        if(format>=10)
52            cTime.append(getFormatTime(minute,2));
53        if(format>=12)
54            cTime.append(getFormatTime(second,2));
55        if(format>=15)
56            cTime.append(getFormatTime(miltime,3));
57        return cTime.toString();
58    }

59/**
60 * 产生任意位的字符串
61 * @param time 要转换格式的时间
62 * @param format 转换的格式
63 * @return String 转换的时间
64 */

65    private synchronized static String getFormatTime(int time,int format){
66        StringBuffer numm=new StringBuffer();
67        int length=String.valueOf(time).length();
68
69        if(format<length) return null;
70
71        for(int i=0 ;i<format-length ;i++){
72            numm.append("0");
73        }

74        numm.append(time);
75        return numm.toString().trim();
76    }

77}
posted @ 2008-11-11 11:04 勒紧皮带向前冲 阅读(194) | 评论 (0)编辑 收藏
 
JS的正则表达式
2008年11月06日 星期四 07:22


//校验是否全由数字组成
[code]
function isDigit(s)
{
var patrn=/^[0-9]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}
[/code]

//校验登录名:只能输入5-20个以字母开头、可带数字、“_”、“.”的字串
[code]
function isRegisterUserName(s)
{
var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/;
if (!patrn.exec(s)) return false
return true
}
[/code]

//校验用户姓名:只能输入1-30个以字母开头的字串
[code]
function isTrueName(s)
{
var patrn=/^[a-zA-Z]{1,30}$/;
if (!patrn.exec(s)) return false
return true
}
}}

//校验密码:只能输入6-20个字母、数字、下划线
[code]
function isPasswd(s)
{
var patrn=/^(\w){6,20}$/;
if (!patrn.exec(s)) return false
return true
}
[/code]

//校验普通电话、传真号码:可以“+”开头,除数字外,可含有“-”
[code]
function isTel(s)
{
//var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?(\d){1,12})+$/;
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}
[/code]

//校验手机号码:必须以数字开头,除数字外,可含有“-”
[code]
function isMobil(s)
{
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}
[/code]

//校验邮政编码
[code]
function isPostalCode(s)
{
//var patrn=/^[a-zA-Z0-9]{3,12}$/;
var patrn=/^[a-zA-Z0-9 ]{3,12}$/;
if (!patrn.exec(s)) return false
return true
}
[/code]

//校验搜索关键字
[code]
function isSearch(s)
{
var patrn=/^[^`~!@#$%^&*()+=|\\\][\]\{\}:;'\,.<>/?]{1}[^`~!@$%^&()+=|\\\]
        [\]\{\}:;'\,.<>?]{0,19}$/;
if (!patrn.exec(s)) return false
return true
}

function isIP(s) //by zergling
{
var patrn=/^[0-9.]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}
[/code]

正则表达式
[code]
"^\\d+$"  //非负整数(正整数 + 0)
"^[0-9]*[1-9][0-9]*$"  //正整数
"^((-\\d+)|(0+))$"  //非正整数(负整数 + 0)
"^-[0-9]*[1-9][0-9]*$"  //负整数
"^-?\\d+$"    //整数
"^\\d+(\\.\\d+)?$"  //非负浮点数(正浮点数 + 0)
"^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$" 
//正浮点数
"^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$"  //非正浮点数(负浮点数 + 0)
"^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" 
//负浮点数
"^(-?\\d+)(\\.\\d+)?$"  //浮点数
"^[A-Za-z]+$"  //由26个英文字母组成的字符串
"^[A-Z]+$"  //由26个英文字母的大写组成的字符串
"^[a-z]+$"  //由26个英文字母的小写组成的字符串
"^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串
"^\\w+$"  //由数字、26个英文字母或者下划线组成的字符串
"^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$"    //email地址
"^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$"  //url
"^[A-Za-z0-9_]*$"
[/code]

正则表达式使用详解

简介

简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。其作用如下:
测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。
替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字。
根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。

基本语法

在对正则表达式的功能和作用有了初步的了解之后,我们就来具体看一下正则表达式的语法格式。

正则表达式的形式一般如下:  

/love/  其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入“/”定界符之间即可。为了能够使用户更加灵活的定制模式内容,正则表达式提供了专门的“元字符”。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
较为常用的元字符包括: “+”, “*”,以及 “?”。

“+”元字符规定其前导字符必须在目标对象中连续出现一次或多次。

“*”元字符规定其前导字符必须在目标对象中出现零次或连续多次。

“?”元字符规定其前导对象必须在目标对象中连续出现零次或一次。

下面,就让我们来看一下正则表达式元字符的具体应用。

/fo+/  因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的 “fool”, “fo”, 或者 “football”等在字母f后面连续出现一个或多个字母o的字符串相匹配。

/eg*/  因为上述正则表达式中包含“*”元字符,表示可以与目标对象中的 “easy”, “ego”, 或者 “egg”等在字母e后面连续出现零个或多个字母g的字符串相匹配。

/Wil?/  因为上述正则表达式中包含“?”元字符,表示可以与目标对象中的 “Win”, 或者“Wilson”,等在字母i后面连续出现零个或一个字母l的字符串相匹配。

有时候不知道要匹配多少字符。为了能适应这种不确定性,正则表达式支持限定符的概念。这些限定符可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。

{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。

{n,} n 是一个非负整数。至少匹配 n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。

{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

除了元字符之外,用户还可以精确指定模式在匹配对象中出现的频率。例如,/jim {2,6}/ 上述正则表达式规定字符m可以在匹配对象中连续出现2-6次,因此,上述正则表达式可以同jimmy或jimmmmmy等字符串相匹配。
在对如何使用正则表达式有了初步了解之后,我们来看一下其它几个重要的元字符的使用方式。
[code]
\s:用于匹配单个空格符,包括tab键和换行符;
\S:用于匹配除单个空格符之外的所有字符;
\d:用于匹配从0到9的数字;
\w:用于匹配字母,数字或下划线字符;
\W:用于匹配所有与\w不匹配的字符;
. :用于匹配除换行符之外的所有字符。
[/code]
(说明:我们可以把\s和\S以及\w和\W看作互为逆运算)
下面,我们就通过实例看一下如何在正则表达式中使用上述元字符。
/\s+/ 上述正则表达式可以用于匹配目标对象中的一个或多个空格字符。
/\d000/ 如果我们手中有一份复杂的财务报表,那么我们可以通过上述正则表达式轻而易举的查找到所有总额达千元的款项。
除了我们以上所介绍的元字符之外,正则表达式中还具有另外一种较为独特的专用字符,即定位符。定位符用于规定匹配模式在目标对象中的出现位置。 较为常用的定位符包括: “^”, “$”, “\b” 以及 “\B”。
[code]
“^”定位符规定匹配模式必须出现在目标字符串的开头
“$”定位符规定匹配模式必须出现在目标对象的结尾
“\b”定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一
“\B”定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,
      即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾。
[/code]
同样,我们也可以把“^”和“$”以及“\b”和“\B”看作是互为逆运算的两组定位符。举例来说: /^hell/ 因为上述正则表达式中包含“^”定位符,所以可以与目标对象中以 “hell”, “hello”或“hellhound”开头的字符串相匹配。 /ar$/ 因为上述正则表达式中包含“$”定位符,所以可以与目标对象中以 “car”, “bar”或 “ar” 结尾的字符串相匹配。 /\bbom/ 因为上述正则表达式模式以“\b”定位符开头,所以可以与目标对象中以 “bomb”, 或 “bom”开头的字符串相匹配。/man\b/ 因为上述正则表达式模式以“\b”定位符结尾,所以可以与目标对象中以 “human”, “woman”或 “man”结尾的字符串相匹配。
为了能够方便用户更加灵活的设定匹配模式,正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符。例如:
[code]
/[A-Z]/  上述正则表达式将会与从A到Z范围内任何一个大写字母相匹配。
/[a-z]/  上述正则表达式将会与从a到z范围内任何一个小写字母相匹配。
/[0-9]/  上述正则表达式将会与从0到9范围内任何一个数字相匹配。
/([a-z][A-Z][0-9])+/ 上述正则表达式将会与任何由字母和数字组成的字符串,如 “aB0” 等相匹配。
[/code]
这里需要提醒用户注意的一点就是可以在正则表达式中使用 “()” 把字符串组合在一起。“()”符号包含的内容必须同时出现在目标对象中。因此,上述正则表达式将无法与诸如 “abc”等的字符串匹配,因为“abc”中的最后一个字符为字母而非数字。
如果我们希望在正则表达式中实现类似编程逻辑中的“或”运算,在多个不同的模式中任选一个进行匹配的话,可以使用管道符 “|”。例如:/to|too|2/ 上述正则表达式将会与目标对象中的 “to”, “too”, 或 “2” 相匹配。
正则表达式中还有一个较为常用的运算符,即否定符 “[^]”。与我们前文所介绍的定位符 “^” 不同,否定符 “[^]”规定目标对象中不能存在模式中所规定的字符串。例如:/[^A-C]/ 上述字符串将会与目标对象中除A,B,和C之外的任何字符相匹配。一般来说,当“^”出现在 “[]”内时就被视做否定运算符;而当“^”位于“[]”之外,或没有“[]”时,则应当被视做定位符。
最后,当用户需要在正则表达式的模式中加入元字符,并查找其匹配对象时,可以使用转义符“\”。例如:/Th\*/  上述正则表达式将会与目标对象中的“Th*”而非“The”等相匹配。
在构造正则表达式之后,就可以象数学表达式一样来求值,也就是说,可以从左至右并按照一个优先级顺序来求值。优先级如下:
[code]
1.\ 转义符
2.(), (?:), (?=), [] 圆括号和方括号
3.*, +, ?, {n}, {n,}, {n,m} 限定符
4.^, $, \anymetacharacter 位置和顺序
5.|“或”操作
[/code]

使用实例
在JavaScript 1.2中带有一个功能强大的RegExp()对象,可以用来进行正则表达式的匹配操作。其中的test()方法可以检验目标对象中是否包含匹配模式,并相应的返回true或false。
我们可以使用JavaScript编写以下脚本,验证用户输入的邮件地址的有效性。
[code]
<html>
<head>
  <script language="Javascript1.2">
     <!-- start hiding
     function verifyAddress(obj)
     {
      var email = obj.email.value;
      var pattern =
/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
      flag = pattern.test(email);
      if(flag)
      {
       alert(“Your email address is correct!”);
       return true;
      }
      else
       {
        alert(“Please try again!”);
        return false;
        }
      }
     // stop hiding -->
    </script>
  </head>
  <body>
   <form onSubmit="return verifyAddress(this);">
    <input name="email" type="text">
    <input type="submit">
    </form>
  </body>
</html>
[/code]

正则表达式对象
本对象包含正则表达式模式以及表明如何应用模式的标志。
[code]
语法 1 re = /pattern/[flags]
语法 2 re = new RegExp("pattern",["flags"])
[/code]
参数
re
必选项。将要赋值为正则表达式模式的变量名。

Pattern
必选项。要使用的正则表达式模式。如果使用语法 1,用 "/" 字符分隔模式。如果用语法 2,用引号将模式引起来。

Flags
可选项。如果使用语法 2 要用引号将 flag 引起来。标志可以组合使用,可用的有:
[code]
g (全文查找出现的所有 pattern)
i (忽略大小写)
m (多行查找)
[/code]

示例
下面的示例创建一个包含正则表达式模式及相关标志的对象(re),向您演示正则表达式对象的用法。在本例中,作为结果的正则表达式对象又用于 match 方法中:
[code]
function MatchDemo()
{
var r, re; // 声明变量。
var s = "The rain in Spain falls mainly in the plain";
re = new RegExp("ain","g"); // 创建正则表达式对象。
r = s.match(re); // 在字符串 s 中查找匹配。
return(r);
}
[/code]

返回值: ain,ain,ain,ain\\
属性 lastIndex 属性 | source 属性\\
方法 compile 方法 | exec 方法 | test 方法\\
要求 版本 3\\
请参阅 RegExp 对象 | 正则表达式语法 | String 对象\\

exec 方法
用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个数组。
rgExp.exec(str)

参数

rgExp
必选项。包含正则表达式模式和可用标志的正则表达式对象。

str
必选项。要在其中执行查找的 String 对象或字符串文字。

说明\\
如果 exec 方法没有找到匹配,则它返回 null。如果它找到匹配,则 exec 方法返回一个数组,并且更新全局 RegExp 对象的属性,以反映匹配结果。数组的0元素包含了完整的匹配,而第1到n元素中包含的是匹配中出现的任意一个子匹配。这相当于没有设置全局标志 (g) 的 match 方法。
如果为正则表达式设置了全局标志,exec 从以 lastIndex 的值指示的位置开始查找。如果没有设置全局标志,exec 忽略 lastIndex 的值,从字符串的起始位置开始搜索。

exec 方法返回的数组有三个属性,分别是 input、index 和 lastIndex。Input 属性包含了整个被查找的字符串。Index 属性中包含了整个被查找字符串中被匹配的子字符串的位置。LastIndex 属性中包含了匹配中最后一个字符的下一个位置。

示例\\
下面的例子举例说明了 exec 方法的用法:
[code]
function RegExpTest()
{
var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())
if (ver >= 5.5){ // 测试 JScript 的版本。
var src = "The rain in Spain falls mainly in the plain.";
var re = /\w+/g; // 创建正则表达式模式。
var arr;
while ((arr = re.exec(src)) != null)
document.write(arr.index + "-" + arr.lastIndex + arr + "\t");
}
else{
alert("请使用 JScript 的更新版本");
}
}
[/code]

返回值:0-3The 4-8rain 9-11in 12-17Spain 18-23falls 24-30mainly 31-33in 34-37the 38-43plain

test 方法\\
返回一个 Boolean 值,它指出在被查找的字符串中是否存在模式。
rgexp.test(str)

参数\\
rgexp
必选项。包含正则表达式模式或可用标志的正则表达式对象。

str
必选项。要在其上测试查找的字符串。

说明
test 方法检查在字符串中是否存在一个模式,如果存在则返回 true,否则就返回 false。
全局 RegExp 对象的属性不由 test 方法来修改。

示例
下面的例子举例说明了 test 方法的用法:
[code]
function TestDemo(re, s)
{
var s1; // 声明变量。
// 检查字符串是否存在正则表达式。
if (re.test(s)) // 测试是否存在。
s1 = " contains "; // s 包含模式。
else
s1 = " does not contain "; // s 不包含模式。
return("'" + s + "'" + s1 + "'"+ re.source + "'"); // 返回字符串。
}
[/code]

函数调用:document.write (TestDemo(/ain+/ ,"The rain in Spain falls mainly in the plain."));

返回值:'The rain in Spain falls mainly in the plain.' contains 'ain+'

match 方法
使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回。\\
stringObj.match(rgExp)

参数\\
stringObj
必选项。对其进行查找的 String 对象或字符串文字。

rgExp
必选项。为包含正则表达式模式和可用标志的正则表达式对象。也可以是包含正则表达式模式和可用标志的变量名或字符串文字。

说明\\
如果 match 方法没有找到匹配,返回 null。如果找到匹配返回一个数组并且更新全局 RegExp 对象的属性以反映匹配结果。
match 方法返回的数组有三个属性:input、index 和 lastIndex。Input 属性包含整个的被查找字符串。Index 属性包含了在整个被查找字符串中匹配的子字符串的位置。LastIndex 属性包含了最后一次匹配中最后一个字符的下一个位置。
如果没有设置全局标志 (g),数组的 0 元素包含整个匹配,而第 1 到 n 元素包含了匹配中曾出现过的任一个子匹配。这相当于没有设置全局标志的 exec 方法。如果设置了全局标志,元素 0 到 n 中包含所有匹配。

示例\\
下面的示例演示了match 方法的用法:
[code]
function MatchDemo()
{
var r, re; // 声明变量。
var s = "The rain in Spain falls mainly in the plain";
re = /ain/i; // 创建正则表达式模式。
r = s.match(re); // 尝试匹配搜索字符串。
return(r); // 返回第一次出现 "ain" 的地方。
}
[/code]
返回值:ain

本示例说明带 g 标志设置的 match 方法的用法。
[code]
function MatchDemo()
{
var r, re; // 声明变量。
var s = "The rain in Spain falls mainly in the plain";
re = /ain/ig; // 创建正则表达式模式。
r = s.match(re); // 尝试去匹配搜索字符串。
return(r); // 返回的数组包含了所有 "ain"
// 出现的四个匹配。
}
[/code]
返回值:ain,ain,ain,ain

上面几行代码演示了字符串文字的 match 方法的用法。
[code]
var r, re = "Spain";
r = "The rain in Spain".replace(re, "Canada");
return r;
[/code]
返回值:The rain in Canada

search 方法
返回与正则表达式查找内容匹配的第一个子字符串的位置。

stringObj.search(rgExp)

参数\\
stringObj
必选项。要在其上进行查找的 String 对象或字符串文字。

rgExp
必选项。包含正则表达式模式和可用标志的正则表达式对象。

说明

search 方法指明是否存在相应的匹配。如果找到一个匹配,search 方法将返回一个整数值,指明这个匹配距离字符串开始的偏移位置。如果没有找到匹配,则返回 -1。

示例\\
下面的示例演示了 search 方法的用法。
[code]
function SearchDemo()
{
var r, re; // 声明变量。
var s = "The rain in Spain falls mainly in the plain.";
re = /falls/i; // 创建正则表达式模式。
r = s.search(re); // 查找字符串。
return(r); // 返回 Boolean 结果。
}
[/code]
返回值:18


正则表达式语法
一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

这里有一些可能会遇到的正则表达式示例:
[code]
JScript VBScript 匹配
/^\[ \t]*$/ "^\[ \t]*$" 匹配一个空白行。
/\d{2}-\d{5}/ "\d{2}-\d{5}" 验证一个ID 号码是否由一个2位数字,一个连字符以及一个5位数字组成。
/<(.*)>.*<\/\1>/ "<(.*)>.*<\/\1>" 匹配一个 HTML 标记。
[/code]

下表是元字符及其在正则表达式上下文中的行为的一个完整列表:

字符 描述
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 后向引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。

^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。

$ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。

* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等价于{0,}。

+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。

? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。

{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。

{n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。

{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。刘, "o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。

. 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
(pattern) 匹配pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。

(?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。

(?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

(?!pattern) 负向预查,在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始

x|y 匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。

[xyz] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。

[^xyz] 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。

[a-z] 字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。

[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。

\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。

\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。

\cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。 x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。

\d 匹配一个数字字符。等价于 [0-9]。

\D 匹配一个非数字字符。等价于 [^0-9]。

\f 匹配一个换页符。等价于 \x0c 和 \cL。

\n 匹配一个换行符。等价于 \x0a 和 \cJ。

\r 匹配一个回车符。等价于 \x0d 和 \cM。

\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。

\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。

\t 匹配一个制表符。等价于 \x09 和 \cI。

\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。

\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。

\W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。

\xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如, '\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。.

\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匹配两个连续的相同字符。

\n 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为后向引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。

\nm 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least nm 个获取得子表达式,则 nm 为后向引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。

\nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。

\un 匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (?)。


优先权顺序
在构造正则表达式之后,就可以象数学表达式一样来求值,也就是说,可以从左至右并按照一个优先权顺序来求值。

下表从最高优先级到最低优先级列出各种正则表达式操作符的优先权顺序:
[code]
操作符 描述
\ 转义符
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, \anymetacharacter 位置和顺序
| “或”操作
[/code]

普通字符

普通字符由所有那些未显式指定为元字符的打印和非打印字符组成。这包括所有的大写和小写字母字符,所有数字,所有标点符号以及一些符号。

最简单的正则表达式是一个单独的普通字符,可以匹配所搜索字符串中的该字符本身。例如,单字符模式 'A' 可以匹配所搜索字符串中任何位置出现的字母 'A'。这里有一些单字符正则表达式模式的示例:
[code]
/a/
/7/
/M/
[/code]
等价的 VBScript 单字符正则表达式为:
[code]
"a"
"7"
"M"
[/code]
可以将多个单字符组合在一起得到一个较大的表达式。例如,下面的 JScript 正则表达式不是别的,就是通过组合单字符表达式 'a'、'7'以及 'M' 所创建出来的一个表达式。

/a7M/
等价的 VBScript 表达式为:

posted @ 2008-11-10 11:42 勒紧皮带向前冲 阅读(205) | 评论 (0)编辑 收藏
 
1.打开企业管理器-安全性-创建用户test,授予connect和resource权限,在系统选项卡里赋予无限表空间权限(unlimited tablespace).
 
2.在企业管理器-存储-表空间中创建2个新的表空间,一个设为永久空间,一个设为临时空间.
 
3.双击用户test,给其设定永久空间和临时空间,对应上一步创建的2个空间.
 
4.此时,在方案中还没有出现test方案,只需在任意方案下右击,创建一个新表,在方案下拉列表中就会出现test方案,创建表成功后,刷新一下,就可以看到新的方案test了.

转自  http://blog.tom.com/netmax2008/article/942.html
posted @ 2008-11-08 15:00 勒紧皮带向前冲 阅读(263) | 评论 (0)编辑 收藏
 

转自http://hi.baidu.com/zml525/blog/item/59a3a277ed10ba19b051b957.html

1.C:\WINDOWS\system32\drivers\etc下的hosts文件
  

加入域名解析相关的东西,比如:
   127.0.0.1        localhost
   127.0.0.1        test.001m.cn
   127.0.0.1        www.001m.cn
   如果在实战中,前边的127.0.0.1换作公有IP地址

2.Tomcat 5.0\conf下的server.xml文件
  

(2.1)
     修改端口号(默认为8080,现改为80):
     <!-- Define a non-SSL Coyote HTTP/1.1 Connector on the port specified    during installation   -->
     <Connector port="80"    maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                enableLookups="false" redirectPort="8443" acceptCount="100"
                debug="0" connectionTimeout="20000"
                disableUploadTimeout="true" />

    (2.2)
        添加发布文件夹,并为每个文件夹指定要绑定的域名:
        因为想要实现,在发布文件夹根目录下发布项目,所以,一个文件夹只能发布一个项目,所以,要指定不同的文件夹。
        在<Host name=" 此处是要绑定的域名 " debug="0"   appBase=" 此处是发布目录 "
          unpackWARs="true" autoDeploy="true"      xmlValidation="false" xmlNamespaceAware="false">
        如果要建多个发布目录,可以在<Host name.....></Host> 的前边再加上一个<Host name....></Host>

    (2.3)
       在前边的工作做好之后,启动服务器,就会发现,Tomcat 5.0\conf\Catalina下多了几个文件夹,文件夹名就是你前边<Host..>
       </Host>中存在的发布文件夹的名字。然后,把相应的配置文件*.xml放在对应的Tomcat 5.0\conf\Catalina里的文件夹里。
       而且让他们的路径是根目录下,这样访问时就可以直接打绑定好的域名访问了。比如:
       <Context path="" reloadable="true" docBase="hnnj">
      <Resource name="jdbc/hnnj" auth="Container" type="javax.sql.DataSource"/>
      <ResourceParams name="jdbc/hnnj">
     
3.好啦,一切问题就解决了。好爽啊!
补:127.0.0.1        test.001m.cn这里的域名要和<Host name=" 此处是要绑定的域名 "..>这里的域名一致,否则
     也不会在Tomcat 5.0\conf\Catalina下生成文件夹,就不会达到既定目标了。呵呵!

4.附录:
   (4.1)
      C:\WINDOWS\system32\drivers\etc下的hosts文件,内容格式为:IP地址    域名
      例如:  
      202.102.240.91    web.nyist.net
   (4.2)
      Tomcat 5.0\conf下的server.xml文件,内容基本为:(注:server.xml里的一些注释我给省去了
      <!-- Example Server Configuration File -->
<!-- Note that component elements are nested corresponding to their
      parent-child relationships with each other -->

<!-- A "Server" is a singleton element that represents the entire JVM,
      which may contain one or more "Service" instances.   The Server
      listens for a shutdown command on the indicated port.

      Note:   A "Server" is not itself a "Container", so you may not
      define subcomponents such as "Valves" or "Loggers" at this level.
-->

<Server port="8005" shutdown="SHUTDOWN" debug="0">


   <!-- Comment these entries out to disable JMX MBeans support -->
   <!-- You may also configure custom components (e.g. Valves/Realms) by
        including your own mbean-descriptor file(s), and setting the
        "descriptors" attribute to point to a ';' seperated list of paths
        (in the ClassLoader sense) of files to add to the default list.
        e.g. descriptors="/com/myfirm/mypackage/mbean-descriptor.xml"
   -->
   <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"
             debug="0"/>
   <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"
             debug="0"/>

   <!-- Global JNDI resources -->
   <GlobalNamingResources>

     <!-- Test entry for demonstration purposes -->
     <Environment name="simpleValue" type="java.lang.Integer" value="30"/>

     <!-- Editable user database that can also be used by
          UserDatabaseRealm to authenticate users -->
     <Resource name="UserDatabase" auth="Container"
               type="org.apache.catalina.UserDatabase"
        description="User database that can be updated and saved">
     </Resource>
     <ResourceParams name="UserDatabase">
       <parameter>
         <name>factory</name>
         <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
       </parameter>
       <parameter>
         <name>pathname</name>
         <value>conf/tomcat-users.xml</value>
       </parameter>
     </ResourceParams>

   </GlobalNamingResources>

   <!-- A "Service" is a collection of one or more "Connectors" that share
        a single "Container" (and therefore the web applications visible
        within that Container).   Normally, that Container is an "Engine",
        but this is not required.

        Note:   A "Service" is not itself a "Container", so you may not
        define subcomponents such as "Valves" or "Loggers" at this level.
    -->

   <!-- Define the Tomcat Stand-Alone Service -->
   <Service name="Catalina">

     <!-- A "Connector" represents an endpoint by which requests are received
          and responses are returned.   Each Connector passes requests on to the
          associated "Container" (normally an Engine) for processing.

          By default, a non-SSL HTTP/1.1 Connector is established on port 8080.
          You can also enable an SSL HTTP/1.1 Connector on port 8443 by
          following the instructions below and uncommenting the second Connector
          entry.   SSL support requires the following steps (see the SSL Config
          HOWTO in the Tomcat 5 documentation bundle for more detailed
          instructions):
          * If your JDK version 1.3 or prior, download and install JSSE 1.0.2 or
            later, and put the JAR files into "$JAVA_HOME/jre/lib/ext".
          * Execute:
              %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA (Windows)
              $JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA   (Unix)
            with a password value of "changeit" for both the certificate and
            the keystore itself.

          By default, DNS lookups are enabled when a web application calls
          request.getRemoteHost().   This can have an adverse impact on
          performance, so you can disable it by setting the
          "enableLookups" attribute to "false".   When DNS lookups are disabled,
          request.getRemoteHost() will return the String version of the
          IP address of the remote client.
     -->

     <!-- Define a non-SSL Coyote HTTP/1.1 Connector on the port specified
          during installation   -->
     <Connector port="80"                maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                enableLookups="false" redirectPort="8443" acceptCount="100"
                debug="0" connectionTimeout="20000"
                disableUploadTimeout="true" />
     <!-- Note : To disable connection timeouts, set connectionTimeout value
      to 0 -->

<!-- Note : To use gzip compression you could set the following properties :

       compression="on"
       compressionMinSize="2048"
       noCompressionUserAgents="gozilla, traviata"
       compressableMimeType="text/html,text/xml"
-->

     <!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
     <!--
     <Connector port="8443"
                maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                enableLookups="false" disableUploadTimeout="true"
                acceptCount="100" debug="0" scheme="https" secure="true"
                clientAuth="false" sslProtocol="TLS" />
     -->

     <!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 -->
     <Connector port="8009"
                enableLookups="false" redirectPort="8443" debug="0"
                protocol="AJP/1.3" />

     <!-- Define a Proxied HTTP/1.1 Connector on port 8082 -->
     <!-- See proxy documentation for more information about using this. -->
     <!--
     <Connector port="8082"
                maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                enableLookups="false"
                acceptCount="100" debug="0" connectionTimeout="20000"
                proxyPort="80" disableUploadTimeout="true" />
     -->

        
     <!-- Define the top level container in our container hierarchy -->
     <Engine name="Catalina" defaultHost="localhost" debug="0">



       <Logger className="org.apache.catalina.logger.FileLogger"
               prefix="catalina_log." suffix=".txt"
               timestamp="true"/>


       <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                  debug="0" resourceName="UserDatabase"/>

      <Host name="www.001m.cn" debug="0" appBase="test"
        unpackWARs="true" autoDeploy="true"
        xmlValidation="false" xmlNamespaceAware="false">
      </Host>

      <Host name="test.001m.cn" debug="0" appBase="webapps"
        unpackWARs="true" autoDeploy="true"
        xmlValidation="false" xmlNamespaceAware="false">
    
         <Logger className="org.apache.catalina.logger.FileLogger"
                  directory="logs"   prefix="localhost_log." suffix=".txt"
             timestamp="true"/>

       </Host>

     </Engine>

   </Service>

</Server>
      (4.3)
        现在文件夹的结构是:
        Tomcat-->bin\common\conf\logs\server\work\temp\sharedwebapps\test;
        conf-->Catalina-->test.001m.cn\www.001m.cn;
        test.001m.cn-->hnnj.xml;
        www.001m.cn-->hnnj_test.xml
        test-->hnnj_test;
        webapps-->hnnj;
        其中,hnnj和hnnj_test是项目目录;test和webapps是发布目录;

posted @ 2008-11-07 14:51 勒紧皮带向前冲 阅读(558) | 评论 (0)编辑 收藏
 
在Oracle中查看各个表、表空间占用空间的大小
查看当前用户每个表占用空间的大小:
    Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name

查看每个表空间占用空间的大小:
    Select Tablespace_Name,Sum(bytes)/1024/1024 From Dba_Segments Group By Tablespace_Name
-------------------------------------------------------------------------------------------------------------
查询Oralce中某个用户有多少个存储过程
select distinct name from user_source where type='PROCEDURE';
select distinct name from dba_source where type='PROCEDURE' and owner='XG_TEST';
-------------------------------------------------------------------------------------------------------------
oracle的使用心得



1、DDL(Data Definition Language) Command
   create,alter,drop objects;
   grant,revoke privileges and roles;
   establishing auditing options;
   add comments to the data dictionary;
   Before and after each DDL statement,Oracle implicitly commit the current transactions.

2、DML(Data Manipulation Language) Command
   Query and Modify data within existing schema objects;
   DML statements consist of DELETE,INSERT,SELECT and UPDATE statements;
                        EXPLAIN PLAN statements;
                        LOCK TABLE statements;
   Unlike DDL Command , a commit is not implicit , after execute DDL Command ,must execute commit command    to commit a transaction;

3、Dynamic Performance Tables
   These tables are created at the instance startup and used to store information about the performance    of the instance. This information includes connection informatioion,I/OS, initialization parameter    values and so on..

4、Procedure and Function are identical except that Founction are always return a value(Procedure do not).

5、Schema is a collection of Objects that associated with the DataBase.

6、SGA is made up of :
   DataBase Buffers;
   Redo Log Buffers;
   The Shared Pool;

7、Transaction is a logical unit of work consisting of one or more SQL statements,ending in a commit or rollback.

8、 The DataBase
The Physical Layer
(1)One or more datafiles;
(2)Two or more redo log files;
(3)One or more control files;
The Logical Layer
(1)One or more tablespaces;
(2)The database schema;

9、The database is devided into one or more logical pieces known as tablespace;

10、Recommend that every one need DBA roles should have a different account , thus , if auditing is enabled , there is a record who made these system changes.

11、The Instance is the logical term that refers to the components necessary to access the data in a database.

12、数据库实例(也称为服务器Server),是用来访问一个数据库文件集的一个存储结构及后台进程的集合。Oralce并行服务器是指一个单独的数据库可以被多个实例访问。

13、查询实例名:
   select instance_name from v$instance;

14、查询动态视图v$waitstat、v$system_event、v$session_event、v$session_wait和v$ buffer_pool_statistics(在Oracle8中通过catperf.sql脚本创建)以获取下面所的统计信息,
目的是为了检查服务器进程是否正等待DBWR(对单个会话而言,也对整个数据库而言)。

15、
(1)SMON:系统监控程序
(2)PMON:进程监控程序
(3)DBWR:数据库写入程序
(4)LGWR:日志写入程序
(5)CKPT:检查点进程
(6)ARCH:归档日志
(7)RECO:恢复进程
(8)SNPn:快照进程
(9)LCKn:锁定进程
(10)Dnnn:调度程序进程
(11)Snnn:服务器进程
(12)Pnnn:并行查询服务器进程

16、数据库备份之前,若使用了shutdown abort命令,则需要进行如下操作,然后才能进行数据库备份:
1)    执行一个shutdown abort命令;
2)    启动数据库实例;
3)    执行shutdown命令;

17、使用OPS数据库时,如何解决两个服务器同时对同一记录的更新?
更新同一个表的数据的用户使用同一个实例来访问数据库。

18、通过ORACLE数据库对非ORACLE数据库进行访问,首先需要在运行非ORACLE数据库的服务器端安装ORACLE透明网关产品,每种被访问的数据引擎需要一个独立的网关;然后需要在本地ORACLE数据库中建立一个数据库连接(DATABASE LINK)。

19、外部文件访问:
1)    用作脚本文件的源代码写入SQL*PLUS、SQL、PL/SQL中;
2)    用作SQL*PLUS脚本文件的输出,用SPOOL命令生成;
3)    用作PL/SQL程序的输入或输出,通过UTL_FILE软件包访问;
4)    用作PL/SQL程序的脚本文件的输出,通过DBMS_OUTPUT软件包生成;
5)    用作通过BFILE数据类型在数据库中引用的外部数据,BFILE数据类型含有一个指向外部二进制数据文件的指针,用户必须通过CREATE DIRECTORY命令,在ORACLE中创建一个目录指针,指向存储文件的目录。
6)    用作通过DBMS_PIPE访问的外部程序,该程序必须以ORACLE支持的3GL来编写。

20、取消用户在SYSTEM表空间上创建对象的定额:
ALTER USER USER_NAME QUOTA 0 ON SYSTEM;
注:
如果一个用户被授权UNLIMITED_TABLESPACE系统权限或RESOURCE角色(Resouce角色拥有使用数据库中所有表空间的权限),则这个授权将覆盖用户的任何定额设置。
21、创建一个用户,并且指定缺省表空间:
CREATE USER USER_NAME IDENTIFIED BY USER_PASSWORD DEFAULT TABLESPACE TABLESPACE_NAME;

22、重新指定用户的缺省表空间:
ALTER USER USER_NAME DEFAULT TABLESPACE TABLESPACE_NAME;

23、从数据表中分离出已有的索引:
ALTER INDEX INDEX_NAME REBUILD
   TABLESPACE INDEX_TABLESPACE
   STORAGE(INITIAL 2M NEXT 2M PCTINCREASE 0);

24、创建表时指定数据表空间和索引表空间:
CREATE TABLE TAB_NAME(
COLUMN_A TYPE,
COLUMN_B TYPE,

COLUM_N TYPE,
CONSTRAINT TAB_NAME_PK PRIMARY KEY (COLUMN_A)
USING INDEX TABLESPACE TABLESPACE_INDEXES
STORAGE(INITIAL 2M NEXT 2M PCTINCREASE 0))
TABLESPACE TABLESPACE_DATA
STORAGE(INITIAL 5M NEXT 5M PCTINCREASE 0);

25、TEMP表空间只有在大型排序操作时才使用;

26、STORAGE子句的意义:
Storage(initial 盘区大小 next 盘区大小 pctincrease 每个顺序盘区几何增长的系数);
使用非零pctincrease参数的结果:
storage(initial 10M next 10M pctincrease 50);
盘区号        大小        总块数        盘区容量注释
1            10            10            INITIAL
2            10            20            NEXT
3            15            35            NEXT×1.5
4            22.5            57.5            NEXT×1.5×1.5
5            33.75        91.25        NEXT×1.5×1.5×1.5
.. .. .. .. .. ..
理想的情况:
一个段只具有一个大小合适的盘区,并且next值较小,设表的pctincrease值为零;
实际上:
在表空间级设置pctincrease的值为零,会影响ORACLE自动合并表空间中自由空间的能力,把表空间缺省pctincrese设置为一个非常低的值,例如1;

27、通常称作TEMP的临时表空间,由于其自身的特点会有很多碎片,临时段总是在不断的创建、扩展和撤销,对于临时表,将INITIAL和NEXT盘区大小设为表空间大小的1/20到1/50,对于这个表空间,INITIAL和NEXT缺省设置应该相等,PCTINCREASE的值为0,这样,段将有同样大小的盘区构成,当撤消这些段时,下一个临时段将能够重新利用这些已撤消的盘区。

28、
1)将一个表空间改为临时表空间:
alter tablespace tablespace_name temporary;
2)将一个表空间转换为能存储永久对象:
alter tablespace tablespace_name permenent;
3)强制表空间合并其自由空间(只能合并位置相邻的自由盘区):
alter tablespace talbespace_name coalesce;

29、
1)手工缩放数据文件(只能增大不能减小):
alter database datafile '$path/datafile01.dat' resize nnnM;
2)创建一个在需要时自动扩展的文件:
CREATE TABLESPACE DATA
DATAFILE '$PATH/DATAFILE01.DAT' SIZE 200M
AUTOEXTEND ON
NEXT 10M
MAXSIZE 250M;
3)通过ALTER TABLESPACE增加一个新的数据文件:
alter tablespace tablespace_name
add datafile '$path/datafile02.dat' size 200M
autoextend on
maxsize 300M;

40、移动数据文件:
1)    关闭实例;
2)    使用操作系统命令来移动数据文件;
3)    安装数据文件并使用ALTER DATABASE命令改变数据库中的文件名;
4)    启动实例;
具体步骤如下:
1)>svrmgrl
>connect internal
>shutdown
>exit
2)mv /db01/oracle/cc1/data01.dbf /db02/oracle/cc1/
3)>svrmgrl
>connect internal
>startup mount cc1
>alter database rename file '/db01/oracle/cc1/data01.dbf' to '/db02/oracle/cc1/data01.dbf';
4)    startup

31、
查看回滚段名称:v$rollname
查看表空间:dba_tablespace;
查看用户表空间:user_tablespaces;
查看回滚段状态信息:dba_rollback_segs;
查看数据库回滚段的当前分配情况:dba_segments;

32、
若系统中有多个表空间,就需要在system表空间中创建"第二回滚段"来支持多个表空间,有了"第二回滚段",system表空间就只用于管理数据库级的事务。

33、
ipcs | grep oracle
ipcrm [-m|-s] ipcid(数字)

34、连接字符串:||   
select 'drop talbe '||table_name from user_tables;

35、视图中不能使用order by,但可以用group by 代替来达到排序目的:
create view as select b1,b2 from table_b group by b1,b2;

36、用户间复制数据:
copy from user1@databasex to user2@databasey create table2 using select * from talbe1;

37、察看数据库的大小,和空间使用情况
select b.file_id FileID,b.tablespace_name TableSpace,b.file_name PhysicalFileName,b.bytes TotalBytes,(b.bytes-sum(nvl(a.bytes,0))) UsedSpace,sum(nvl(a.bytes,0)) FreeSpace,sum(nvl(a.bytes,0))/(b.bytes)*100 FreePecent from dba_free_space a,dba_data_files b where a.file_id=b.file_id group by b.tablespace_name,b.file_name,b.file_id,b.bytes order by b.tablespace_name;

38、Oracle提供了几个包,它们可以用来完成很多任务,从内部进程通信到文件I/O,到在PL/SQL块中动态创建和执行SQL语句。所有这些包由SYS用户所拥有-当Oracle最初安装时两个用户中的一个,这些包中最重要的包括:
DBMS_ALERT          不用轮询就允许应用命名并发出警告条件信号的过程与函数
DBMS_DDL          允许获取PL/SQL程序内部一定数量的DDL语句的过程
DBMS_DESCRIBE    为存储过程与函数描述API的过程
DBMS_JOB           管理BLOBs、CLOBs、NCLOBs与BFILEs的过程与函数
DBMS_OUTPUT        允许PL/SQL程序生成终端输出的过程与函数
DBMS_PIPE           允许数据库会话使用管道通信(通信频道)的过程与函数
DBMS_SQL           在PL/SQL程序内部执行动态SQL的过程与函数
DBMS_ULTILITY        DBMS_ULTILITY
ULT_FILE    允许PL/SQL程序读写服务器文件系统上的文本文件的过程与函数

39、如何解决单机监听不启动的问题:
你给IP固定一个值,然后配置NET8时最好用机器名,把listener.ora,tnsname.ora里的IP改成机器名。

40、查看日志文件的路径和数量:
select * from v$logfile;

41、oracle中的配置文件:
init.ora
tnsname.ora
listener.ora
sqlnet.ora

42、如何利用rownum 检索纪录:(在oracle中,只能通过rownum检索比rownum值小的所有的列)利用如下方法,可以检索表中rownum等于固定值的列:
select * from ( select rownum rn,column1,column2,… from table_name) where rn=要查询的值;

43、利用translate(char,from,to)函数判断一个字符串是否可以转换成 number 型:
translate(str,'x1234567890','x') is null,则str为纯字符串。
利用from to 参数,把str字段中所有的0-9的字符替换为空,然后判断函数返回值,返回值为空,则str一定可以转换成number型。

44、如何修改internal 用户的密码?
用法:orapwd file= password= entries=
参数解释:
    file - name of password file (mand),
    password - password for SYS and INTERNAL (mand),
    entries - maximum number of distinct DBA and OPERs (opt),
    There are no spaces around the equal-to (=) character.
1)进入DOS下
2)默认internal密码文件在c:\orant\database下,是隐藏属性,文件名称与数据库实例名有关
  如默认ORACLE实例名为ORCL,则internal密码文件名为pwdorcl.ora
3)建立新的internal密码文件,起个新名字为pwdora8.ora
  orapwd80 file=pwdora8.ora password=B entries=5     
--注:password项一定要用大写,并且不要用单引号
4)拷贝pwdora8.ora文件到c:\orant\database目录下
5)运行regedit,修改口令文件指向
6)找到HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE项
  定位ORA_ORCL_PWFILE子项,改变其值为c:\orant\database\pwdora8.ora
7)关闭ORACLE数据库,重新启动
Cool进入svrmgrl服务程序,测试internal密码是否更改成功

45、只有对象的拥有者才有对对象的操作权。如,把用户user1下的表tab_1赋给用户user2 查看的权限。此时,必须以uer1用户登陆,让后执行如下语句:
grant select on tab_1 to user2;

46、Oracle的本地进程    ps -aef | grep LOCAL=YES   的父进程ID不能为 1 ,若为 1 ,则该进程被掉死,需要用命令杀死改进程!!

47、在Windows 2000 server 操作系统下,用 net start 命令启动oracle的服务,如下:
net start OracleServiceORCL
net start OracleStartORCL
net start OracleTNSListener80
net start OracleWWWListener80
或者,利用 net stop 命令来终止服务:
net stop oraclestartorcl
net stop oracleserviceorcl
net stop oracletnslistener80

启动数据库的另外一个方法:
oradim -startup -sid SID
关闭数据库的另外一个方法:
oradim -shutdown -sid SID

48、多表操作在被实际执行前,查询优化器会根据连接条件,列出几组可能的连接方案并从中找出系统开销最小的最佳方案。连接条件要充份考虑带有索引的表、行数多的表;内外表的选择可由公式:外层表中的匹配行数*内层表中每一次查找的次数确定,乘积最小为最佳方案。

49、保持Oracle数据库优良性能的若干诀窍:
1)    分区:
根据实际经验所得,在一个大数据库中,数据库空间的绝大多数是被少量的表所占有。如何简化大数据库和管理,如何改善应用的查询性能,一般可以使用分区这种手段。所谓分区就是动态地将表中记录分离到若干不同的表空间上,使数据在物理上被分割开来,便于维护、备份、恢复、事务及查询性能。当使用的时候可建立一个连接所有分区的视图,使其在逻辑上仍以一个整体出现。
(1)建立分区表
Create table Employee (
EmpNo varchar2(10) primary key,
Name varchar2(30),
DeptNo Number(2)
)
Partition by range(DeptNo)
(
partition PART1 values less than (11)
tablespace PART1_TS,
partition PART2 values less than (21)
tablespace PART2_TS,
partition PART3 values less than (31)
tablespace PART3_TS
partition PART4 values less than (MAXVALUE)
tablespace PART4_TS
);
表Employee依据DeptNo列进行分区。
(2)分区索引
Create index Employee_DeptNo on Employee(DeptNo)
local (
partition PART1 tablespace PART1_NDX_TS,
partition PART2 tablespace PART2_NDX_TS,
partition PART3 tablespace PART3_NDX_TS,
partition PART4 tablespace PART4_NDX_TS,
);
当分区中出现许多事务并且要保证所有分区中的数据记录的唯一性时采用全局索引,如:
Create index Employee_DeptNo on Employee(DeptNo)
global partition by range (DeptNo)
(
partition PART1 values less than (11)
tablespace PART1_NDX_TS,
partition PART2 values less than (21)
tablespace PART2_NDX_TS,
partition PART3 values less than (31)
tablespace PART3_NDX_TS
partition PART4 values less than (MAXVALUE)
tablespace PART4_NDX_TS
);
在建立全局索引时,global子句允许指定索引的范围值,这个范围值可以不同于表分区的范围值。只有建立局部索引才会使索引索引分区与表分区间建立起一一对应关系。因此,在大多数情况下,应该使用局部索引分区。若使用了此索引,分区就能够很容易地将索引分区与表分区建立关联,局部索引比全局索引更易于管理。
(3)分区管理
根据实际需要,还可以使用 alter table 命令来增加、丢弃、交换、移动、修改、重命名、划分、截短一个已存在分区的结构。

2)Rebuild Indexes(重建索引不会影响存储过程)
如果表中记录频繁的被删除或插入,尽管表中的记录总量保持不变,索引空间的使用量会不断增加。虽然记录从索引中被删除,但是该记录索引项的使用空间不能被重新使用。因此,如果表变化不定,索引空间量会不断增加,不管表中记录数量是否增加--只仅仅是因为索引中无效空间量的增加。
要回收那些曾被删除记录使用的空间,需要使用alter index rebuild 命令。可以做一个定期运行的批处理程序,来重建最活动表的索引。这个批处理程序可以在空闲时运行,以避免程序与用户冲突。若能坚持索引的这一程序规划,便可以及时回收那些未使用空间,提高空间利用率。

3)段的碎片整理
当生成一个数据库对象时(一个表或一个索引),通过用户缺省值或指定值来为它指定表空间。一个在表空间中所生成的段,用于存储对象的相关数据。在段被关闭、收缩、截断之前,段所分配的空间将不被释放。
一个段是由范围组成,而范围是由相邻的Oracle块组成。一旦存在的范围不能再存储新的数据,那这个段就会去获得新的范围,且并不要求这些范围是彼此相邻的。这样的扩展会一直继续下去,直到表空间中的数据文件不能提供更多的自由空间,或者范围数量已达到极限。
因此,一个碎片太多的数据段,不仅会影响运行,也会引发表空间中的空间管理问题。所以,每个数据段只含有一个范围是十分有益的。借助监控系统,可以通过检查DBA_SEGMENTS数据字典视图来了解哪些数据库对象含有10个或更多范围的段,确定其数据段碎片。
若一个段的碎片过多,可用两种方法解决这个问题:
(1)用正确的存储参数建立一个新表,将旧表中的数据插入到新表中,再删除旧表;
(2)利用Export/Import工具。
如:exp system/manager file=exp.dmp compress=Y grants=Y indexes=Y tables=(T1,T2)
若输出成功,进入Oracle,删除上述表。
注:compress=Y决定将在输出过程中修改它们的存储参数。
imp system/manager file=exp.dmp commit=Y buffer=64000 full=Y
注:在输入时重新配置新的存储参数。

自由范围的碎片整理
表空间中的一个自由范围是表空间中相连自由(空间)块的集合。当一个段关闭时,它的范围将被释放,并被标记为自由范围。然而,这些自由范围再也不能与相邻的自由范围合并,它们之间的界线始终存在。但是当表空间的缺省值pctincrease设置不为0时,SMON后台进会定期的将这些相邻的自由范围合并。若pctincrease设置为0,那相邻自由范围不会被数据库自动合并。但可以使用 alter tablespace 命令coalesce选项,来强迫进行相邻自由范围的合并。
不进行自由范围合并,在日后的空间请求中,会影响到表空间中的空间分配。当需要一个足够大的范围时,数据库并不会合并相邻的自由范围,除非没有其他选择。这样,当表空间中前面较小自由范围已被相关使用时,将使用表空间中后面部分最大的一个自由范围。结果,会因为它们没有足够多的使用空间,从而导致表空间中速度上的矛盾。由于这样的进程出现,使数据库的空间分配距理想越来越远。自由空间碎片常会出现在那些经常关闭又重新生成的数据库表和索引中。
在理想的ORACLE表空间中,每一个数据库对象存储在一个单独的范围中,并且所有有效自由空间集中在一个巨大而连续的范围中。这样,在一个对象需要附加存储空间时,可以在增加获取足够大自由空间的可能性同时,最小化空间中的循环调用,提高自由空间使用率

50、查看和修改Oracle服务器端字符集:
方法一:
1)    查看服务器端字符集:
select * from v$nls_parameters;
select * from nls_database_parameters;
select * from sys.props$;
2)    修改服务器端字符集(用sys用户):
首先执行:update props$ set value$ = 'WE8ISO8859P1' where name ='NLS_CHARACTERSET';
update props$ set value$ = 'china' where name ='NLS_LANGUAGE';
提交(commit),然后,重新启动数据库;
3)用客户端工具(PL/SQL DEVELOP or PB etc.)查询数据库,若显示乱码,先查询出数据库端的字符集,然后,从注册表中修改NLS_LANG字段的值,可能为AMERICAN_AMERICA.WE8ISO8859P1或者SIMPLIFIED CHINESE_CHINA.ZHS16GBK或者NA等。
方法二:
alter system enable restricted session;
alter database ORCL character set ZHS16GBK;
alter database ORCL national character set ZHS16GBK;

51、查看系统中的角色:
select * from dba_roles;
-------------------------------------------------------------------------------------------------------------
Oracle中查看所有的表
select   table_name   from   user_tables;     //当前用户的表  
   
  select   table_name   from   all_tables;     //所有用户的表  
   
  select   table_name   from   dba_tables;       //包括系统表
-------------------------------------------------------------------------------------------------------------
posted @ 2008-11-07 09:34 勒紧皮带向前冲 阅读(871) | 评论 (0)编辑 收藏
 

File类有两个构造方法,File(父目录,文件名),关联指定的目录下指定名称的文件,File(文件名/目录名),关联某个文件名或者目录,这里的/表示的意思是“或者”。
    比较好的方法是先用一个File对象关联一个目录名,然后创建这个目录,(mkdir()),再用构造方法构造一个文件。以下的代码是在“我的文档”里创建一个名为“1.txt”的文件。
  File dir=new File("C:"+File.separator+"Documents and Settings"+File.separator+"Yxy"+File.separator+"My Documents");  //此处注意转义字符
  dir.mkdir();  //创建目录
  File file1=new File(dir,"1.txt");
  file1.createNewFile();  //创建一个新文件
        String[] str1=dir.list();  //下文说到的list()
    //不知道为什么这里的空格硬是只能这么长,代码是我从我自己的代码里拷过来的,汗      
    //一个先
    各位,其实这里可以用转义字符“\\”来代替File.separator,但是这不是一个好的习惯。为了实现Java的一次编译,四处运行的性感特点,我们需要一个通用的文件分隔符,因为各种操作系统下存在差异,比如linux的文件分隔符是正斜杠"/"。而File的特性separator正是获取当前操作系统下的文件分隔符。另,千万不要将让"\"单独存在,在代码中这是一个转义字符的标识,它会将接下来的一个字符理解为转义字符。
     除了这种方法可以创建新的文件,还可以调用File类下的一个静态函数
 File createTempFile(String prefix,String suffix,File directory),这是一个完整的版本,在指定的目录下创建一个以prefix为前缀名,suffix为后缀名的临时文件,通过deleteOnExit()来删除。但是还有一个精简的版本,
File createTempFile(String prefix,String suffix),没有指定目录,将在当前操作系统默认的临时文件夹里创建以prefix为前缀名,suffix为后缀名的临时文件。
     以上是如何创建文件,接下来讲的是如何查阅目录下的文件和通过文件过滤器查找文件。
    看到前面的代码里写到的list()方法了吗,返回一个String类型的数组,获取当前目录下的所有文件名,包括目录名(即文件夹)。但是,这样是不够的,无法找到我们所需要的文件,我们需要的是按我们的要求找到某个房间。Java.io包类提供类文件过滤器FileNameFilter,它是一个接口,内有方法boolean accept(File dir, String name),这是一个需要重写的方法,重写了这个方法之后,list(FileNameFileter f)方法可以列出符合我们要求的方法。
本文来源【学网】网站链接是http://www.xue5.com

 Java中的separator,pathSeparator等常量- -

File.separatorChar 返回一个字符,表示当前系统默认的文件名分隔符,在Windows中为"\",unix中为"/"
File.separator 与前者相同,但将分隔符作为字符串类型返回。
pathSeparatorChar 返回一个字符,表示当前系统默认的路径名分隔符,在Windows中为";",unix中为":"
File.pathSeparator 与前者相同,但将分隔符作为字符串类型返回。

正文为JDKAPI帮助文档相关内容:


separatorChar
public static final char separatorCharThe system-dependent default name-separator character. This field is initialized to contain the first character of the value of the system property file.separator. On UNIX systems the value of this field is '/'; on Microsoft Windows systems it is '\'.

See Also:
System.getProperty(java.lang.String)

--------------------------------------------------------------------------------

separator
public static final String separatorThe system-dependent default name-separator character, represented as a string for convenience. This string contains a single character, namely separatorChar.


--------------------------------------------------------------------------------

pathSeparatorChar
public static final char pathSeparatorCharThe system-dependent path-separator character. This field is initialized to contain the first character of the value of the system property path.separator. This character is used to separate filenames in a sequence of files given as a path list. On UNIX systems, this character is ':'; on Microsoft Windows systems it is ';'.

See Also:
System.getProperty(java.lang.String)

--------------------------------------------------------------------------------

pathSeparator
public static final String pathSeparatorThe system-dependent path-separator character, represented as a string for convenience. This string contains a single character, namely pathSeparatorChar.

posted @ 2008-11-06 11:24 勒紧皮带向前冲 阅读(543) | 评论 (0)编辑 收藏
仅列出标题
共14页: First 上一页 6 7 8 9 10 11 12 13 14 下一页