??xml version="1.0" encoding="utf-8" standalone="yes"?> 下表是元字符及其在正则表辑ּ上下文中的行为的一个完整列表: 匚w中文字符的正则表辑ּQ?nbsp;[u4e00-u9fa5] 匚w双字节字W?包括汉字在内)Q[^x00-xff] 匚wI白行的正则表达式:ns*r 匚wHTML标记的正则表辑ּQ?lt;(S*?)[^>]*>.*?|<.*? /> 匚w首尾I白字符的正则表辑ּQ^s*|s*$ 匚wEmail地址的正则表辑ּQw+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)* 匚w|址URL的正则表辑ּQ[a-zA-z]+://[^s]* 匚w帐号是否合法(字母开_允许5-16字节Q允许字母数字下划线)Q^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 匚w国内?sh)话LQd{3}-d{8}|d{4}-d{7} 匚w腾讯QQP[1-9][0-9]{4,} 匚w中国邮政~码Q[1-9]d{5}(?!d) 匚ww䆾证:d{15}|d{18} 匚wip地址Qd+.d+.d+.d+ 匚w特定字符Ԍ (1)应用Q计字W串的长度(一个双字节字符长度?QASCII字符?Q?/font> (2)应用Qjavascript中没有像vbscript那样的trim函数Q我们就可以利用q个表达式来实现 使用 JDBC 驱动E序调用不带参数的存储过E时Q必M?call SQL 转义序列。不带参数的 call 转义序列的语法如下所C: 作ؓ实例Q在 SQL Server 2005 AdventureWorks CZ数据库中创徏以下存储q程Q?/p>
在下面的实例中,向此函C?AdventureWorks CZ数据库的打开q接Q然后?executeQuery Ҏ(gu)调用 GetContactFormalNames 存储q程?/p>
2使用带有输入参数的存储过E?/strong> 使用 JDBC 驱动E序调用带参数的存储q程Ӟ必须l合 SQLServerConnection cȝ prepareCall Ҏ(gu)使用 call SQL 转义序列。带?IN 参数?call 转义序列的语法如下所C: 构?call 转义序列Ӟ请??(问号)字符来指?IN 参数。此字符充当要传递给该存储过E的参数值的占位W。可以?SQLServerPreparedStatement cȝ setter Ҏ(gu)之一为参数指定倹{可使用?setter Ҏ(gu)?IN 参数的数据类型决定?/p>
?setter Ҏ(gu)传递值时Q不仅需要指定要在参C使用的实际|q必L定参数在存储q程中的序数位置。例如,如果存储q程包含单个 IN 参数Q则其序数gؓ 1。如果存储过E包含两个参敎ͼ则第一个序数gؓ 1Q第二个序数gؓ 2?/p>
作ؓ如何调用包含 IN 参数的存储过E的实例Q?SQL Server 2005 AdventureWorks CZ数据库中?uspGetEmployeeManagers 存储q程。此存储q程接受名ؓ EmployeeID 的单个输入参?它是一个整数?Q然后基于指定的 EmployeeID q回雇员及其l理的递归列表。下面是调用此存储过E的 Java 代码Q?/p>
3使用带有输出参数的存储过E?/strong> 使用 JDBC 驱动E序调用此类存储q程Ӟ必须l合 SQLServerConnection cȝ prepareCall Ҏ(gu)使用 call SQL 转义序列。带?OUT 参数?call 转义序列的语法如下所C: 构?call 转义序列Ӟ请??(问号)字符来指?OUT 参数。此字符充当要从该存储过E返回的参数值的占位W。要?OUT 参数指定|必须在运行存储过E前使用 SQLServerCallableStatement cȝ registerOutParameter Ҏ(gu)指定各参数的数据cd?/p>
使用 registerOutParameter Ҏ(gu)?OUT 参数指定的值必L java.sql.Types 所包含?JDBC 数据cd之一Q而它又被映射成本?SQL Server 数据cd之一。有?JDBC ?SQL Server 数据cd的详l信息,请参阅了?JDBC 驱动E序数据cd?/p>
当?zhn)对?OUT 参数?registerOutParameter Ҏ(gu)传递一个值时Q不仅必L定要用于此参数的数据cdQ而且必须在存储过E中指定此参数的序号位置或此参数的名U。例如,如果存储q程包含单个 OUT 参数Q则其序数gؓ 1;如果存储q程包含两个参数Q则W一个序数gؓ 1Q第二个序数gؓ 2?/p>
作ؓ实例Q在 SQL Server 2005 AdventureWorks CZ数据库中创徏以下存储q程Q?Ҏ(gu)指定的整?IN 参数 (employeeID)Q该存储q程也返回单个整?OUT 参数 (managerID)。根?HumanResources.Employee 表中包含?EmployeeIDQOUT 参数中返回的gؓ ManagerID?/p>
在下面的实例中,向此函C?AdventureWorks CZ数据库的打开q接Q然后?execute Ҏ(gu)调用 GetImmediateManager 存储q程Q?/p>
本示例用序号位|来标识参数。或者,也可以用参数的名称(而非其序号位|?来标识此参数。下面的代码CZ修改了上一个示例,以说明如何在 Java 应用E序中用命名参数。请注意Q这些参数名U对应于存储q程的定义中的参数名Uͼ 4 使用带有q回状态的存储q程 使用 JDBC 驱动E序调用q种存储q程Ӟ必须l合 SQLServerConnection cȝ prepareCall Ҏ(gu)使用 call SQL 转义序列。返回状态参数的 call 转义序列的语法如下所C: 此外Q向 registerOutParameter Ҏ(gu)传递返回状态参数值时Q不仅需要指定要使用的参数的数据cdQ还必须指定参数在存储过E中的序C|。对于返回状态参敎ͼ其序C|始lؓ 1Q这是因为它始终是调用存储过E时的第一个参数。尽?SQLServerCallableStatement cL持用参数的名称来指C特定参敎ͼ但?zhn)只能对返回状态参C用参数的序号位置~号?/p>
作ؓ实例Q在 SQL Server 2005 AdventureWorks CZ数据库中创徏以下存储q程Q?/p>
在下面的实例中,向此函C?AdventureWorks CZ数据库的打开q接Q然后?execute Ҏ(gu)调用 CheckContactCity 存储q程Q?/p>
使用 SQLServerCallableStatement cL建对存储q程的调用之后,可以使用 execute ?executeUpdate Ҏ(gu)中的L一个来调用此存储过E。executeUpdate Ҏ(gu)返回一?int |该值包含受此存储过E媄响的行数Q但 execute Ҏ(gu)不返回此倹{如果?execute Ҏ(gu)Qƈ且希望获得受影响的行数计敎ͼ则可以在q行存储q程后调?getUpdateCount Ҏ(gu)?/p>
作ؓ实例Q在 SQL Server 2005 AdventureWorks CZ数据库中创徏以下表和存储q程Q?/p>
使用 JDBC 驱动E序调用不带参数的存储过E时Q必M?call SQL 转义序列。不带参数的 call 转义序列的语法如下所C: 作ؓ实例Q在 SQL Server 2005 AdventureWorks CZ数据库中创徏以下存储q程Q?/p>
在下面的实例中,向此函C?AdventureWorks CZ数据库的打开q接Q然后?executeQuery Ҏ(gu)调用 GetContactFormalNames 存储q程?/p>
2使用带有输入参数的存储过E?/strong> 使用 JDBC 驱动E序调用带参数的存储q程Ӟ必须l合 SQLServerConnection cȝ prepareCall Ҏ(gu)使用 call SQL 转义序列。带?IN 参数?call 转义序列的语法如下所C: 构?call 转义序列Ӟ请??(问号)字符来指?IN 参数。此字符充当要传递给该存储过E的参数值的占位W。可以?SQLServerPreparedStatement cȝ setter Ҏ(gu)之一为参数指定倹{可使用?setter Ҏ(gu)?IN 参数的数据类型决定?/p>
?setter Ҏ(gu)传递值时Q不仅需要指定要在参C使用的实际|q必L定参数在存储q程中的序数位置。例如,如果存储q程包含单个 IN 参数Q则其序数gؓ 1。如果存储过E包含两个参敎ͼ则第一个序数gؓ 1Q第二个序数gؓ 2?/p>
作ؓ如何调用包含 IN 参数的存储过E的实例Q?SQL Server 2005 AdventureWorks CZ数据库中?uspGetEmployeeManagers 存储q程。此存储q程接受名ؓ EmployeeID 的单个输入参?它是一个整数?Q然后基于指定的 EmployeeID q回雇员及其l理的递归列表。下面是调用此存储过E的 Java 代码Q?/p>
3使用带有输出参数的存储过E?/strong> 使用 JDBC 驱动E序调用此类存储q程Ӟ必须l合 SQLServerConnection cȝ prepareCall Ҏ(gu)使用 call SQL 转义序列。带?OUT 参数?call 转义序列的语法如下所C: 构?call 转义序列Ӟ请??(问号)字符来指?OUT 参数。此字符充当要从该存储过E返回的参数值的占位W。要?OUT 参数指定|必须在运行存储过E前使用 SQLServerCallableStatement cȝ registerOutParameter Ҏ(gu)指定各参数的数据cd?/p>
使用 registerOutParameter Ҏ(gu)?OUT 参数指定的值必L java.sql.Types 所包含?JDBC 数据cd之一Q而它又被映射成本?SQL Server 数据cd之一。有?JDBC ?SQL Server 数据cd的详l信息,请参阅了?JDBC 驱动E序数据cd?/p>
当?zhn)对?OUT 参数?registerOutParameter Ҏ(gu)传递一个值时Q不仅必L定要用于此参数的数据cdQ而且必须在存储过E中指定此参数的序号位置或此参数的名U。例如,如果存储q程包含单个 OUT 参数Q则其序数gؓ 1;如果存储q程包含两个参数Q则W一个序数gؓ 1Q第二个序数gؓ 2?/p>
作ؓ实例Q在 SQL Server 2005 AdventureWorks CZ数据库中创徏以下存储q程Q?Ҏ(gu)指定的整?IN 参数 (employeeID)Q该存储q程也返回单个整?OUT 参数 (managerID)。根?HumanResources.Employee 表中包含?EmployeeIDQOUT 参数中返回的gؓ ManagerID?/p>
在下面的实例中,向此函C?AdventureWorks CZ数据库的打开q接Q然后?execute Ҏ(gu)调用 GetImmediateManager 存储q程Q?/p>
本示例用序号位|来标识参数。或者,也可以用参数的名称(而非其序号位|?来标识此参数。下面的代码CZ修改了上一个示例,以说明如何在 Java 应用E序中用命名参数。请注意Q这些参数名U对应于存储q程的定义中的参数名Uͼ 4 使用带有q回状态的存储q程 使用 JDBC 驱动E序调用q种存储q程Ӟ必须l合 SQLServerConnection cȝ prepareCall Ҏ(gu)使用 call SQL 转义序列。返回状态参数的 call 转义序列的语法如下所C: 此外Q向 registerOutParameter Ҏ(gu)传递返回状态参数值时Q不仅需要指定要使用的参数的数据cdQ还必须指定参数在存储过E中的序C|。对于返回状态参敎ͼ其序C|始lؓ 1Q这是因为它始终是调用存储过E时的第一个参数。尽?SQLServerCallableStatement cL持用参数的名称来指C特定参敎ͼ但?zhn)只能对返回状态参C用参数的序号位置~号?/p>
作ؓ实例Q在 SQL Server 2005 AdventureWorks CZ数据库中创徏以下存储q程Q?/p>
在下面的实例中,向此函C?AdventureWorks CZ数据库的打开q接Q然后?execute Ҏ(gu)调用 CheckContactCity 存储q程Q?/p>
使用 SQLServerCallableStatement cL建对存储q程的调用之后,可以使用 execute ?executeUpdate Ҏ(gu)中的L一个来调用此存储过E。executeUpdate Ҏ(gu)返回一?int |该值包含受此存储过E媄响的行数Q但 execute Ҏ(gu)不返回此倹{如果?execute Ҏ(gu)Qƈ且希望获得受影响的行数计敎ͼ则可以在q行存储q程后调?getUpdateCount Ҏ(gu)?/p>
作ؓ实例Q在 SQL Server 2005 AdventureWorks CZ数据库中创徏以下表和存储q程Q?/p>
?#8220;补充说明”中填写的最佳信息因异Q这取决于求职者的职业目标和背景。请CQ求职简历是自我营销的手D,其中的信息应当有助于向用人单位推销自己Q以实现自己的职业目标。可以这栯虑问题Q如果这是向潜在的用人单位推销自己的最会机会,你会说些什么?
以下是一些填?#8220;补充说明”的思\Q供大家参考:
能力或业lȝ
在补充说明对自己的能力和职业生Әq行ȝ。在能力或业lȝ中要H出自己主要?#8220;卖点”和成功案例——这一切都应当与你惌应聘的职位有关系?
获奖情况
用列举自q获奖情况作ؓ求职历的l束Q会l用人单位留下深d象?
证明书或推荐?/strong>
你是否收到过对于你的工作情况表示满意的推荐信或业l评估证明?如果有,可以摘选其中的_N部分作ؓ“补充说明”?
发表作品
如果在报刊、杂志上发表q作品,可以考虑?#8220;补充说明”里罗列出来?
专利
如果拥有专利Q包括正在申LQ,请在“补充说明”中列出?
演讲能力
许多职位要有演讲能力才能胜Q。列举自己参加过的演讌Ӏ主题发a会给用h单位留下好印象?
计算用技?/strong>
?#8220;补充说明”中列举自己在计算机操作系l、网l和g{方面的技能,多多益善?
培训情况
?#8220;补充说明”中列己参加过的专?span>培训和l教肌Ӏ?
再次工作地点
?#8220;补充说明”中再ơ强调工作地点不׃ؓl束求职历的好办法?
说明自己愿意出差
如果愿意出差Q可以在补充说明中加以说明,用h单位或许会因一点而看上你?
应该省略的内?/strong>
补充说明不要涉及婚姻状况、年龄、有多少个孩子等情况Q如果兴爱好与工作无关Q最好也不要提及?br />
来源:中华英才|?/a>
]]>
字符 描述
下一个字W标Cؓ一个特D字W、或一个原义字W、或一个后向引用、或一个八q制转义W。例如,'n' 匚w字符 "n"?\n' 匚w一个换行符。序?nbsp;'\' 匚w "" ?nbsp;"\(" 则匹?nbsp;"("?/font>
^
匚w输入字符串的开始位|。如果设|了 RegExp 对象?nbsp;Multiline 属性,^ 也匹?nbsp;'\n' ?nbsp;'\r' 之后的位|?/font>
$
匚w输入字符串的l束位置。如果设|了RegExp 对象?nbsp;Multiline 属性,$ 也匹?nbsp;'\n' ?nbsp;'\r' 之前的位|?/font>
*
匚w前面的子表达式零ơ或多次。例如,zo* 能匹?nbsp;"z" 以及 "zoo"?nbsp;* {h(hun)于{0,}。[/size]
+
匚w前面的子表达式一ơ或多次。例如,'zo+' 能匹?nbsp;"zo" 以及 "zoo"Q但不能匚w "z"? {h(hun)?nbsp;{1,}?/font>
?
匚w前面的子表达式零ơ或一ơ。例如,"do(es)?" 可以匚w "do" ?nbsp;"does" 中的"do" ? {h(hun)?nbsp;{0,1}?/font>
{n}
n 是一个非负整数。匹配确定的 n ơ。例如,'o{2}' 不能匚w "Bob" 中的 'o'Q但是能匚w "food" 中的两个 o?/font>
{n,}
n 是一个非负整数。至匹配n ơ。例如,'o{2,}' 不能匚w "Bob" 中的 'o'Q但能匹?nbsp;"foooood" 中的所?nbsp;o?o{1,}' {h(hun)?nbsp;'o+'?o{0,}' 则等价于 'o*'?/font>
{n,m}
m ?nbsp;n 均ؓ非负整数Q其中n <= m。最匹?nbsp;n ơ且最多匹?nbsp;m ơ。刘Q?nbsp;"o{1,3}" 匹?nbsp;"fooooood" 中的前三?nbsp;o?o{0,1}' {h(hun)?nbsp;'o?'。请注意在逗号和两个数之间不能有空根{?/font>
?
当该字符紧跟在Q何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面Ӟ匚w模式是非贪婪的。非贪婪模式可能少的匹配所搜烦的字W串Q而默认的贪婪模式则尽可能多的匚w所搜烦的字W串。例如,对于字符?nbsp;"oooo"Q?o+?' 匹配单?nbsp;"o"Q?nbsp;'o+' 匹配所?nbsp;'o'?/font>
.
匚w?nbsp;"\n" 之外的Q何单个字W。要匚w包括 '\n' 在内的Q何字W,请用象 '[.\n]' 的模式?/font>
(pattern)
匚wpattern q获取这一匚w。所获取的匹配可以从产生?nbsp;Matches 集合得到Q在VBScript 中?nbsp;SubMatches 集合Q在JScript 中则使用 {CONTENT}… 属性。要匚w圆括号字W,请?nbsp;'\(' ?nbsp;'\)'?/font>
(?:pattern)
匚w pattern 但不获取匚wl果Q也是说这是一个非获取匚wQ不q行存储供以后用。这在?nbsp;"? 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 是一个比 'industry|industries' 更简略的表达式?/font>
(?=pattern)
正向预查Q在M匚w pattern 的字W串开始处匚w查找字符丌Ӏ这是一个非获取匚wQ也是_该匹配不需要获取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹?nbsp;"Windows 2000" 中的 "Windows" Q但不能匚w "Windows 3.1" 中的 "Windows"。预查不消耗字W,也就是说Q在一个匹配发生后Q在最后一ơ匹配之后立卛_始下一ơ匹配的搜烦Q而不是从包含预查的字W之后开始?/font>
(?!pattern)
负向预查Q在M不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字W串开始处匚w查找字符丌Ӏ这是一个非获取匚wQ也是_该匹配不需要获取供以后使用。例?Windows (?!95|98|NT|2000)' 能匹?nbsp;"Windows 3.1" 中的 "Windows"Q但不能匚w "Windows 2000" 中的 "Windows"。预查不消耗字W,也就是说Q在一个匹配发生后Q在最后一ơ匹配之后立卛_始下一ơ匹配的搜烦Q而不是从包含预查的字W之后开?/font>
x|y
匚w x ?nbsp;y。例如,'z|food' 能匹?nbsp;"z" ?nbsp;"food"?(z|f)ood' 则匹?nbsp;"zood" ?nbsp;"food"?/font>
[xyz]
字符集合。匹配所包含的Q意一个字W。例如, '[abc]' 可以匚w "plain" 中的 'a'?/font>
[^xyz]
负值字W集合。匹配未包含的Q意字W。例如, '[^abc]' 可以匚w "plain" 中的'p'?/font>
[a-z]
字符范围。匹配指定范围内的Q意字W。例如,'[a-z]' 可以匚w 'a' ?nbsp;'z' 范围内的L写字母字符?/font>
[^a-z]
负值字W范围。匹配Q何不在指定范围内的Q意字W。例如,'[^a-z]' 可以匚wM不在 'a' ?nbsp;'z' 范围内的L字符?/font>
\b
匚w一个单词边界,也就是指单词和空格间的位|。例如, 'er\b' 可以匚w"never" 中的 'er'Q但不能匚w "verb" 中的 'er'?/font>
\B
匚w非单词边界?er\B' 能匹?nbsp;"verb" 中的 'er'Q但不能匚w "never" 中的 'er'?/font>
\cx
匚w由x指明的控制字W。例如, \cM 匚w一?nbsp;Control-M 或回车符?nbsp;x 的值必Mؓ A-Z ?nbsp;a-z 之一。否则,?nbsp;c 视ؓ一个原义的 'c' 字符?/font>
\d
匚w一个数字字W。等价于 [0-9]?/font>
\D
匚w一个非数字字符。等价于 [^0-9]?/font>
\f
匚w一个换늬。等价于 \x0c ?nbsp;\cL?/font>
\n
匚w一个换行符。等价于 \x0a ?nbsp;\cJ?/font>
\r
匚w一个回车符。等价于 \x0d ?nbsp;\cM?/font>
\s
匚wMI白字符Q包括空根{制表符、换늬{等。等价于 [ \f\n\r\t\v]?/font>
\S
匚wM非空白字W。等价于 [^ \f\n\r\t\v]?/font>
\t
匚w一个制表符。等价于 \x09 ?nbsp;\cI?/font>
\v
匚w一个垂直制表符。等价于 \x0b ?nbsp;\cK?/font>
\w
匚w包括下划U的M单词字符。等价于'[A-Za-z0-9_]'?/font>
\W
匚wM非单词字W。等价于 '[^A-Za-z0-9_]'?/font>
\xn
匚w nQ其?nbsp;n 为十六进制{义倹{十六进制{义值必Mؓ定的两个数字长。例如, '\x41' 匚w "A"?\x041' 则等价于 '\x04' & "1"。正则表辑ּ中可以?nbsp;ASCII ~码?
\num
匚w numQ其?nbsp;num 是一个正整数。对所获取的匹配的引用。例如,'(.)' 匚w两个q箋的相同字W?/font>
\n
标识一个八q制转义值或一个后向引用。如?nbsp;\n 之前臛_ n 个获取的子表辑ּQ则 n 为后向引用。否则,如果 n 为八q制数字 (0-7)Q则 n Z个八q制转义倹{?/font>
\nm
标识一个八q制转义值或一个后向引用。如?nbsp;\nm 之前臛_有is preceded by at least nm 个获取得子表辑ּQ则 nm 为后向引用。如?nbsp;\nm 之前臛_?nbsp;n 个获取,?nbsp;n Z个后跟文?nbsp;m 的后向引用。如果前面的条g都不满Q若 n ?nbsp;m 均ؓ八进制数?nbsp;(0-7)Q则 \nm 匹配八q制转义?nbsp;nm?/font>
\nml
如果 n 为八q制数字 (0-3)Q且 m ?nbsp;l 均ؓ八进制数?nbsp;(0-7)Q则匚w八进制{义?nbsp;nml?/font>
\un
匚w nQ其?nbsp;n 是一个用四个十六q制数字表示?nbsp;Unicode 字符。例如,\u00A9 匚w版权W号 (?)?/font>
]]>
评注Q匹配中文还真是个头疼的事,有了q个表达式就好办?/font>
评注Q可以用来计字W串的长度(一个双字节字符长度?QASCII字符?Q?/font>
评注Q可以用来删除空白行
评注Q网上流传的版本太糟p,上面q个也仅仅能匚w部分Q对于复杂的嵌套标记依旧无能为力
评注Q可以用来删除行首行I白字符(包括I格、制表符、换늬{等)Q非常有用的表达?/font>
评注Q表单验证时很实?/font>
评注Q网上流传的版本功能很有限,上面q个基本可以满需?/font>
评注Q表单验证时很实?/font>
评注Q匹配Ş式如 0511-4405222 ?nbsp;021-87888822
评注Q腾讯QQ号从10000开?/font>
评注Q中国邮政编码ؓ6位数?/font>
评注Q中国的w䆾证ؓ15位或18?/font>
评注Q提取ip地址时有?/font>
匚w特定数字Q?/font>
^[1-9]d*$ //匚w正整?/font>
^-[1-9]d*$ //匚w负整?/font>
^-?[1-9]d*$ //匚w整数
^[1-9]d*|0$ //匚w非负整数Q正整数 + 0Q?/font>
^-[1-9]d*|0$ //匚w非正整数Q负整数 + 0Q?/font>
^[1-9]d*.d*|0.d*[1-9]d*$ //匚w正QҎ(gu)
^-([1-9]d*.d*|0.d*[1-9]d*)$ //匚w负QҎ(gu)
^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$ //匚w点?/font>
^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$ //匚w非负点敎ͼ正QҎ(gu) + 0Q?/font>
^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$ //匚w非正点敎ͼ负QҎ(gu) + 0Q?/font>
评注Q处理大量数据时有用Q具体应用时注意修正
^[A-Za-z]+$ //匚w?6个英文字母组成的字符?/font>
^[A-Z]+$ //匚w?6个英文字母的大写l成的字W串
^[a-z]+$ //匚w?6个英文字母的写l成的字W串
^[A-Za-z0-9]+$ //匚w由数字和26个英文字母组成的字符?/font>
^w+$ //匚w由数字?6个英文字母或者下划线l成的字W串
在用RegularExpressionValidator验证控g时的验证功能及其验证表达式介l如?
只能输入数字Q?#8220;^[0-9]*$”
只能输入n位的数字Q?#8220;^d{n}$”
只能输入臛_n位数字:“^d{n,}$”
只能输入m-n位的数字Q?#8220;^d{m,n}$”
只能输入零和非零开头的数字Q?#8220;^(0|[1-9][0-9]*)$”
只能输入有两位小数的正实敎ͼ“^[0-9]+(.[0-9]{2})?$”
只能输入?-3位小数的正实敎ͼ“^[0-9]+(.[0-9]{1,3})?$”
只能输入非零的正整数Q?#8220;^+?[1-9][0-9]*$”
只能输入非零的负整数Q?#8220;^-[1-9][0-9]*$”
只能输入长度?的字W:“^.{3}$”
只能输入?6个英文字母组成的字符Ԍ“^[A-Za-z]+$”
只能输入?6个大写英文字母组成的字符Ԍ“^[A-Z]+$”
只能输入?6个小写英文字母组成的字符Ԍ“^[a-z]+$”
只能输入由数字和26个英文字母组成的字符Ԍ“^[A-Za-z0-9]+$”
只能输入由数字?6个英文字母或者下划线l成的字W串Q?#8220;^w+$”
验证用户密码:“^[a-zA-Z]w{5,17}$”正确格式为:以字母开_长度?-18之间Q?/font>
只能包含字符、数字和下划Uѝ?/font>
验证是否含有^%&',;=?$"{字W:“[^%&',;=?$x22]+”
只能输入汉字Q?#8220;^[u4e00-u9fa5],{0,}$”
验证Email地址Q?#8220;^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$”
验证InternetURLQ?#8220;^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$”
验证?sh)话LQ?#8220;^((d{3,4})|d{3,4}-)?d{7,8}$”
正确格式为:“XXXX-XXXXXXX”Q?#8220;XXXX-XXXXXXXX”Q?#8220;XXX-XXXXXXX”Q?/font>
“XXX-XXXXXXXX”Q?#8220;XXXXXXX”Q?#8220;XXXXXXXX”?/font>
验证w䆾证号Q?5位或18位数字)Q?#8220;^d{15}|d{}18$”
验证一q的12个月Q?#8220;^(0?[1-9]|1[0-2])$”正确格式为:“01”-“09”?#8220;1”“12”
验证一个月?1天:“^((0?[1-9])|((1|2)[0-9])|30|31)$”
正确格式为:“01”“09”?#8220;1”“31”?/font>
匚w中文字符的正则表辑ּQ?nbsp;[u4e00-u9fa5]
匚w双字节字W?包括汉字在内)Q[^x00-xff]
匚wI的正则表辑ּQn[s| ]*r
匚wHTML标记的正则表辑ּQ?<(.*)>.*</1>|<(.*) />/
匚w首尾I格的正则表辑ּQ?^s*)|(s*$)
匚wEmail地址的正则表辑ּQw+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
匚w|址URL的正则表辑ּQ?/font>http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?
String.prototype.len=function(){return this.replace([^x00-xff]/g,"aa").length;}
String.prototype.trim = function()
{
return this.replace(/(^s*)|(s*$)/g, "");
}
(3)应用Q利用正则表辑ּ分解和{换IP地址
function IP2V(ip) //IP地址转换成对应数?/font>
{
re=/(d+).(d+).(d+).(d+)/g //匚wIP地址的正则表辑ּ
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error("Not a valid IP address!")
}
}
(4)应用Q从URL地址中提取文件名的javascriptE序
s="http://www.9499.net/page1.htm";
s=s.replace(/(.*/){0,}([^.]+).*/ig,"$2") ; //Page1.htm
(5)应用Q利用正则表辑ּ限制|页表单里的文本框输入内?/font>
用正则表辑ּ限制只能输入中文Qonkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"
用正则表辑ּ限制只能输入全角字符Q?nbsp;onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"
用正则表辑ּ限制只能输入数字Qonkeyup="value=value.replace(/[^d]/g,'') "onbeforepaste= "clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"
用正则表辑ּ限制只能输入数字和英文:onkeyup="value=value.replace(/[W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''
]]>
1使用不带参数的存储过E?/strong>
以下是引用片D:
{call procedure-name}
此存储过E返回单个结果集Q其中包含一列数??Person.Contact 表中前十个联pMh的称呹{名U和姓氏l成)?
以下是引用片D:
CREATE PROCEDURE GetContactFormalNames
AS
BEGIN
SELECT TOP 10 Title + ' ' + FirstName + ' ' + LastName AS FormalName
FROM Person.Contact
END
以下是引用片D:
public static void executeSprocNoParams(Connection con) ...{
try ...{
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("{call dbo.GetContactFormalNames}");
while (rs.next()) ...{
System.out.println(rs.getString("FormalName"));
}
rs.close();
stmt.close();
}
catch (Exception e) ...{
e.printStackTrace();
}
}
以下是引用片D:
{call procedure-name[([parameter][,[parameter]]...)]}
以下是引用片D:
public static void executeSprocInParams(Connection con) ...{
try ...{
PreparedStatement pstmt = con.prepareStatement("{call dbo.uspGetEmployeeManagers(?)}");
pstmt.setInt(1, 50);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) ...{
System.out.println("EMPLOYEE:");
System.out.println(rs.getString("LastName") + ", " + rs.getString("FirstName"));
System.out.println("MANAGER:");
System.out.println(rs.getString("ManagerLastName") + ", " + rs.getString("ManagerFirstName"));
System.out.println();
}
rs.close();
pstmt.close();
}
catch (Exception e) ...{
e.printStackTrace();
}
}
以下是引用片D:
{call procedure-name[([parameter][,[parameter]]...)]}
以下是引用片D:
public static void executeStoredProcedure(Connection con) ...{
try ...{
CallableStatement cstmt = con.prepareCall("{call dbo.GetImmediateManager(?, ?)}");
cstmt.setInt(1, 5);
cstmt.registerOutParameter(2, java.sql.Types.INTEGER);
cstmt.execute();
System.out.println("MANAGER ID: " + cstmt.getInt(2));
}
catch (Exception e) ...{
e.printStackTrace();
}
} CREATE PROCEDURE GetImmediateManager
存储q程可能q回更新计数和多个结果集。Microsoft SQL Server 2005 JDBC Driver 遵@ JDBC 3.0 规范Q此规范规定在检?OUT 参数之前应检索多个结果集和更新计数。也是_应用E序应先索所?ResultSet 对象和更新计敎ͼ然后使用 CallableStatement.getter Ҏ(gu)?OUT 参数。否则,当检?OUT 参数Ӟ未索的 ResultSet 对象和更新计数将丢失?
以下是引用片D:
@employeeID INT,
@managerID INT OUTPUT
AS
BEGIN
SELECT @managerID = ManagerID
FROM HumanResources.Employee
WHERE EmployeeID = @employeeID
END
构?call 转义序列Ӟ请??(问号)字符来指定返回状态参数。此字符充当要从该存储过E返回的参数值的占位W。要回状态参数指定|必须在执行存储过E前使用 SQLServerCallableStatement cȝ registerOutParameter Ҏ(gu)指定参数的数据类型?
以下是引用片D:
{[?=]call procedure-name[([parameter][,[parameter]]...)]}
该存储过E返回状态?1 ?0Q这取决于是否能在表 Person.Address 中找?cityName 参数指定的城市?
以下是引用片D:
CREATE PROCEDURE CheckContactCity
(@cityName CHAR(50))
AS
BEGIN
IF ((SELECT COUNT(*)
FROM Person.Address
WHERE City = @cityName) > 1)
RETURN 1
ELSE
RETURN 0
END
5 使用带有更新计数的存储过E?/strong>
以下是引用片D:
public static void executeStoredProcedure(Connection con) ...{
try ...{
CallableStatement cstmt = con.prepareCall("{? = call dbo.CheckContactCity(?)}");
cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
cstmt.setString(2, "Atlanta");
cstmt.execute();
System.out.println("RETURN STATUS: " + cstmt.getInt(1));
}
cstmt.close();
catch (Exception e) ...{
e.printStackTrace();
}
}
在下面的实例中,向此函C?AdventureWorks CZ数据库的打开q接Qƈ使用 execute Ҏ(gu)调用 UpdateTestTable 存储q程Q然后?getUpdateCount Ҏ(gu)q回受存储过E媄响的行计数?
以下是引用片D:
CREATE TABLE TestTable
(Col1 int IDENTITY,
Col2 varchar(50),
Col3 int);
CREATE PROCEDURE UpdateTestTable
@Col2 varchar(50),
@Col3 int
AS
BEGIN
UPDATE TestTable
SET Col2 = @Col2, Col3 = @Col3
END;
以下是引用片D:
public static void executeUpdateStoredProcedure(Connection con) ...{
try ...{
CallableStatement cstmt = con.prepareCall("{call dbo.UpdateTestTable(?, ?)}");
cstmt.setString(1, "A");
cstmt.setInt(2, 100);
cstmt.execute();
int count = cstmt.getUpdateCount();
cstmt.close();
System.out.println("ROWS AFFECTED: " + count);
}
catch (Exception e) ...{
e.printStackTrace();
}
}
]]>
1使用不带参数的存储过E?/strong>
以下是引用片D:
{call procedure-name}
此存储过E返回单个结果集Q其中包含一列数??Person.Contact 表中前十个联pMh的称呹{名U和姓氏l成)?
以下是引用片D:
CREATE PROCEDURE GetContactFormalNames
AS
BEGIN
SELECT TOP 10 Title + ' ' + FirstName + ' ' + LastName AS FormalName
FROM Person.Contact
END
以下是引用片D:
public static void executeSprocNoParams(Connection con) ...{
try ...{
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("{call dbo.GetContactFormalNames}");
while (rs.next()) ...{
System.out.println(rs.getString("FormalName"));
}
rs.close();
stmt.close();
}
catch (Exception e) ...{
e.printStackTrace();
}
}
以下是引用片D:
{call procedure-name[([parameter][,[parameter]]...)]}
以下是引用片D:
public static void executeSprocInParams(Connection con) ...{
try ...{
PreparedStatement pstmt = con.prepareStatement("{call dbo.uspGetEmployeeManagers(?)}");
pstmt.setInt(1, 50);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) ...{
System.out.println("EMPLOYEE:");
System.out.println(rs.getString("LastName") + ", " + rs.getString("FirstName"));
System.out.println("MANAGER:");
System.out.println(rs.getString("ManagerLastName") + ", " + rs.getString("ManagerFirstName"));
System.out.println();
}
rs.close();
pstmt.close();
}
catch (Exception e) ...{
e.printStackTrace();
}
}
以下是引用片D:
{call procedure-name[([parameter][,[parameter]]...)]}
以下是引用片D:
public static void executeStoredProcedure(Connection con) ...{
try ...{
CallableStatement cstmt = con.prepareCall("{call dbo.GetImmediateManager(?, ?)}");
cstmt.setInt(1, 5);
cstmt.registerOutParameter(2, java.sql.Types.INTEGER);
cstmt.execute();
System.out.println("MANAGER ID: " + cstmt.getInt(2));
}
catch (Exception e) ...{
e.printStackTrace();
}
} CREATE PROCEDURE GetImmediateManager
存储q程可能q回更新计数和多个结果集。Microsoft SQL Server 2005 JDBC Driver 遵@ JDBC 3.0 规范Q此规范规定在检?OUT 参数之前应检索多个结果集和更新计数。也是_应用E序应先索所?ResultSet 对象和更新计敎ͼ然后使用 CallableStatement.getter Ҏ(gu)?OUT 参数。否则,当检?OUT 参数Ӟ未索的 ResultSet 对象和更新计数将丢失?
以下是引用片D:
@employeeID INT,
@managerID INT OUTPUT
AS
BEGIN
SELECT @managerID = ManagerID
FROM HumanResources.Employee
WHERE EmployeeID = @employeeID
END
构?call 转义序列Ӟ请??(问号)字符来指定返回状态参数。此字符充当要从该存储过E返回的参数值的占位W。要回状态参数指定|必须在执行存储过E前使用 SQLServerCallableStatement cȝ registerOutParameter Ҏ(gu)指定参数的数据类型?
以下是引用片D:
{[?=]call procedure-name[([parameter][,[parameter]]...)]}
该存储过E返回状态?1 ?0Q这取决于是否能在表 Person.Address 中找?cityName 参数指定的城市?
以下是引用片D:
CREATE PROCEDURE CheckContactCity
(@cityName CHAR(50))
AS
BEGIN
IF ((SELECT COUNT(*)
FROM Person.Address
WHERE City = @cityName) > 1)
RETURN 1
ELSE
RETURN 0
END
5 使用带有更新计数的存储过E?/strong>
以下是引用片D:
public static void executeStoredProcedure(Connection con) ...{
try ...{
CallableStatement cstmt = con.prepareCall("{? = call dbo.CheckContactCity(?)}");
cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
cstmt.setString(2, "Atlanta");
cstmt.execute();
System.out.println("RETURN STATUS: " + cstmt.getInt(1));
}
cstmt.close();
catch (Exception e) ...{
e.printStackTrace();
}
}
在下面的实例中,向此函C?AdventureWorks CZ数据库的打开q接Qƈ使用 execute Ҏ(gu)调用 UpdateTestTable 存储q程Q然后?getUpdateCount Ҏ(gu)q回受存储过E媄响的行计数?
以下是引用片D:
CREATE TABLE TestTable
(Col1 int IDENTITY,
Col2 varchar(50),
Col3 int);
CREATE PROCEDURE UpdateTestTable
@Col2 varchar(50),
@Col3 int
AS
BEGIN
UPDATE TestTable
SET Col2 = @Col2, Col3 = @Col3
END;
以下是引用片D:
public static void executeUpdateStoredProcedure(Connection con) ...{
try ...{
CallableStatement cstmt = con.prepareCall("{call dbo.UpdateTestTable(?, ?)}");
cstmt.setString(1, "A");
cstmt.setInt(2, 100);
cstmt.execute();
int count = cstmt.getUpdateCount();
cstmt.close();
System.out.println("ROWS AFFECTED: " + count);
}
catch (Exception e) ...{
e.printStackTrace();
}
}
]]>
go
if exists(select * from sysdatabases where name = 'BankDB')
drop database BankDB
go
exec xp_cmdshell 'md E:\q?,NO_OUTPUT
create database BankDB
go
use BankDB
--创徏帐户信息表AccountInfo
if exists(select * from sysobjects where name = 'AccountInfo')
drop table AccountInfo
go
create table AccountInfo
(
CustID int identity(1,1) primary key,
CustName varchar(20) not null,
IDCard varchar(18) check(len(IDCard) = 15 or len(IDCard) = 18),
TelePhone varchar(13) check(len(TelePhone)=11 or len(TelePhone) like'[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9]' or len(TelePhone) like'[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]') ,
Address varchar(50) default '地址不详'
)
go
--创徏信用卡信息表CardInfo
if exists(select * from sysobjects where name = 'CardInfo')
drop table CardInfo
go
create table CardInfo
(
CardID varchar(19) check(len(CardID)=19) primary key,
CardPassWord varchar(6) default'888888',
CustID int references AccountInfo(CustID),
SaveType varchar(10) not null check(SaveType in('zL','定期')),
OpenDate datetime not null default(getdate()),
OpenMoney money not null check(OpenMoney >= 1),
LeftMoney money not null check(LeftMoney >= 1),
IsLoss varchar(2) not null check(IsLoss in('?,'?)) default '?
)
go
--创徏交易信息表TransInfo
if exists(select * from sysobjects where name = 'TransInfo')
drop table TransInfo
go
create table TransInfo
(
CardID varchar(19) not null,
TransType varchar(4) not null check(TransType in('存入','支取')),
TransMoney money not null check(TransMoney > 0),
TransDate datetime default(getdate())
)
go
-------------------------------插入试数据-------------------------------------
---为AccountInfo表插入测试数?br />
insert into AccountInfo values('孙?zhn)I?,'422322123902140019','027-8888988','花果?)
insert into AccountInfo values('唐僧','422322001902140019','027-8536896','大唐')
insert into AccountInfo values('沙和?,'410334020157144719','13295654665','通天?)
---为CardInfo表插入测试数?br />
insert into CardInfo values('1027 3726 1536 1135',default,1,'定期',default,500.00,500.00,default)
insert into CardInfo values('1029 3526 1235 1235',default,2,'zL',default,1500.00,1500.00,default)
insert into CardInfo values('1324 7532 1536 1935',default,3,'zL',default,4500.00,4500.00,default)
---表的查看
select * from AccountInfo
select * from CardInfo
select * from TransInfo
-----------------T-SQL----------------------------
--孙?zhn)IZ改密?br />
update CardInfo set CardPassWord = 611234 where CustID = 1
--孙?zhn)I取?br />
--事务开?br />
begin transaction tran_Qu
--定义一个用于记录错误的变量
declare @tran_error int
set @tran_error = 0;
--孙(zhn)空交易q行记录
insert into TransInfo values('1027 3726 1536 1135','支取',200.00,getdate())
set @tran_error = @tran_error + @@error
--从孙(zhn)空的帐户中减去200.00
update CardInfo set LeftMoney = LeftMoney - 200
where CardID = '1027 3726 1536 1135'
set @tran_error = @tran_error + @@error
if @tran_error <> 0
begin
--执行错误Q回滚事?br />
rollback transaction
print '支取p|Q交易已取消'
end
else
begin
--没有发现错误Q提交事?br />
commit transaction
print'交易成功Q已保存新数?
end
go
select * from CardInfo where CustID = 1
--沙和存?br />
begin transaction tran_bring
declare @tran_error int
set @tran_error = 0;
insert into TransInfo values('1324 7532 1536 1935','存入',1200.00,getdate())
set @tran_error = @tran_error + @@error
update CardInfo set LeftMoney = LeftMoney + 1200
where CardID = '1324 7532 1536 1935'
set @tran_error = @tran_error + @@error
if @tran_error <> 0
begin
rollback transaction
print '存入p|Q交易已取消'
end
else
begin
commit transaction
print'交易成功Q已保存新数?
end
go
select * from CardInfo where CustID = 3
--唐僧卡丢?br /> update CardInfo set IsLoss='? where CustID = 2
--查询最q?0开L银行卡信?br /> select * from CardInfo where datediff(dd,OpenDate,getdate()) <= 10
--查询最大交易的卡信?br />
declare @maxMoney money
select @maxMoney = max(TransMoney) from TransInfo
select * from CardInfo where CardID in(select CardID from TransInfo where TransMoney = @maxMoney)
--查询交易信息表中ȝ交易
declare @allMoney money
declare @QuMoney money
declare @CunMoney money
select @allMoney = sum(TransMoney) from TransInfo
select @QuMoney = sum(TransMoney) from TransInfo where TransType = '支取'
select @CunMoney = sum(TransMoney) from TransInfo where TransType = '存入'
print 'M易金额:' + convert(varchar(10),@allMoney)
print '支取交易金额Q? + convert(varchar(10),@QuMoney)
print '存入交易金额Q? + convert(varchar(10),@CunMoney)
--l交易信息表加上非聚集烦引,q利用非聚集索引查询数据
if exists(select * from sysobjects where name = 'IX_CardID')
drop index BankDB.IX_CardID
go
create nonclustered index IX_CardID
on TransInfo(CardID)
with fillfactor = 30
go
select * from TransInfo with(index = IX_CardID) where CardID = '1324 7532 1536 1935'
--查询挂失的̎户信?br /> select * from AccountInfo where CustID in(select CustID from CardInfo where IsLoss = '?)
--账户信息视图
if exists(select * from sysobjects where name = 'view_AccountCardInfo')
drop view view_AccountCardInfo
go
create view view_AccountCardInfo
as
select AccountInfo.CustID '帐户~号',CustName '帐户姓名',IDCard'w䆾证号?,TelePhone'客户?sh)?,Address'客户地址',
CardID'信用卡编?,SaveType'储蓄cd',OpenDate'开h?,OpenMoney'开户金?,IsLoss'是否挂失'
from AccountInfo join CardInfo
on AccountInfo.CustID = CardInfo.CustID
go
select * from view_AccountCardInfo
--交易信息视图
if exists(select * from sysobjects where name = 'view_TransInfo')
drop view view_TransInfo
go
create view view_TransInfo
as
select CardID '卡号',TransType '交易cd',TransMoney '交易金额',TransDate '交易旉'
from TransInfo
go
go
select * from view_TransInfo
---------------W三阶段----------------
--------T-SQL-------------
if exists(select name from sysobjects where name = 'Tri_TransInfo_Insert')
drop trigger Tri_TransInfo_Insert
go
create trigger Tri_TransInfo_Insert on TransInfo for insert
as
declare @TempTransType varchar(10) --定义临时的变量存放交易类?br />
declare @TempTransMoney money --定义临时的变量存放交易金?br />
declare @TempCardID varchar(19) --定义临时的变量存攑֍?br />
declare @TempLeftMoney money --定义临时的变量存攑֮L余额
--从inserted临时表中取出数据赋?br />
select @TempTransType = TransType,@TempTransMoney = TransMoney,@TempCardID = CardID
from inserted
select @TempLeftMoney = LeftMoney from CardInfo where CardID = @TempCardID
if(@TempTransType = '支取')
begin
if(@TempLeftMoney - @TempTransMoney >=1)
begin
update CardInfo set LeftMoney = @TempLeftMoney - @TempTransMoney where CardID = @TempCardID
print '交易成功Q?
end
else
begin
rollback transaction
print '余额不Q交易失败!'
end
end
else
begin
update CardInfo set LeftMoney = @TempLeftMoney + @TempTransMoney where CardID = @TempCardID
print '交易成功Q?
end
select @TempLeftMoney = LeftMoney from CardInfo where CardID = @TempCardID
print '卡号Q? + convert(varchar(19),@TempCardID) + ' 余额Q? + convert(varchar(10),@TempLeftMoney)
go
set nocount on --不显C句媄响记录行?br />
--试触发?沙和支?br />
insert into TransInfo(CardID,TransType,TransMoney) values('9645 9087 9371 4492','支取',500)
go
select * from TransInfo
select * from accountinfo
select * from CardInfo
--利用存储q程实现备䆾交易信息的业?br />
if exists(select *from sysobjects where name = 'Proc_Backup_TransInfo')
drop procedure Proc_Backup_TransInfo
go
create procedure Proc_Backup_TransInfo
@BackupDate datetime
as
declare @MyError int
set @MyError = 0
print '开始备?.....'
if exists(select * from sysobjects where name ='Back_TransInfo')
begin
begin tran
insert into Back_TransInfo select * from TransInfo where datediff(dd,TransDate,getdate()) >=0
set @MyError = @MyError + @@error
if @MyError != 0
begin
rollback transaction
print '备䆾p|'
end
else
begin
commit transaction
print'备䆾成功'
end
end
else
begin
begin tran
select * into Back_TransInfo from TransInfo where datediff(dd,TransDate,getdate()) >=0
set @MyError = @MyError + @@error
if @MyError != 0
begin
rollback transaction
print '备䆾p|!'
end
else
begin
commit transaction
print '备䆾成功!'
end
end
go
insert into TransInfo values('1324 7532 1536 1935','支取',500.00,getdate())
insert into TransInfo values('1324 7532 1536 1935','支取',500.00,getdate())
insert into TransInfo values('1324 7532 1536 1935','支取',500.00,getdate())
declare @BackDate datetime
set @BackDate = getDate()
exec Proc_Backup_TransInfo '2008-10-31'
go
select * from Back_TransInfo
--实现银行卡的存储q程
if exists(select * from sysobjects where name = 'Proc_GetCardID')
drop procedure Proc_GetCardID
go
create procedure Proc_GetCardID
@CardID varchar(19) output
as
declare @TempRand numeric(18,16)
declare @TempStr varchar(18)
set @TempRand = rand(datepart(ms,getdate())*10000)
set @TempStr = convert(varchar(18),@TempRand)
set @CardID = substring(@TempStr,3,4)+' '+substring(@TempStr,7,4)+' '+substring(@TempStr,11,4)+' '+substring(@TempStr,15,4)
go
declare @MyCardID varchar(19)
exec Proc_GetCardID @MyCardID output
print '产生的随卛_hQ? + @MyCardID
go
--实现开L存储q程
if exists(select * from sysobjects where name = 'Proc_OpenAcount')
drop procedure Proc_OpenAcount
go
create procedure Proc_OpenAcount
@CustName varchar(20),
@IDCard varchar(18),
@Telephone varchar(13),
@OpenMoney money = 1,
@SaveType varchar(10) = 'zL',
@Address varchar(50)= '地址不详'
as
declare @MyCardID varchar(19)
declare @MyCustID int
exec Proc_GetCardID @MyCardID output
while(1=1)
begin
if exists(select * from CardInfo where CardID = @MyCardID)
exec Proc_GetCardID @MyCardID output
else
break
end
insert into AccountInfo values(@CustName,@IDCard,@TelePhone,@Address)
select @MyCustID = CustID from AccountInfo where IDCard = @IDCard
insert into CardInfo values(@MyCardID,default,@MyCustID,@SaveType,default,@OpenMoney,@OpenMoney,default)
print '敬的客P' +@CustName +'开h功,卡号为:'+@MyCardId
print '产生的随机卡号ؓQ? + @MyCardID
exec Proc_OpenAcount '白骨_?,'245687556977812345','12478964568'
exec Proc_OpenAcount '嫦娥公主','745687476912812335','14796653141',@Address = '月亮'
----销?br />
if exists(select * from sysobjects where name = 'Proc_DropAcount')
drop procedure Proc_DropAcount
go
create procedure Proc_DropAcount
--@CardID varchar(19)
@IDCard varchar(18) --w䆾证号
as
declare @TempCustID int
declare @TempLeftMoney money
--select @TempCustID = CustID from CardInfo where CardID = @CardID
--select @TempLeftMoney = LeftMoney from CardInfo where CardID = @CardID
print '该帐户余额:' +convert(varchar(10),@TempLeftMoney)+'正在取出。。?
delete from CardInfo where custid in(select custid from accountinfo where IDCard=@IDCard)
delete from AccountInfo where IDCard=@IDCard
go
declare @CardID varchar(19)
select @CardID = CardID from CardInfo where CustID in(select CustID from AccountInfo where CustName = '唐僧')
exec Proc_DropAcount '422322001902140019'--Ҏ(gu)w䆾证号删除
go
---表的查看
select * from AccountInfo
select * from CardInfo
定义属性:实例变量
格式Q[ 修饰W?] cd 变量?nbsp; [ = ? ]
实例变量定义在类中但在Q何方法之外?br />
实例变量有默认|各种各样??同数l?
实例变量的作用域臛_在本cd部,受访问控制符的限制?br />
在重合作用域Q实例变量和局部变量允许有命名冲突Q?#8220;局部优?#8221;?br />
定义Ҏ(gu)Q?br />
格式Q?[ 修饰W?] q回cd Ҏ(gu)? 参数列表 ) [ throws 异常 ] { ······ }
java中所有参数都是g递?br />
当没有D回时Q返回类型必被定义为void?
q回cd必须与方法名盔RQ其他修饰符可以调换位置?br />
构造器Q?br />
在创建对象的q程中调用的Ҏ(gu)?br />
构造器没有q回cd?br />
构造器的名字与cd相同?br />
格式为:[ 修饰W?] cd( 参数列表 ){ }Q修饰符可以是private?protected?default、private
在一个对象的生成周期中构造器只用一ơ,ql自动调用,不允许手工调用?br />
E序员没有提供一个构造器Q系l会自动提供一个无参的构造器?br />
获得对象的方式:
通过newQ在堆空间中甌分配I间Q,new cd()Q可以通过q种形式或的一个对象,q时的对象是无法使用Q必L他的地址存放q一个对象变量才能够使用?br />
例如 Q?br />
Car c=new Car();
注意Q?br />
最好在写类时提供一个无参的构造器?br />
this关键字:
this是个隐式参数Q代表当前对?
publie class Student{
private String name;
public void setName(String name){
this.name=name; //this.name为当前对象的成员变量
}
}
如果某个构造方法的W一个语句具有Ş式this( ··· )Q那么这个构造方法将调用同一cM的其他构造方法?br />
注意Q?br />
在构造器中this(...)必须攑֜该构造器的第一行?br />
this不能出现在静态方法里?nbsp;
cR对象、实例三者的关系Q?br />
c:是对象的模板Q可以实例化对象
对象Q类的个?br />
实例Q实现的对象
student s;
s=new student();
其中 Student为类Qs为对象,new Student()为实例,s赋值后也是实例了?/p>
Ҏ(gu)重蝲Q?br />
Ҏ(gu)名相同,参数表不同,不考虑q回值类?但最好还是ɘq回cd一??br />
~译器根据参敎ͼ选择一个方法,如果没有完全匚w的,对于参数表采?#8220;向上p匚w原则”Q但不允许模׃可?br />
Ҏ(gu)重蝲屏蔽了一个对象的同一cL法由于参C同所造成的差异?br />
装Q?br />
cȝ属性加private修饰W,来限制只能够在类的内部进行访问,有效的保护数据?br />
对于cM的私有属性,要对其给ZҎ(gu)法getXxx()QsetXxx()讉KU有属性,保证对私有属性的操作的安全性?br />
Ҏ(gu)公开的是Ҏ(gu)的声明,卛_ȝ道参数和q回值就可以调用该方法,隐藏Ҏ(gu)的实现的l节?br />
一个对象和外界的联pd当通过一个统一的接口,应当公开的公开Q应当隐藏的隐藏?br />
l承Q?br />
父类到子cL从一般到Ҏ(gu)的关pR?br />
泛化Q将不同子类中的共性抽象成父类的过E?br />
特化Q在原有父类的基上加入一些个性的q程?br />
原则Q父cL共性,子类放个性?br />
l承的关键字Qextends
Java只支持单l承Q一个类最多只有一个直接的父类?/p>
Ҏ(gu)覆盖Q?br />
Ҏ(gu)名:相同
参数表:相同
讉K限制W:相同或者更?br />
q回值类型:相同或者子c返回的cd是父c返回的cd的子c(在JDK5.0以后Q?br />
抛出的异常:不能比父cL宽?br />
super关键字:
super()表示调用父类的构造器
super()也和this()一样必L在方法的W一?br />
super()和this()不能同时出现
super可以屏蔽子类属性和父类属性重名时带来的属性遮盖,super. 表示调用父类的方法或属?br />
在子cȝ构造器中如果没有指定调用父cȝ哪一个构造器Q那么就会调用父cȝ无参构造器Q即super()
注意Q?br />
父类的构造器不能被子cȝ?br />
Ҏ(gu)和属性可以被l承Q权限不限制能否l承q来Q限制的是能否直接访?br />
先构造父c,后构造子c,先this后super
多态:
多态分ZU:~译时多态和q行时多态?br />
~译时类型:主观概念Q把它看作什么?br />
q行时类型:客观概念Q实际它是什么?br />
例:Animal a=new Dog();
指着狗问Q这个动物是什么?
q行时多态的三原则:
对象cd不变?br />
只能对对象调用编译时cd中定义的Ҏ(gu)?br />
在程序的q行ӞҎ(gu)对象的运行时cdQ找覆盖后的Ҏ(gu)来调用。(q行时动态类型绑定)
强制cd转换Q?一定没有新对象生成?父类的引用赋值给子类的引用需要进行强制类型{?
关键字:instanceof
用法Q引?nbsp; instanceof cd 判断q个引用所指向的对象是否属于这个类?br />
用在强制转换之前Q避免类型{换异常?br />
if(a instanceof Dog){
Dog d=(Dog)a;
}
多态的作用Q把不同的子cd象都当作父类来看Q可以屏蔽不同子cd象之间的差异Q写出通用的代码,做出通用的编E,以适应需求的不断变化?/p>
参数传递时Q简单类型进行D{?nbsp;(参数q行传递时都会先去栈中生成一个副本的Q用结束后释放)
自动cd提升Q?br />
byte a = 1;
byte b = 2;
a = a+b; //~译出错自动cd提升成int
a += b; //自加没有自动cd提升问题
cd自动提升规则Q?br />
a和b作某U运?br />
a和b中有doubleQ结果就是double
a和b中有floatQ结果就是float
a和b中有longQ结果就是long
除此之外Q结果都是int
把高字节转成低字?需要作强制cd转换. byte c=(byte)a+b;
UMq算W:效率最?br />
>> 有符号右U,补符号位
U负CQ则该数值加32后再q行UM
数值的2q制是按照补码保存的
>>> 右移后高位都?
逻辑q算W:
&/|也可以作为逻辑q算W?br />
&& 先判断前面一个条Ӟ如果为假Q则不用计算后一个条?br />
|| 先判断前面一个条Ӟ如果为真Q则不用计算后一个条?br />
" + "q算W:
两个操作的对象是数值时Q是加法
如果有一个是字符串时Q则是字W串的连?br />
程控制语句Q?br />
同Core C++
switch中的变量cd只能是byte?short、int、char四种cd
数组Q?br />
声明数组Q?nbsp;
数组能以下列形式声明Q?br />
cd[] array;
cd array[];
注:
JAVA中推荐用Q类型[] array;
一个数l是一个对?br />
声明一个数l没有创Z个对?br />
声明时不用指定长?br />
创徏数组Q?br />
创徏基本数据cd数组Qint[] i = new int[2];
创徏引用数据cd数组QStudent[] s = new Student[100];
数组创徏后其中的元素有初始?br />
cd 黙认?
byte 0
short 0
int 0
long 0l
float 0.0f
double 0.0d
char \u0000
boolean false
reference types null
注:
创徏时一定要指定长度
int[] i2=new int[]; //error
初始化数l:
声明、创建、初始化分开Q?
int[] i; //定义数组
i = new int[2]; //分配I间
i[0] = 0; //初始?br />
i[1] = 1;
声明、创建、初始化在同一旉 Q?br />
int[] i = {0,1}; //昄初始?nbsp; {}中有几个?则数l长度ؓ?br />
Student[] s = {new Student(),new Student()};
注: int[] i=new int[]{1,2,3}; //后面[]中不可以写数?br />
int[] i1=new int[3]{1,2,3}; //error
二维数组Q?其实是一个一l数l,它的每一个元素又是一个一l数l?
int[][] i1 = new int[2][3];
int[][] i4 = {{1,1,1},{2,2,2},{3,3,3}};
int[][] i3 = new int[][3]; //不允讔Rl没分配I间而先l低l分配空?br />
int[][] i2 = new int[2][];
i2[0] = new int[2];
i2[1] = new int[3];
数组长度Q?br />
数组的属性length
数组长度一旦确?不可改变
int[] i = new int[5]; 则i.length= 5
数组拯Q?br />
pȝcSystem提供?br />
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
srcQ?源数l?nbsp;
srcPosQ?从源数组哪个位置开始拷?位置指的是元素的下标)
destQ?目标数组
destPosQ?拯的元素放到目标数l的起始位置
lengthQ?拯多少?br />
数组排序Q?br />
自己实现一个排序方法来q行排序
或者调用java.util.Arrays.sort(Object o)
Java的垃圑֛Ӟ
׃个后台线Egcq行垃圾回收
虚拟机判定内存不够的时候会中断代码的运行,q时候gc才进行垃圑֛?br />
~点Q不能够_的去回收内存
java.lang.System.gc(); 回收内存Q但pȝ不一定回应,他会先去看内存是否够用,够用则不予理睬,不够用才会去q行垃圾回收
内存中什么算是垃圾:
不在被引用的对象(局部变量,没有指针指向?
java的安全性:
沙箱机制Q只能做沙箱允许的操?br />
通过下面环节Q实现安?br />
加蝲有用的类文gQ不需要的不加?br />
校验字节码,查看允许的操?br />
查看代码和虚拟机的特性是否相W?br />
查看代码是否有破坏?br />
查看是否有违规操作,如越?br />
查看cd是否匚wQ类型{换是否能正确执行
源程序:
package mypack; //相当于一个目?br />
public class HelloWorld{
public static void main(String[] args){
System.out.println(“Hello World”);
}
}
注:
1、文件名必须和public修饰的类名一_?java作ؓ文g后缀Q如果定义的cM是public的,则文件名与类名可以不同?br />
2、一?java文g中可以有多个classQ但是只有一个public修饰的类?br />
3、java源代码文件编译后Q一个类对应生成一?class文g
4、一个java应用E序应该包含一个main()Ҏ(gu)Q而且其签名是固定的,它是应用E序的入口方法,可以定义在Q意一个类中,不一定是public修饰的类
~译Qjavac -d . HelloWorld.java
含有包的c,在编译的时候最好用上面的格式,-d指的是让该类生成的时候按照包l构ȝ成," . "指的是在当前路径下生?br />
如果不用上面的格式,也可以用javac HelloWorld.javaQ但是需要注意的是包l构pp己去建立Q然后将生成?class文g攑ֈ该目录下
执行Qjava mypack.HelloWorld
字节码文g交给Java虚拟机去解释执行
需要注意的事,必须使用包名.cd去解释执?br />
?package)Q把源文件放在目录下
׃工程的需要,不同的源文件放在不同的目录下,从而引入了包?br />
包可以看作就是一个存放java源文件的目录?br />
在源码中声明一个包名:package p;(只能攑֜W一行,且最多只能是一?
如果指定多层包,那么在包名之间我们可以用.作ؓ分隔W:package p1.p2.p3.p4;
?#8220;javac HelloWorld.java –d l对路径”Q编译后生成的字节码文g׃攑֜指定的包l构?br />
执行该程序需要用" java 包名.cd "
引进包中的某个类Qimport 包名.cd;
引进包中的所有类Qimport 包名.*;
注释Q?br />
// 单行注释Q?到本行结束的所有字W会被编译器忽略
/* */ 多行注释Q?nbsp; ?* */之间的所有字W会被编译器忽略
/** */ 文档注释Q?javaҎ(gu)的,?** */之间的所有字W会被编译器忽略
可以用javadoc把java源程序中q种注释抽取出来形成html面(只有写在包,c,属性,Ҏ(gu)Q构造器Q引入之前的注释才可以进行抽?
标识W:
命名规则Q?br />
(1) 由字母、数字、下划线?l成Q不能以数字开?br />
(2) 大小写敏?br />
(3) 不得使用java中的关键字和保留?br />
关键字:都是写的,jdk1.2多了strictfp(l准点?Q关键字 jdk1.4多了assert(断言)关键字, jdk1.5多了enum(枚D) 关键?br />
随着学习q度Q会慢慢接触到的
true、false、null严格说不应该关键字Q应U其Z留字更合?br />
习惯Q?br />
(1) 标识W要W合语义信息
(2) 包名所有字母小?br />
(3) cd每个单词首字母大写,其它?yu)?//TarenaStudent
(4) 变量和方法:W一个单词小写,从第二个单词开始首字母大写 //tarenaStudent
(5) 帔RQ所有字母大写,每个单词之间? _ "q接
基本数据cdQ?U?br />
1) 整型
byte 1B 8?nbsp; -128?27
short 2B 16?nbsp; -2^15?2^15)-1
int 4B 32?nbsp; -2^31?2^31)-1
long 8B 64?nbsp; -2^63?2^63)-1
2) 点cd
float 4B 32?nbsp;
double 8B 64?
3) 字符cd
char 2B 16?
4) 布尔? 1B
boolean false/true
注:
1、Java中的自动cd提升问题?br />
1)、正向过E:从低字节到高字节可以自动转换?br />
byte->short->int->long->float->double
2)、逆向q程Q从高字节到低字节用强制cd转换?br />
例:int a = (int)4.562Q?br />
注:逆向转换丢q度?br />
2、booleanQ只有true和false?br />
3、charQJava中用" \u四位十六q制的数?(即在注释中出现\uQ后面如果跟的不?个数字,也会报错)"表示字W{换成对应的unicode~码Q字W类型要用单引号括v来?br />
4、黙认Q点类型ؓdoubleQfloat数据cd有一个后~? f "? F "?br />
5、longcd有一个后~Qؓ" l " 或? L "
引用数据cdQ?br />
cR接口、数l?br />
引用cd 变量?= new 引用cd?参数); //new后面一般跟的都是类的构造器
成员Q写在类体括号里面的
内存I间的分配:
内存分ؓQ?br />
栈:存放单数据类型变?值和变量名都存在栈中)Q存攑ּ用数据类型的变量名以及它所指向的实例的首地址
堆:存放引用数据cd的实?/p>