2009年10月4日 #
1、SQL Server名稱或IP地址拼寫有誤;
2、服務(wù)器端網(wǎng)絡(luò)配置有誤;
3、客戶端網(wǎng)絡(luò)配置有誤。
要解決這個問題,我們一般要遵循以下的步驟來一步步找出導(dǎo)致錯誤的原因。
首先,檢查網(wǎng)絡(luò)物理連接:
ping <服務(wù)器IP地址>
或者
ping <服務(wù)器名稱>
如果 ping <服務(wù)器IP地址> 失敗,說明物理連接有問題,這時候要檢查硬件設(shè)備,如網(wǎng)卡、HUB、路由器等。還有一種可能是由于客戶端和服務(wù)器之間安裝有防火墻軟件造成的,比如 ISA Server。防火墻軟件可能會屏蔽對 ping、telnet 等的響應(yīng),因此在檢查連接問題的時候,我們要先把防火墻軟件暫時關(guān)閉,或者打開所有被封閉的端口。
如果ping <服務(wù)器IP地址> 成功而 ping <服務(wù)器名稱> 失敗,則說明名字解析有問題,這時候要檢查 DNS 服務(wù)是否正常。有時候客戶端和服務(wù)器不在同一個局域網(wǎng)里面,這時候很可能無法直接使用服務(wù)器名稱來標(biāo)識該服務(wù)器,這時候我們可以使用HOSTS文件來進(jìn)行名字解析,具體的方法是:
1、使用記事本打開HOSTS文件(一般情況下位于C:\WINNT\system32\drivers\etc).
2、添加一條IP地址與服務(wù)器名稱的對應(yīng)記錄,如:
172.168.10.24 myserver
也可以在 SQL Server 的客戶端網(wǎng)絡(luò)實用工具里面進(jìn)行配置,后面會有詳細(xì)說明。
其次,使用 telnet 命令檢查SQL Server服務(wù)器工作狀態(tài):
telnet <服務(wù)器IP地址> 1433
如果命令執(zhí)行成功,可以看到屏幕一閃之后光標(biāo)在左上角不停閃動,這說明 SQL Server 服務(wù)器工作正常,并且正在監(jiān)聽1433端口的 TCP/IP 連接;如果命令返回"無法打開連接"的錯誤信息,則說明服務(wù)器端沒有啟動 SQL Server 服務(wù),也可能服務(wù)器端沒啟用 TCP/IP 協(xié)議,或者服務(wù)器端沒有在 SQL Server 默認(rèn)的端口1433上監(jiān)聽。
接著,我們要到服務(wù)器上檢查服務(wù)器端的網(wǎng)絡(luò)配置,檢查是否啟用了命名管道,是否啟用了 TCP/IP 協(xié)議等等。我們可以利用 SQL Server 自帶的服務(wù)器網(wǎng)絡(luò)使用工具來進(jìn)行檢查。
點擊:程序 -> Microsoft SQL Server -> 服務(wù)器網(wǎng)絡(luò)使用工具,打開該工具后看到的畫面如下圖所示:
從這里我們可以看到服務(wù)器啟用了哪些協(xié)議。一般而言,我們啟用命名管道以及 TCP/IP 協(xié)議。
點中 TCP/IP 協(xié)議,選擇"屬性",我們可以來檢查 SQK Server 服務(wù)默認(rèn)端口的設(shè)置,如下圖所示:
一般而言,我們使用 SQL Server 默認(rèn)的1433端口。如果選中"隱藏服務(wù)器",則意味著客戶端無法通過枚舉服務(wù)器來看到這臺服務(wù)器,起到了保護(hù)的作用,但不影響連接。
檢查完了服務(wù)器端的網(wǎng)絡(luò)配置,接下來我們要到客戶端檢查客戶端的網(wǎng)絡(luò)配置。我們同樣可以利用 SQL Server 自帶的客戶端網(wǎng)絡(luò)使用工具來進(jìn)行檢查,所不同的是這次是在客戶端來運行這個工具。
點擊:程序 -> Microsoft SQL Server -> 客戶端網(wǎng)絡(luò)使用工具, 打開該工具后看到的畫面如下圖所示:
從這里我們可以看到客戶端啟用了哪些協(xié)議。一般而言,我們同樣需要啟用命名管道以及 TCP/IP 協(xié)議。
點擊 TCP/IP 協(xié)議,選擇"屬性",可以檢查客戶端默認(rèn)連接端口的設(shè)置,如下圖所示。
該端口必須與服務(wù)器一致。
單擊"別名"選項卡,還可以為服務(wù)器配置別名。服務(wù)器的別名是用來連接的名稱,連接參數(shù)中的服務(wù)器是真正的服務(wù)器名稱,兩者可以相同或不同。如下圖中,我們可以使用myserver來代替真正的服務(wù)器名稱sql2kcn-02,并且使用網(wǎng)絡(luò)庫 Named Pipes。別名的設(shè)置與使用HOSTS文件有相似之處。
通過以上幾個方面的檢查,錯誤 1 發(fā)生的原因基本上可以被排除。下面我們再詳細(xì)描述如何來解決錯誤 2。
當(dāng)用戶嘗試在查詢分析器里面使用sa來連接SQL Server,或者在企業(yè)管理器里面使用sa來新建一個SQL Server注冊時,經(jīng)常會遇到如圖 2 所示的錯誤信息。該錯誤產(chǎn)生的原因是由于SQL Server使用了"僅 Windows"的身份驗證方式,因此用戶無法使用SQL Server的登錄帳戶(如 sa )進(jìn)行連接。解決方法如下所示:
1、 在服務(wù)器端使用企業(yè)管理器,并且選擇"使用 Windows 身份驗證"連接上 SQL Server;
2、 展開"SQL Server組",鼠標(biāo)右鍵點擊SQL Server服務(wù)器的名稱,選擇"屬性",再選擇"安全性"選項卡;
3、 在"身份驗證"下,選擇"SQL Server和 Windows "。
4、 重新啟動SQL Server服務(wù)。
在以上解決方法中,如果在第 1 步中使用"使用 Windows 身份驗證"連接 SQL Server 失敗,那么我們將遇到一個兩難的境地:首先,服務(wù)器只允許了 Windows 的身份驗證;其次,即使使用了 Windows 身份驗證仍然無法連接上服務(wù)器。這種情形被形象地稱之為"自己把自己鎖在了門外",因為無論用何種方式,用戶均無法使用進(jìn)行連接。實際上,我們可以通過修改一個注冊表鍵值來將身份驗證方式改為 SQL Server 和 Windows 混合驗證,步驟如下所示:
1、點擊"開始"-"運行",輸入regedit,回車進(jìn)入注冊表編輯器;
2、依次展開注冊表項,瀏覽到以下注冊表鍵:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer]
3、在屏幕右方找到名稱"LoginMode",雙擊編輯雙字節(jié)值;
4、將原值從1改為2,點擊"確定";
5、關(guān)閉注冊表編輯器;
6、重新啟動SQL Server服務(wù)。
此時,用戶可以成功地使用sa在企業(yè)管理器中新建SQL Server注冊,但是仍然無法使用Windows身份驗證模式來連接SQL Server。這是因為在 SQL Server 中有兩個缺省的登錄帳戶:BUILTIN\Administrators 以及 <機(jī)器名>\Administrator 被刪除。要恢復(fù)這兩個帳戶,可以使用以下的方法:
1、打開企業(yè)管理器,展開服務(wù)器組,然后展開服務(wù)器;
2、展開"安全性",右擊"登錄",然后單擊"新建登錄";
3、在"名稱"框中,輸入 BUILTIN\Administrators;
4、在"服務(wù)器角色"選項卡中,選擇"System Administrators" ;
5、點擊"確定"退出;
6、使用同樣方法添加 <機(jī)器名>\Administrator 登錄。
以下注冊表鍵
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\LoginMode
的值決定了SQL Server將采取何種身份驗證模式。該值為1,表示使用Windows 身份驗證模式;該值為2,表示使用混合模式(Windows 身份驗證和 SQL Server 身份驗證)。
看完如何解決前兩個錯誤的方法之后,讓我們來看一下如圖 3 所示的第三個錯誤。
如果遇到第三個錯誤,一般而言表示客戶端已經(jīng)找到了這臺服務(wù)器,并且可以進(jìn)行連接,不過是由于連接的時間大于允許的時間而導(dǎo)致出錯。這種情況一般會發(fā)生在當(dāng)用戶在Internet上運行企業(yè)管理器來注冊另外一臺同樣在Internet上的服務(wù)器,并且是慢速連接時,有可能會導(dǎo)致以上的超時錯誤。有些情況下,由于局域網(wǎng)的網(wǎng)絡(luò)問題,也會導(dǎo)致這樣的錯誤。
要解決這樣的錯誤,可以修改客戶端的連接超時設(shè)置。默認(rèn)情況下,通過企業(yè)管理器注冊另外一臺SQL Server的超時設(shè)置是 4 秒,而查詢分析器是 15 秒(這也是為什么在企業(yè)管理器里發(fā)生錯誤的可能性比較大的原因)。具體步驟為:
1、在企業(yè)管理器中,選擇菜單上的"工具",再選擇"選項";
2、在彈出的"SQL Server企業(yè)管理器屬性"窗口中,點擊"高級"選項卡;
3、在"連接設(shè)置"下的"登錄超時(秒)"右邊的框中輸入一個比較大的數(shù)字,如 20。
查詢分析器中也可以在同樣位置進(jìn)行設(shè)置。
在windows控制面版-->管理工具-->服務(wù)-->MSSQLSERVER-->屬性-->改為你的新的操作系統(tǒng)密碼!
或
在windows控制面版-->管理工具-->服務(wù)-->MSSQLSERVER-->屬性-->改為本地登陸!
URL為要開啟的網(wǎng)頁名字。
dialogArgments為設(shè)定好傳遞給新視窗網(wǎng)頁的參數(shù),可以為任意數(shù)據(jù)類型。
feature 與open()的類似,都是格式方面的設(shè)定。調(diào)用格式為featureName1:featureValue1:(分號)featureName2:featureValue2:
關(guān)于feature具體的參數(shù)我就不詳細(xì)寫了,看名字就應(yīng)該知道什么用處了吧。
certer , dialogHeight, dialogLeft,dialogTop,dialogWidth,help(是否顯示help按鈕,下同),status,resizeable
值=1為yes,0為no.
我認(rèn)為最重要的是dialogArgments,可以傳遞值到新的窗口。
第二重要就是 它的返回值 window.returnValue.可以在showModalDialog開啟的窗口關(guān)閉后前,回傳一個任意類型的值。
dialogArgments 可以傳入一個變量,但是 我認(rèn)為最好是傳入一個window 這樣的話,不光你可以調(diào)用你前面定義的變量names 和a 等等,還可以取到前一個頁面上任何元素的值.如下面的代碼所示:








在WebFromB.aspx頁面 我們可以取到 names 和a 的值還可以取到WebFromA的值.,還可以給它賦值.
整體的代碼如下:
WebFromA.aspx




































WebFormB.aspx 如下:






























在WebFormB.aspx中 window.returnValue是用于 返回給WebFromA.aspx的值.
在WebFromA.aspx中,可以用一個變量來接收這個值 temp= window.showModalDialog("WebFormB.aspx",window);
create sequence seq_a minvalue 1000 maxvalue 99999999 start with 1000 increment by 1 nocache;
查詢序列
select seq_a.nextval from dual;
為每張表生成對應(yīng)的序列
--創(chuàng)建存儲過程
create or replace procedure p_createseq(tablename in varchar2)
is
strsql varchar2(500);
begin
strsql:='create sequence seq_'||tablename||' minvalue 1000 maxvalue 99999999 start with 1000 increment by 1 nocache';
execute immediate strsql;
end p_createseq;
/
--創(chuàng)建序列
exec p_createseq('t_power');
exec p_createseq('t_roler');
exec p_createseq('t_roler_power');
exec p_createseq('t_department');
exec p_createseq('t_quarters');
exec p_createseq('t_quarters_roler');
exec p_createseq('t_emp');
exec p_createseq('t_require_plan');
exec p_createseq('t_require_minutia');
exec p_createseq('t_require_audit');
exec p_createseq('t_engage');
exec p_createseq('t_home');
exec p_createseq('t_education');
exec p_createseq('t_works');
exec p_createseq('t_skill');
exec p_createseq('t_account');
exec p_createseq('t_licence');
exec p_createseq('t_title');
exec p_createseq('t_remove');
exec p_createseq('t_train');
exec p_createseq('t_pact');
exec p_createseq('t_assess');
exec p_createseq('t_attendance');
exec p_createseq('t_reward_punish');
exec p_createseq('t_dimission');
exec p_createseq('t_emp_roler');
exec p_createseq('t_code');
獲取顯示的漢字
document.getElementById("bigclass").options[window.document.getElementById("bigclass").selectedIndex].text
獲取數(shù)據(jù)庫中的id
window.document.getElementById("bigclass").value
獲取select組分配的索引id
window.document.getElementById("bigclass").selectedIndex
例子:
<select name="bigclass" id="bigclass" onChange="javascript:updatePage2();">
<option value="" selected="selected">ajax實驗</option>
<option value="4">我適宜市哈</option>
</select>
使用
document.getElementById("bigclass").options[window.document.getElementById("bigclass").selectedIndex].text
的結(jié)果是:我適宜市哈
使用
window.document.getElementById("bigclass").value
的結(jié)果是:4
使用
window.document.getElementById("bigclass").selectedIndex
的結(jié)果是:1
三元預(yù)算表達(dá)式: Condition ? doSomething : doOtherThing ;
1. 同所有語言的三元運算一樣,Javascript的三元運算同樣支持Condition為Boolean類型的情況。當(dāng)Condition為True的時候,執(zhí)行doSomething,為False的時候執(zhí)行doOtherThing。
2. 支持Condition為字符串。當(dāng)Condition=“”的時候,等同于False,執(zhí)行doOtherThing;當(dāng)Condition!=“”的時候,等同于True,執(zhí)行doSomething。
3. 支持Condition為對象。當(dāng)Condition=undefined或者null的時候,等同于False,執(zhí)行doOtherThing;當(dāng)Condition!=undefined和null的時候,等同于True,執(zhí)行doSomething。
目前我的總結(jié)就是發(fā)現(xiàn)了這3中使用方式,是否還有其他的使用方式還不知道。呵呵,不過就算是這樣也讓我減少了不少看Javascript代碼時的疑惑!
自從用了IE8 整個世界都變了形.
呵呵,問題沒那么嚴(yán)重,如果你的網(wǎng)站還來不及修改以適合IE8訪問的時候,咱們可以通過非常簡單的方法,加幾行代碼就可以讓訪問的IE8自動調(diào)用IE7的渲染模式,這樣可以保證最大的兼容性,方法如下:
只需要在頁面中加入如下HTTP meta-tag:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
只要IE8一讀到這個標(biāo)簽,它就會自動啟動IE7兼容模式,保證頁面完整展示.
還有一種方法是針對整個網(wǎng)站的,在IIS中加入如下描述符就可以有相同的效果,當(dāng)然這么做范圍更廣.
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <httpProtocol> <customHeaders> <add name="X-UA-Compatible" value="IE=EmulateIE7"> </customHeaders> </httpProtocol> </system.webServer> </configuration>
或者你還可以使用IIS admin tool來定義,更為簡單.
var tempArr = tempStr.split(",");
var a = tempArr[0];
var b = tempArr[1];
var c = tempArr[2];
var d = tempArr[3];
var o = tempArr[4];
摘要:
通過下拉框里各個語言(中文,日本語,English)的選擇,切換jsp頁面文字。
tyrone1979 發(fā)表于 2005-08-26 13:27:19
作者:tyrone1979 來源:blog.csdn.net/tyrone1979
1 準(zhǔn)備資源文件。
資源文件命名格式:filename_language_country.properties.
中文文件名為index_zh_CN.properties。
日文文件名為 index_ja_JP.properties。
英文文件名為 index_en.properties。
英文文件內(nèi)容:
index.jsp.welcome=Colimas Library Management System
index.jsp.name=Name
index.jsp.userid=User ID
index.jsp.pass=Password
中文文件內(nèi)容:
index.jsp.welcome=\u4f60\u597d
index.jsp.name=\u59d3\u540d
index.jsp.userid=\u7528\u6237\u540d
index.jsp.pass=\u5bc6\u7801
日文文件內(nèi)容:
index.jsp.welcome=\u3044\u3089\u3063\u3057\u3083\u3044\u307e\u305b
index.jsp.name=\u59d3\u540d
index.jsp.userid=\u30e6\u30fc\u30b6\u30fcID
index.jsp.pass=\u30d1\u30b9\u30ef\u30fc\u30c9
\uxxxx是中文被轉(zhuǎn)換后的ASCII碼。可以使用native2ascii.exe工具轉(zhuǎn)換。
2 struts-config.xml里配置資源文件
<message-resources parameter="resources.config.index" />
resources.config.index是classes目錄下的resources/config子目錄的index__xx_xx.properties文件.
struts根據(jù)你的瀏覽器的語言設(shè)置調(diào)用不同語言的資源文件。
例如:如果你的IE默認(rèn)語言為中文則。Struts將使用index_zh_CN.properties。而在struts-config.xml里只需寫出“index”即可
ActionMapping
<form-beans>
<!--1 Multi-Lanuage support formbean-->
<form-bean
name="SelectLanguageForm"
type="com.nova.colimas.web.form.SelectLanguageForm"/>
</form-beans>
<!-- =========================================== Global Forward Definitions -->
<global-forwards>
<!-- Default forward to "Welcome" action -->
<!-- Demonstrates using index.jsp to forward -->
<forward
name="index"
path="/pages/index.jsp"/>
</global-forwards>
<!-- =========================================== Action Mapping Definitions -->
<action-mappings>
<!-- 1 select language action -->
<action path="/SelectLanguageAction"
type="com.nova.colimas.web.action.SelectLanguageAction"
name="SelectLanguageForm"
scope="request">
</action>
…
</action-mappings>
3 jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="/tags/struts-bean" divfix="bean"%>
<%@ taglib uri="/tags/struts-html" divfix="html"%>
<%@ taglib uri="/tags/struts-logic" divfix="logic"%>
<html:html>
<Title><bean:message key="index.jsp.welcome"/></Title>
<body>
<logic:divsent name="user">
<H3>Welcome <bean:write name="LoginForm" property="userID" />!</H3>
</logic:divsent>
<logic:notPresent scope="session" name="user">
<H3>Welcome Colimas!</H3>
</logic:notPresent>
<html:errors />
<html:form action="/SelectLanguageAction.do">
<html:select property="language">
<html:option value="0">中文</html:option>
<html:option value="1">日本語</html:option>
<html:option value="2">English</html:option>
</html:select>
<html:submit>Select</html:submit>
</html:form>
<html:form action="/LoginAction.do">
<p><bean:message key="index.jsp.userid"/><input type="text" name="userID" value="tyrone1979" /><br>
<bean:message key="index.jsp.pass"/><input type="password" name="password" value="197913"/><br>
<html:submit><bean:message key="index.jsp.login"/></html:submit>
</p>
</html:form>
</body>
</html:html>
<bean:message key="index.jsp.welcome"/>引用資源文件的index.jsp.welcome屬性
SelectLanguageAction.do調(diào)用Action實現(xiàn)語言轉(zhuǎn)換。
4 Action
package com.nova.colimas.web.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessages;
//import org.apache.struts.upload.FormFile;
import com.nova.colimas.web.form.SelectLanguageForm;
import org.apache.struts.Globals;
import java.util.Locale;
public class SelectLanguageAction extends Action {
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception{
SelectLanguageForm myform=(SelectLanguageForm)form;
String lan=myform.getLanguage();
switch((new Integer(lan)).intValue()){
case 0 :
request.getSession().setAttribute(Globals.LOCALE_KEY,Locale.CHINA);
break;
case 1:
request.getSession().setAttribute(Globals.LOCALE_KEY, Locale.JAPAN);
break;
case 2:
request.getSession().setAttribute(Globals.LOCALE_KEY, Locale.ENGLISH);
break;
default:
request.getSession().setAttribute(Globals.LOCALE_KEY, Locale.ENGLISH);
break;
}
return mapping.findForward("index");
}
}
Form
/*
* Created on 2005/06/18
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.nova.colimas.web.form;
import org.apache.struts.action.ActionForm;
/**
* @author tyrone
**/
public class SelectLanguageForm extends ActionForm {
private String language;
public void Reset() {
this.language="";
return;
}
/**
* @return Returns the Language.
*/
public String getLanguage() {
return language;
}
/**
* @param language The Language to set.
*/
public void setLanguage(String property1) {
this.language = property1;
}
}
結(jié)果
1 IE默認(rèn)語言為中文:
1、 下載
到Apache的官方網(wǎng)站,我們可以很容易找到Tomcat的下載地址,如:
http://tomcat.apache.org/download-60.cgi
在這里我們可以下載到Tomcat的6.0.16的zip、tar.gz和Windows Service Installer三種安裝包,
其中:
Zip 是Windows下的免安裝版本,只需要解壓后做一定的手動配置就可以正常的使用;
tar.gz 是Linux下的安裝包;
Windows Service Installer 很明顯就是Windows下的Install程序,雙擊后就可以自動安裝了。
在這里主要講一下如何使用Zip包來進(jìn)行解壓配置,那么我們就需要下載下來這個文件:apache-tomcat-6.0.20.zip
2、解壓與配置
在安裝Tomcat之前,我們首先要安裝的是JDK,Tomcat是在Java運行環(huán)境的支持下運行的,所以必須首先安裝并配置好JDK。JDK的安裝程序可以到sun公司的官方網(wǎng)站,在這里我們就詳細(xì)描述JDK的安裝了。
JDK安裝好后需要配置以下環(huán)境變量:
JAVA_HOME =JDK安裝目錄
Path =%JAVA_HOME%\bin;//原有內(nèi)容,且最好把此路徑放到最前。
ClassPath=.,%JAVA_HOME%\lib\rt.jar //這個可以沒有
將apache-tomcat-6.0.20.zip解壓 到C:\tomcat6文件夾中,這里就是我們的Tomcat了。
解壓后Tomcat以后我們同樣需要設(shè)置幾個環(huán)境變量:
CATALINA_HOME =Tomcat解壓目錄,我們這里就是CATALINA_HOME=C:\tomcat6
ClassPath =%CATALINA_HOME%\lib;原有內(nèi)容
環(huán)境變量配置的時候如果沒有這個關(guān)鍵字,就新加一項,如果已經(jīng)有了,如Path ,就是在原有內(nèi)容值的基礎(chǔ)上添加新的內(nèi)容,新的內(nèi)容與原有的值以分號相隔。
配置好上面的這些內(nèi)容以后就可以重啟系統(tǒng)了。
3、運行
重啟系統(tǒng)以后,我們可以進(jìn)入Tomcat解壓目錄下的bin目錄,找到startup.bat 文件,這個文件就是Tomcat的啟動文件,雙擊這個文件,我們可以看到打開了一個命令行窗口,一些Tomcat啟動的加載信息就顯示出來,最后一行應(yīng)該是:
信息:Server startup in xxx ms
這就是說你的服務(wù)器已經(jīng)啟動成功了,這是你可以打開瀏覽器,在地址欄中輸入:
http://localhost:8080
看看是不是可以看到Tomcat的頁面了。
為了啟動方便,我們可以將這個startup.bat文件創(chuàng)建一個快捷方式到桌面上,以后就可以直接使用這個快捷方式了。
需要特別注意的是,這種方式啟動的Tomcat會有一個命令行窗口停留在你的面前,這就是啟動著的服務(wù)器,千萬不要將它關(guān)閉,如果把這個窗口關(guān)閉了,你的Tomcat服務(wù)器也就關(guān)閉了,切記,切記 。
在這里,我們配置的時候并沒有修改默認(rèn)的Tomcat服務(wù)器端口 ,所以就是8080。如果想修改這個端口,可以到tomcat安裝目錄的conf目錄下,找到server.xml這個配置文件,一定有這么一段:
< protocol="HTTP/1.1" port="8080 "
connectionTimeout="20000"
redirectPort="8443" />
這里面的port=”8080”就是服務(wù)器啟動時的端口,你可以將這里修改成你想設(shè)置的端口,但注意不要與其它的軟件所使用的端口沖突,一旦發(fā)生了端口沖突,Tomcat就無法啟動了。
我們還可以在這個配置文件中配置自己的虛擬目錄 ,找到下面這組代碼:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="/test" docBase="D:\test" reloadable="true" />
</Host>
虛擬目錄的配置信息就是寫在server.xml配置文件的這對標(biāo)簽之間,配置代碼中的path是用來在瀏覽器中訪問時使用的虛擬目錄的路徑名 ,如上面我們配置的信息path值是”/test”,這個值中的反斜杠”/”是必不可少的 ,配置了這個值以后,我們在瀏覽器中訪問這個虛擬目錄的地址路徑如下:
http://localhost:8080/test
另一個參數(shù)docBase是虛擬目錄實際的存放地址 ,上面的配置示例就是把D:\test目錄配置成了名稱為test的虛擬目錄。
4、安裝服務(wù)
如此配置的Tomcat每次都需要手動啟動 ,如果你想讓這個Tomcat服務(wù)器在系統(tǒng)已啟動的時候就自動啟動,我們可以將其注冊成系統(tǒng)的服務(wù),注冊方式如下:
在運行中執(zhí)行cmd 打開命令行窗口 ,轉(zhuǎn)入Tomcat解壓目錄的Bin目錄 下,在這里我們轉(zhuǎn)到的就是c:\tomcat6\bin,然后執(zhí)行以下命令:service.bat install ,這樣就會將tomcat6.exe 文件注冊成系統(tǒng)的服務(wù)。
我們在運行services.msc ,打開系統(tǒng)的服務(wù)查看,是不是多出來了一個”Apache Tomcat ”服務(wù)?
但這個服務(wù)的啟動類型是手動 的,我們可以將其修改為自動 ,那樣Tomcat服務(wù)器就會隨著系統(tǒng)的啟動而自動啟動了。
如果想禁止 這個服務(wù)了,可以在命令行窗口中c:\tomcat6\bin下執(zhí)行:
c:\tomcat6\bin\service.bat remove
就可以移除此服務(wù)。
5、總結(jié)
按照以上步驟我們就可以輕松的實現(xiàn)Tomcat服務(wù)器的手動配置了,相比其自動安裝的安裝包,這種手動方式也沒有顯得有多復(fù)雜,而且通過這種手動方式也能更加了解Tomcat的配置情況,更可以隨自己的需要靈活的配置它,所以在開發(fā)使用中,手動的配置方式還是應(yīng)該掌握的。
· 配置Eclipse
- 下載JDK:
從sun的官網(wǎng)http://java.sun.com/javase/downloads/?intcmp=1281下載JDK,當(dāng)前最新版本是jdk-6u10-windows-i586-p.exe,這個是正式版的。
- 下載WTK:
同時在sun的網(wǎng)站http://java.sun.com/products/sjwtoolkit/zh_download-2_5_2.html下載WTK,當(dāng)前最新版本是sun_java_wireless_toolkit-2_5_2-ml-windows.exe。
- 安裝JDK和WTK:
先安裝JDK再安裝WTK,我的安裝路徑是:D:"Java"jdk1.6.0_10和D:"Java"WTK2.5.2
- 下載eclipse:
從eclipse的官網(wǎng) http://www.eclipse.org/downloads/下載eclipse,我用的是:eclipse-java-ganymede-SR1-win32.zip,解壓到:XX:"eclipse
- 下載eclipseme:
從eclipseme的官網(wǎng) http://sourceforge.net/project/showfiles.php?group_id=86829下載eclipseme.當(dāng)前最新版本是eclipseeclipseme.feature_1.7.9_site.zip
- 配置eclipse:
到 “首選項”找到,Java—>調(diào)試,將“發(fā)生未不捕獲到的異常時暫掛執(zhí)行”與“在發(fā)生編譯錯誤時暫掛執(zhí)行”這兩個選項調(diào)為“未選中”狀態(tài),再把下面的調(diào)試器超時(毫秒)的右側(cè)數(shù)值設(shè)置為15000
- 配置eclipseME:
運行eclipse,配置自己學(xué)習(xí)的工作路徑,選擇 幫助—>軟件更新—>查找并安裝—>搜索要安裝的新功能部件,選擇 新建已歸檔的站點,選擇eclipseme.feature_1.7.9_site.zip文件,安裝,重啟eclipse
- 配置WTK:
選擇 首選項—>J2ME—>Device Management—>Import 在Specify search directory下,選擇你所裝的WTK模擬器的目錄;選擇 Refresh ,后按完成,使用DefaultColorPhone為默認(rèn)模式,這時已為eclipse配置上了模擬器
- 下載ProGuard:
需要使用插件ProGuard,從ProGuard的官網(wǎng)下載ProGuard,當(dāng)前的最新版本是:proguard4.3beta2.tar.gz,解壓到:XX:"proguard4.3
- 配置ProGuard:
到 Eclipse的“首選項”找到,J2ME—>Packaging—>obfuscation,在Proguard Root Directory右邊的框中,選擇剛才解壓的proguard4.3的文件夾(XX:"proguard4.3),點擊應(yīng)用,這時為eclipse配置上了混淆器
- 配置完畢
· 使用eclipse進(jìn)行J2ME開發(fā)
- 新建 J2ME下的J2ME Midlet Suite,填寫項目名,下一步,完成
- 新建 J2ME下的J2ME Midlet,填寫名稱,完成
- 點擊運行,新建一個Wireless Toolkit Emulator的運行配置,運行,出現(xiàn)手機(jī)樣式,運行成功
import java.net.URL;
import java.util.Vector;
import org.apache.soap.Constants;
import org.apache.soap.Fault;
import org.apache.soap.SOAPException;
import org.apache.soap.encoding.SOAPMappingRegistry;
import org.apache.soap.encoding.soapenc.BeanSerializer;
import org.apache.soap.rpc.Call;
import org.apache.soap.rpc.Parameter;
import org.apache.soap.rpc.Response;
import org.apache.soap.transport.http.SOAPHTTPConnection;
import org.apache.soap.util.xml.QName;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import oss.util.debug.LogHome;
public class GisWebService{
public static String getStringGisWebService(String ajfBm, String zjfBm, String aodfBm,String zodfBm) throws Exception {
String strUrl = "
String strTargetURL = "http://java.sun.com/xml/ns/jax-rpc/ri/config";//
String soapAction = "
URL url = new URL(strUrl);
SOAPMappingRegistry smr = new SOAPMappingRegistry();
BeanSerializer beanSer = new BeanSerializer();
smr.mapTypes(Constants.NS_URI_SOAP_ENC,new QName("","Result"),null,null,beanSer);
Call call = new Call();
SOAPHTTPConnection st = new SOAPHTTPConnection();
call.setSOAPTransport(st);
call.setSOAPMappingRegistry(smr);
call.setTargetObjectURI(strTargetURL);
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
call.setParams(createCondition(ajfBm,zjfBm,aodfBm,zodfBm));
call.setMethodName("WSEncrypt"); //調(diào)用WEBSERVICE方法名
Response resp;
try
{
call.setTimeout(3000);
resp = call.invoke(url,soapAction);
}
catch(SOAPException e)
{
throw new Exception("調(diào)用接口出錯!URL="+strUrl+"\n"+e.getMessage());
}
LogHome.getLog().info("調(diào)用成功,開始接收返回信息!");
return returnValue(resp);
}
public static String returnValue(Response resp) throws Exception {
if(resp.generatedFault()) {
Fault fault = resp.getFault();
String code = fault.getFaultCode();
String desc = fault.getFaultString();
LogHome.getLog().info("Fault code:"+code+":"+desc);
Vector v = fault.getDetailEntries();
int cnt = v.size();
for(int i = 0;i<cnt;i++)
{
Element n = (Element)v.elementAt(i);
Node nd = n.getFirstChild();
LogHome.getLog().info("Each element:"+n.getNodeName()+":"+nd.getNodeValue());
}
throw new Exception("調(diào)用接口時出錯,F(xiàn)ault code:"+code+":"+desc);
}
else
{
Parameter ret = resp.getReturnValue();
String returnXML = (String)ret.getValue();
LogHome.getLog().info(returnXML);
return returnXML;
}
}
public static Vector<Parameter> createCondition(String ajfBm,String zjfBm,String aodfBm,String zodfBm) {
Vector<Parameter> params = new Vector<Parameter>();
params.addElement(new Parameter("AjfBm",String.class,ajfBm,null));
params.addElement(new Parameter("ZjfBm",String.class,zjfBm,null));
params.addElement(new Parameter("AodfBm",String.class,aodfBm,null));
params.addElement(new Parameter("ZodfBm",String.class,zodfBm,null));
return params;
}
}
public static Date getNowDate() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
ParsePosition pos = new ParsePosition(8);
Date currentTime_2 = formatter.parse(dateString, pos);
return currentTime_2;
}
/**
* 獲取現(xiàn)在時間
*
* @return返回短時間格式 yyyy-MM-dd
*/
public static Date getNowDateShort() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(currentTime);
ParsePosition pos = new ParsePosition(8);
Date currentTime_2 = formatter.parse(dateString, pos);
return currentTime_2;
}
/**
* 獲取現(xiàn)在時間
*
* @return返回字符串格式 yyyy-MM-dd HH:mm:ss
*/
public static String getStringDate() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
return dateString;
}
/**
* 獲取現(xiàn)在時間
*
* @return 返回短時間字符串格式y(tǒng)yyy-MM-dd
*/
public static String getStringDateShort() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(currentTime);
return dateString;
}
/**
* 獲取時間 小時:分;秒 HH:mm:ss
*
* @return
*/
public static String getTimeShort() {
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
Date currentTime = new Date();
String dateString = formatter.format(currentTime);
return dateString;
}
/**
* 將長時間格式字符串轉(zhuǎn)換為時間 yyyy-MM-dd HH:mm:ss
*
* @param strDate
* @return
*/
public static Date strToDateLong(String strDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(strDate, pos);
return strtodate;
}
/**
* 將長時間格式時間轉(zhuǎn)換為字符串 yyyy-MM-dd HH:mm:ss
*
* @param dateDate
* @return
*/
public static String dateToStrLong(java.util.Date dateDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(dateDate);
return dateString;
}
/**
* 將短時間格式時間轉(zhuǎn)換為字符串 yyyy-MM-dd
*
* @param dateDate
* @param k
* @return
*/
public static String dateToStr(java.util.Date dateDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(dateDate);
return dateString;
}
/**
* 將短時間格式字符串轉(zhuǎn)換為時間 yyyy-MM-dd
*
* @param strDate
* @return
*/
public static Date strToDate(String strDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(strDate, pos);
return strtodate;
}
/**
* 得到現(xiàn)在時間
*
* @return
*/
public static Date getNow() {
Date currentTime = new Date();
return currentTime;
}
/**
* 提取一個月中的最后一天
*
* @param day
* @return
*/
public static Date getLastDate(long day) {
Date date = new Date();
long date_3_hm = date.getTime() - 3600000 * 34 * day;
Date date_3_hm_date = new Date(date_3_hm);
return date_3_hm_date;
}
/**
* 得到現(xiàn)在時間
*
* @return 字符串 yyyyMMdd HHmmss
*/
public static String getStringToday() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd HHmmss");
String dateString = formatter.format(currentTime);
return dateString;
}
/**
* 得到現(xiàn)在小時
*/
public static String getHour() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
String hour;
hour = dateString.substring(11, 13);
return hour;
}
/**
* 得到現(xiàn)在分鐘
*
* @return
*/
public static String getTime() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
String min;
min = dateString.substring(14, 16);
return min;
}
/**
* 根據(jù)用戶傳入的時間表示格式,返回當(dāng)前時間的格式 如果是yyyyMMdd,注意字母y不能大寫。
*
* @param sformat
* yyyyMMddhhmmss
* @return
*/
public static String getUserDate(String sformat) {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat(sformat);
String dateString = formatter.format(currentTime);
return dateString;
}
/**
* 二個小時時間間的差值,必須保證二個時間都是"HH:MM"的格式,返回字符型的分鐘
*/
public static String getTwoHour(String st1, String st2) {
String[] kk = null;
String[] jj = null;
kk = st1.split(":");
jj = st2.split(":");
if (Integer.parseInt(kk[0]) < Integer.parseInt(jj[0]))
return "0";
else {
double y = Double.parseDouble(kk[0]) + Double.parseDouble(kk[1]) / 60;
double u = Double.parseDouble(jj[0]) + Double.parseDouble(jj[1]) / 60;
if ((y - u) > 0)
return y - u + "";
else
return "0";
}
}
/**
* 得到二個日期間的間隔天數(shù)
*/
public static String getTwoDay(String sj1, String sj2) {
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
long day = 0;
try {
java.util.Date date = myFormatter.parse(sj1);
java.util.Date mydate = myFormatter.parse(sj2);
day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
} catch (Exception e) {
return "";
}
return day + "";
}
/**
* 時間前推或后推分鐘,其中JJ表示分鐘.
*/
public static String getPreTime(String sj1, String jj) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String mydate1 = "";
try {
Date date1 = format.parse(sj1);
long Time = (date1.getTime() / 1000) + Integer.parseInt(jj) * 60;
date1.setTime(Time * 1000);
mydate1 = format.format(date1);
} catch (Exception e) {
}
return mydate1;
}
/**
* 得到一個時間延后或前移幾天的時間,nowdate為時間,delay為前移或后延的天數(shù)
*/
public static String getNextDay(String nowdate, String delay) {
try{
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String mdate = "";
Date d = strToDate(nowdate);
long myTime = (d.getTime() / 1000) + Integer.parseInt(delay) * 24 * 60 * 60;
d.setTime(myTime * 1000);
mdate = format.format(d);
return mdate;
}catch(Exception e){
return "";
}
}
/**
* 判斷是否潤年
*
* @param ddate
* @return
*/
public static boolean isLeapYear(String ddate) {
/**
* 詳細(xì)設(shè)計: 1.被400整除是閏年,否則: 2.不能被4整除則不是閏年 3.能被4整除同時不能被100整除則是閏年
* 3.能被4整除同時能被100整除則不是閏年
*/
Date d = strToDate(ddate);
GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
gc.setTime(d);
int year = gc.get(Calendar.YEAR);
if ((year % 400) == 0)
return true;
else if ((year % 4) == 0) {
if ((year % 100) == 0)
return false;
else
return true;
} else
return false;
}
/**
* 返回美國時間格式 26 Apr 2006
*
* @param str
* @return
*/
public static String getEDate(String str) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(str, pos);
String j = strtodate.toString();
String[] k = j.split(" ");
return k[2] + k[1].toUpperCase() + k[5].substring(2, 4);
}
/**
* 獲取一個月的最后一天
*
* @param dat
* @return
*/
public static String getEndDateOfMonth(String dat) {// yyyy-MM-dd
String str = dat.substring(0, 8);
String month = dat.substring(5, 7);
int mon = Integer.parseInt(month);
if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12) {
str += "31";
} else if (mon == 4 || mon == 6 || mon == 9 || mon == 11) {
str += "30";
} else {
if (isLeapYear(dat)) {
str += "29";
} else {
str += "28";
}
}
return str;
}
/**
* 判斷二個時間是否在同一個周
*
* @param date1
* @param date2
* @return
*/
public static boolean isSameWeekDates(Date date1, Date date2) {
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(date1);
cal2.setTime(date2);
int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
if (0 == subYear) {
if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
return true;
} else if (1 == subYear && 11 == cal2.get(Calendar.MONTH)) {
// 如果12月的最后一周橫跨來年第一周的話則最后一周即算做來年的第一周
if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
return true;
} else if (-1 == subYear && 11 == cal1.get(Calendar.MONTH)) {
if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
return true;
}
return false;
}
/**
* 產(chǎn)生周序列,即得到當(dāng)前時間所在的年度是第幾周
*
* @return
*/
public static String getSeqWeek() {
Calendar c = Calendar.getInstance(Locale.CHINA);
String week = Integer.toString(c.get(Calendar.WEEK_OF_YEAR));
if (week.length() == 1)
week = "0" + week;
String year = Integer.toString(c.get(Calendar.YEAR));
return year + week;
}
/**
* 獲得一個日期所在的周的星期幾的日期,如要找出2002年2月3日所在周的星期一是幾號
*
* @param sdate
* @param num
* @return
*/
public static String getWeek(String sdate, String num) {
// 再轉(zhuǎn)換為時間
Date dd = VeDate.strToDate(sdate);
Calendar c = Calendar.getInstance();
c.setTime(dd);
if (num.equals("1")) // 返回星期一所在的日期
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
else if (num.equals("2")) // 返回星期二所在的日期
c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
else if (num.equals("3")) // 返回星期三所在的日期
c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
else if (num.equals("4")) // 返回星期四所在的日期
c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
else if (num.equals("5")) // 返回星期五所在的日期
c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
else if (num.equals("6")) // 返回星期六所在的日期
c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
else if (num.equals("0")) // 返回星期日所在的日期
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
}
/**
* 根據(jù)一個日期,返回是星期幾的字符串
*
* @param sdate
* @return
*/
public static String getWeek(String sdate) {
// 再轉(zhuǎn)換為時間
Date date = VeDate.strToDate(sdate);
Calendar c = Calendar.getInstance();
c.setTime(date);
// int hour=c.get(Calendar.DAY_OF_WEEK);
// hour中存的就是星期幾了,其范圍 1~7
// 1=星期日 7=星期六,其他類推
return new SimpleDateFormat("EEEE").format(c.getTime());
}
public static String getWeekStr(String sdate){
String str = "";
str = VeDate.getWeek(sdate);
if("1".equals(str)){
str = "星期日";
}else if("2".equals(str)){
str = "星期一";
}else if("3".equals(str)){
str = "星期二";
}else if("4".equals(str)){
str = "星期三";
}else if("5".equals(str)){
str = "星期四";
}else if("6".equals(str)){
str = "星期五";
}else if("7".equals(str)){
str = "星期六";
}
return str;
}
/**
* 兩個時間之間的天數(shù)
*
* @param date1
* @param date2
* @return
*/
public static long getDays(String date1, String date2) {
if (date1 == null || date1.equals(""))
return 0;
if (date2 == null || date2.equals(""))
return 0;
// 轉(zhuǎn)換為標(biāo)準(zhǔn)時間
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date = null;
java.util.Date mydate = null;
try {
date = myFormatter.parse(date1);
mydate = myFormatter.parse(date2);
} catch (Exception e) {
}
long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
return day;
}
/**
* 形成如下的日歷 , 根據(jù)傳入的一個時間返回一個結(jié)構(gòu) 星期日 星期一 星期二 星期三 星期四 星期五 星期六 下面是當(dāng)月的各個時間
* 此函數(shù)返回該日歷第一行星期日所在的日期
*
* @param sdate
* @return
*/
public static String getNowMonth(String sdate) {
// 取該時間所在月的一號
sdate = sdate.substring(0, 8) + "01";
// 得到這個月的1號是星期幾
Date date = VeDate.strToDate(sdate);
Calendar c = Calendar.getInstance();
c.setTime(date);
int u = c.get(Calendar.DAY_OF_WEEK);
String newday = VeDate.getNextDay(sdate, (1 - u) + "");
return newday;
}
/**
* 取得數(shù)據(jù)庫主鍵 生成格式為yyyymmddhhmmss+k位隨機(jī)數(shù)
*
* @param k
* 表示是取幾位隨機(jī)數(shù),可以自己定
*/
public static String getNo(int k) {
return getUserDate("yyyyMMddhhmmss") + getRandom(k);
}
/**
* 返回一個隨機(jī)數(shù)
*
* @param i
* @return
*/
public static String getRandom(int i) {
Random jjj = new Random();
// int suiJiShu = jjj.nextInt(9);
if (i == 0)
return "";
String jj = "";
for (int k = 0; k < i; k++) {
jj = jj + jjj.nextInt(9);
}
return jj;
}
/**
*
* @param args
*/
public static boolean RightDate(String date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
;
if (date == null)
return false;
if (date.length() > 10) {
sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
} else {
sdf = new SimpleDateFormat("yyyy-MM-dd");
}
try {
sdf.parse(date);
} catch (ParseException pe) {
return false;
}
return true;
}
/***************************************************************************
* //nd=1表示返回的值中包含年度 //yf=1表示返回的值中包含月份 //rq=1表示返回的值中包含日期 //format表示返回的格式 1
* 以年月日中文返回 2 以橫線-返回 // 3 以斜線/返回 4 以縮寫不帶其它符號形式返回 // 5 以點號.返回
**************************************************************************/
public static String getStringDateMonth(String sdate, String nd, String yf, String rq, String format) {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(currentTime);
String s_nd = dateString.substring(0, 4); // 年份
String s_yf = dateString.substring(5, 7); // 月份
String s_rq = dateString.substring(8, 10); // 日期
String sreturn = "";
roc.util.MyChar mc = new roc.util.MyChar();
if (sdate == null || sdate.equals("") || !mc.Isdate(sdate)) { // 處理空值情況
if (nd.equals("1")) {
sreturn = s_nd;
// 處理間隔符
if (format.equals("1"))
sreturn = sreturn + "年";
else if (format.equals("2"))
sreturn = sreturn + "-";
else if (format.equals("3"))
sreturn = sreturn + "/";
else if (format.equals("5"))
sreturn = sreturn + ".";
}
// 處理月份
if (yf.equals("1")) {
sreturn = sreturn + s_yf;
if (format.equals("1"))
sreturn = sreturn + "月";
else if (format.equals("2"))
sreturn = sreturn + "-";
else if (format.equals("3"))
sreturn = sreturn + "/";
else if (format.equals("5"))
sreturn = sreturn + ".";
}
// 處理日期
if (rq.equals("1")) {
sreturn = sreturn + s_rq;
if (format.equals("1"))
sreturn = sreturn + "日";
}
} else {
// 不是空值,也是一個合法的日期值,則先將其轉(zhuǎn)換為標(biāo)準(zhǔn)的時間格式
sdate = roc.util.RocDate.getOKDate(sdate);
s_nd = sdate.substring(0, 4); // 年份
s_yf = sdate.substring(5, 7); // 月份
s_rq = sdate.substring(8, 10); // 日期
if (nd.equals("1")) {
sreturn = s_nd;
// 處理間隔符
if (format.equals("1"))
sreturn = sreturn + "年";
else if (format.equals("2"))
sreturn = sreturn + "-";
else if (format.equals("3"))
sreturn = sreturn + "/";
else if (format.equals("5"))
sreturn = sreturn + ".";
}
// 處理月份
if (yf.equals("1")) {
sreturn = sreturn + s_yf;
if (format.equals("1"))
sreturn = sreturn + "月";
else if (format.equals("2"))
sreturn = sreturn + "-";
else if (format.equals("3"))
sreturn = sreturn + "/";
else if (format.equals("5"))
sreturn = sreturn + ".";
}
// 處理日期
if (rq.equals("1")) {
sreturn = sreturn + s_rq;
if (format.equals("1"))
sreturn = sreturn + "日";
}
}
return sreturn;
}
public static String getNextMonthDay(String sdate, int m) {
sdate = getOKDate(sdate);
int year = Integer.parseInt(sdate.substring(0, 4));
int month = Integer.parseInt(sdate.substring(5, 7));
month = month + m;
if (month < 0) {
month = month + 12;
year = year - 1;
} else if (month > 12) {
month = month - 12;
year = year + 1;
}
String smonth = "";
if (month < 10)
smonth = "0" + month;
else
smonth = "" + month;
return year + "-" + smonth + "-10";
}
public static String getOKDate(String sdate) {
if (sdate == null || sdate.equals(""))
return getStringDateShort();
if (!VeStr.Isdate(sdate)) {
sdate = getStringDateShort();
}
// 將“/”轉(zhuǎn)換為“-”
sdate = VeStr.Replace(sdate, "/", "-");
// 如果只有8位長度,則要進(jìn)行轉(zhuǎn)換
if (sdate.length() == 8)
sdate = sdate.substring(0, 4) + "-" + sdate.substring(4, 6) + "-" + sdate.substring(6, 8);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(sdate, pos);
String dateString = formatter.format(strtodate);
return dateString;
}
public static void main(String[] args) throws Exception {
try {
//System.out.print(Integer.valueOf(getTwoDay("2006-11-03 12:22:10", "2006-11-02 11:22:09")));
} catch (Exception e) {
throw new Exception();
}
//System.out.println("sss");
}
}
******************使用到的軟件******************
IIS 6.0
PHP 5.26
MySQL V5.0.15 正式版
phpMyAdmin-2.11.7-all-languages
本機(jī)操作系統(tǒng) Window Server 2003 EnterPrise Edition SP2
******************使用到的軟件******************
一直都是用的APPServ 突然覺得經(jīng)常用也沒有什么意思!于是就想自己配的玩下!這里使用的是IIS下配置。
安裝IIS服務(wù)器
打開控制面板->添加刪除程序->添加刪除組件->應(yīng)用程序服務(wù)器 要使用ASP.NET的就把詳細(xì)信息里面的ASP.NET勾上!然后下一步。
這里如果有光盤的可以直接用光盤安裝,如果沒有就下一個,我用的是IIS6 然后安裝的時候會提示你插入光盤,你瀏覽到下載解壓后的IIS6的文件里,然后會找到所需文件,就這樣一直瀏覽就可以安裝成功!
安裝PHP
安裝好IIS之后就需要打開準(zhǔn)備好的PHP文件,將里面的DLL文件全部復(fù)制到System 32 目錄下, 其實并不需要全部復(fù)制!只需要復(fù)制 php5ts.dll libmysql.dll libmcrypt.dll 這三個就行了!但如果你覺得不好記,全部復(fù)制進(jìn)去不會影響什么!然后將PHP目錄下的php.ini-recommended拷到C:\Windows下 然后把php.ini-recommended文件改名成php.ini
從IIS里面添加對PHP的映射
打開 Internet 信息服務(wù)(IIS)管理器(管理工具里面)
點擊Web 服務(wù)擴(kuò)展 如果你同時要使用ASP ASP.NET(安裝了才有) 的話 就點擊左邊的允許! 同時所有未知的ISAPI也要允許!
接著在默認(rèn)網(wǎng)站上--->右鍵--->屬性--->ISAPI 添加 篩選器,名稱 可以寫PHP 可執(zhí)行文件 找到 你的PHP目錄下的php5isapi.dll
然后在點擊主目錄--->配置--->添加--->可執(zhí)行文件也選擇剛才這個文件 擴(kuò)展名填寫.php 確定
同時在文檔里面可以添加index.php 這個是默認(rèn)打開的頁面!不會影響程序。如果你設(shè)置了它就自動尋找這個文件,如果有就直接打開。不過還是建議添加一下!
接下來 應(yīng)用 確定 重啟IIS服務(wù)
重啟方法:
在運行里面依次輸入
net stop w3svc
net stop iisadmin
net start w3svc
接著在你的目錄下的PHP文件就可以瀏覽了!
比如輸入
echo phpinfo();
?>
短標(biāo)記默認(rèn)是關(guān)閉的,請寫成這種形式的,建議不使用短標(biāo)記。
保存為index.php,然后在Internet 信息服務(wù)(IIS)管理器下的默認(rèn)網(wǎng)站的右邊 點擊你想看的頁面 右鍵 瀏覽!OK 顯示出來了。
配置PHP
上面僅僅完成了PHP的安裝,但是PHP的配置都是默認(rèn)的,這樣子會帶來很多的問題。為了使PHP能更好的運行,需要修改PHP配置!PHP主要與php.ini有關(guān),打開C:\Windows下的php.ini。
找到 extension_dir = "./" 改成extension_dir = "C:\php\ext\" 地址是PHP目錄下的ext文件夾,
from order_main_info a,INT_AD_INFO c
WHERE a.order_type='32' and
a.state='0' and c.order_id=a.order_id and
a.order_id=(select order_id from(select rownum rn,order_id
from ORDER_DEAL_INFO where order_id=(select order_id from order_main_info where order_type='32' and state='0'))
where rn=(select count(*) from ORDER_DEAL_INFO where order_id=(select order_id from order_main_info where order_type='32' and state='0')))
<form name=hrong>
<input type=checkbox name=All onclick="checkAll('mm')">全選<br/>
<input type=checkbox name=mm onclick="checkItem('All')"><br/>
<input type=checkbox name=mm onclick="checkItem('All')"><br/>
<input type=checkbox name=mm onclick="checkItem('All')"><br/>
<input type=checkbox name=mm onclick="checkItem('All')"><br/>
<input type=checkbox name=mm onclick="checkItem('All')"><br/><br/>
<input type=checkbox name=All2 onclick="checkAll('mm2')">全選<br/>
<input type=checkbox name=mm2 onclick="checkItem('All2')"><br/>
<input type=checkbox name=mm2 onclick="checkItem('All2')"><br/>
<input type=checkbox name=mm2 onclick="checkItem('All2')"><br/>
<input type=checkbox name=mm2 onclick="checkItem('All2')"><br/>
<input type=checkbox name=mm2 onclick="checkItem('All2')"><br/>
</form>
<SCRIPT LANGUAGE="JavaScript">
function checkAll(str)
{
var a = document.getElementsByName(str);
var n = a.length;
for (var i=0; i<n; i++)
a[i].checked = window.event.srcElement.checked;
}
function checkItem(str)
{
var e = window.event.srcElement;
var all = eval("document.hrong."+ str);
if (e.checked)
{
var a = document.getElementsByName(e.name);
all.checked = true;
for (var i=0; i<a.length; i++)
{
if (!a[i].checked){ all.checked = false; break;}
}
}
else all.checked = false;
}
</SCRIPT>
3.8 文件上傳過程中判斷文件類型
<input type=file onchange="alert(this.value.match(/^(.*)(\.)(.{1,8})$/)[3])">
畫圖:
<OBJECT
id=S
style="LEFT: 0px; WIDTH: 392px; TOP: 0px; HEIGHT: 240px"
height=240
width=392
classid="clsid:369303C2-D7AC-11D0-89D5-00A0C90833E6">
</OBJECT>
<SCRIPT>
S.DrawingSurface.ArcDegrees(0,0,0,30,50,60);
S.DrawingSurface.ArcRadians(30,0,0,30,50,60);
S.DrawingSurface.Line(10,10,100,100);
</SCRIPT>
寫注冊表:
<SCRIPT>
var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.RegWrite ("HKCU\\Software\\ACME\\FortuneTeller\\", 1, "REG_BINARY");
WshShell.RegWrite ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader", "Goocher!", "REG_SZ");
var bKey = WshShell.RegRead ("HKCU\\Software\\ACME\\FortuneTeller\\");
WScript.Echo (WshShell.RegRead ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader"));
WshShell.RegDelete ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader");
WshShell.RegDelete ("HKCU\\Software\\ACME\\FortuneTeller\\");
WshShell.RegDelete ("HKCU\\Software\\ACME\\");
</SCRIPT>
TABLAE相關(guān)(客戶端動態(tài)增加行列)
<HTML>
<SCRIPT LANGUAGE="JScript">
function numberCells() {
var count=0;
for (i=0; i < document.all.mytable.rows.length; i++) {
for (j=0; j < document.all.mytable.rows(i).cells.length; j++) {
document.all.mytable.rows(i).cells(j).innerText = count;
count++;
}
}
}
</SCRIPT>
<BODY onload="numberCells()">
<TABLE id=mytable border=1>
<TR><TH> </TH><TH> </TH><TH> </TH><TH> </TH></TR>
<TR><TD> </TD><TD> </TD><TD> </TD><TD> </TD></TR>
<TR><TD> </TD><TD> </TD><TD> </TD><TD> </TD></TR>
</TABLE>
</BODY>
</HTML>
1.身份證嚴(yán)格驗證:
<script>
var aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"內(nèi)蒙古",21:"遼寧",22:"吉林",23:"黑龍江",31:"上海",32:"江蘇",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山東",41:"河南",42:"湖北",43:"湖南",44:"廣東",45:"廣西",46:"海南",50:"重慶",51:"四川",52:"貴州",53:"云南",54:"西藏",61:"陜西",62:"甘肅",63:"青海",64:"寧夏",65:"新疆",71:"臺灣",81:"香港",82:"澳門",91:"國外"}
function cidInfo(sId){
var iSum=0
var info=""
if(!/^\d{17}(\d|x)$/i.test(sId))return false;
sId=sId.replace(/x$/i,"a");
if(aCity[parseInt(sId.substr(0,2))]==null)return "Error:非法地區(qū)";
sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2));
var d=new Date(sBirthday.replace(/-/g,"/"))
if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate()))return "Error:非法生日";
for(var i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11)
if(iSum%11!=1)return "Error:非法證號";
return aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?"男":"女")
}
document.write(cidInfo("380524198002300016"),"<br/>");
document.write(cidInfo("340524198002300019"),"<br/>")
document.write(cidInfo("340524197711111111"),"<br/>")
document.write(cidInfo("34052419800101001x"),"<br/>");
</script>
2.驗證IP地址
<SCRIPT LANGUAGE="JavaScript">
function isip(s){
var check=function(v){try{return (v<=255 && v>=0)}catch(x){return false}};
var re=s.split(".")
return (re.length==4)?(check(re[0]) && check(re[1]) && check(re[2]) && check(re[3])):false
}
var s="202.197.78.129";
alert(isip(s))
</SCRIPT>
3.加sp1后還能用的無邊框窗口!!
<HTML XMLNS:IE>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<IE:Download ID="include" STYLE="behavior:url(#default#download)" />
<title>Chromeless Window</title>
<SCRIPT LANGUAGE="JScript">
/*--- Special Thanks For andot ---*/
/*
This following code are designed and writen by Windy_sk <seasonx@163.net>
You can use it freely, but u must held all the copyright items!
*/
/*--- Thanks For andot Again ---*/
var CW_width = 400;
var CW_height = 300;
var CW_top = 100;
var CW_left = 100;
var CW_url = "/";
var New_CW = window.createPopup();
var CW_Body = New_CW.document.body;
var content = "";
var CSStext = "margin:1px;color:black; border:2px outset;border-style:expression(onmouseout=onmouseup=function(){this.style.borderStyle='outset'}, onmousedown=function(){if(event.button!=2)this.style.borderStyle='inset'});background-color:buttonface;width:16px;height:14px;font-size:12px;line-height:11px;cursor:Default;";
//Build Window
include.startDownload(CW_url, function(source){content=source});
function insert_content(){
var temp = "";
CW_Body.style.overflow = "hidden";
CW_Body.style.backgroundColor = "white";
CW_Body.style.border = "solid black 1px";
content = content.replace(/<a ([^>]*)>/g,"<a onclick='parent.open(this.href);return false' $1>");
temp += "<table width=100% height=100% cellpadding=0 cellspacing=0 border=0>";
temp += "<tr style=';font-size:12px;background:#0099CC;height:20;cursor:default' ondblclick=\"Max.innerText=Max.innerText=='1'?'2':'1';parent.if_max=!parent.if_max;parent.show_CW();\" onmouseup='parent.drag_up(event)' onmousemove='parent.drag_move(event)' onmousedown='parent.drag_down(event)' onselectstart='return false' oncontextmenu='return false'>";
temp += "<td style='color:#ffffff;padding-left:5px'>Chromeless Window For IE6 SP1</td>";
temp += "<td style='color:#ffffff;padding-right:5px;' align=right>";
temp += "<span id=Help onclick=\"alert('Chromeless Window For IE6 SP1 - Ver 1.0\\n\\nCode By Windy_sk\\n\\nSpecial Thanks For andot')\" style=\""+CSStext+"font-family:System;padding-right:2px;\">?</span>";
temp += "<span id=Min onclick='parent.New_CW.hide();parent.blur()' style=\""+CSStext+"font-family:Webdings;\" title='Minimum'>0</span>";
temp += "<span id=Max onclick=\"this.innerText=this.innerText=='1'?'2':'1';parent.if_max=!parent.if_max;parent.show_CW();\" style=\""+CSStext+"font-family:Webdings;\" title='Maximum'>1</span>";
temp += "<span id=Close onclick='parent.opener=null;parent.close()' style=\""+CSStext+"font-family:System;padding-right:2px;\" title='Close'>x</span>";
temp += "</td></tr><tr><td colspan=2>";
temp += "<div id=include style='overflow:scroll;overflow-x:hidden;overflow-y:auto; HEIGHT: 100%; width:"+CW_width+"'>";
temp += content;
temp += "</div>";
temp += "</td></tr></table>";
CW_Body.innerHTML = temp;
}
setTimeout("insert_content()",1000);
var if_max = true;
function show_CW(){
window.moveTo(10000, 10000);
if(if_max){
New_CW.show(CW_top, CW_left, CW_width, CW_height);
if(typeof(New_CW.document.all.include)!="undefined"){
New_CW.document.all.include.style.width = CW_width;
New_CW.document.all.Max.innerText = "1";
}
}else{
New_CW.show(0, 0, screen.width, screen.height);
New_CW.document.all.include.style.width = screen.width;
}
}
window.onfocus = show_CW;
window.onresize = show_CW;
// Move Window
var drag_x,drag_y,draging=false
function drag_move(e){
if (draging){
New_CW.show(e.screenX-drag_x, e.screenY-drag_y, CW_width, CW_height);
return false;
}
}
function drag_down(e){
if(e.button==2)return;
if(New_CW.document.body.offsetWidth==screen.width && New_CW.document.body.offsetHeight==screen.height)return;
drag_x=e.clientX;
drag_y=e.clientY;
draging=true;
e.srcElement.setCapture();
}
function drag_up(e){
draging=false;
e.srcElement.releaseCapture();
if(New_CW.document.body.offsetWidth==screen.width && New_CW.document.body.offsetHeight==screen.height) return;
CW_top = e.screenX-drag_x;
CW_left = e.screenY-drag_y;
}
</SCRIPT>
</HTML>
電話號碼的驗證
要求:
(1)電話號碼由數(shù)字、"("、")"和"-"構(gòu)成
(2)電話號碼為3到8位
(3)如果電話號碼中包含有區(qū)號,那么區(qū)號為三位或四位
(4)區(qū)號用"("、")"或"-"和其他部分隔開
(5)移動電話號碼為11或12位,如果為12位,那么第一位為0
(6)11位移動電話號碼的第一位和第二位為"13"
(7)12位移動電話號碼的第二位和第三位為"13"
根據(jù)這幾條規(guī)則,可以與出以下正則表達(dá)式:
(^[0-9]{3,4}\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)
<script language="javascript">
function PhoneCheck(s) {
var str=s;
var reg=/(^[0-9]{3,4}\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)/
alert(reg.test(str));
}
</script>
<input type=text name="iphone">
<input type=button onclick="PhoneCheck(document.all.iphone.value)" value="Check">
具有在輸入非數(shù)字字符不回顯的效果,即對非數(shù)字字符的輸入不作反應(yīng)。
function numbersonly(field,event){
var key,keychar;
if(window.event){
key = window.event.keyCode;
}
else if (event){
key = event.which;
}
else{
return true
}
keychar = String.fromCharCode(key);
if((key == null)||(key == 0)||(key == 8)||(key == 9)||(key == 13)||(key == 27)){
return true;
}
else if(("0123456789.").indexOf(keychar)>-1){
window.status = "";
return true;
}
else {
window.status = "Field excepts numbers only";
return false;
}
}
驗證ip
str=document.RegExpDemo.txtIP.value;
if(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.test(str)==false)
{
window.alert('錯誤的IP地址格式');
document.RegExpDemo.txtIP.select();
document.RegExpDemo.txtIP.focus();
return;
}
if(RegExp.$1<1 || RegExp.$1>254||RegExp.$2<0||RegExp.$2>254||RegExp.$3<0||RegExp.$3>254||RegExp.$4<1||RegExp.$4>254)
{
window.alert('錯誤的IP地址');
document.RegExpDemo.txtIP.select();
document.RegExpDemo.txtIP.focus();
return;
}
//剔除 如 010.020.020.03 前面 的0
var str=str.replace(/0(\d)/g,"$1");
str=str.replace(/0(\d)/g,"$1");
window.alert(str);
//一下是取數(shù)據(jù)的類
//Obj參數(shù)指定數(shù)據(jù)的來源(限定Table),默認(rèn)第一行為字段名稱行
//GetTableData類提供MoveNext方法,參數(shù)是表的行向上或向下移動的位數(shù),正數(shù)向下移動,負(fù)數(shù)向上.
//GetFieldData方法獲得指定的列名的數(shù)據(jù)
//Sort_desc方法對指定的列按降序排列
//Sort_asc方法對指定的列按升序排列
//GetData方法返回字段值為特定值的數(shù)據(jù)數(shù)組,提供數(shù)據(jù),可以在外部進(jìn)行其他處理
//Delete方法刪除當(dāng)前記錄,數(shù)組減少一行
//初始化,Obj:table的名字,Leftlen:左面多余數(shù)據(jù)長度,Rightlen:右面多余數(shù)據(jù)長度,
function GetTableData(Obj,LeftLen,RightLen){
var MyObj=document.all(Obj);
var iRow=MyObj.rows.length;
var iLen=MyObj.rows[0].cells.length;
var i,j;
TableData=new Array();
for (i=0;i< iRow;i++){
TableData[i]=new Array();
for (j=0;j<iLen;j++){
TableStr=MyObj.rows(i).cells(j).innerText;
TableStr=TableStr.substring(LeftLen, TableStr.length-RightLen).Trim();
TableStr=TableStr.replace(/ /gi,"").replace(/\r\n/ig,"");
TableData[i][j]=TableStr;
}
}
this.TableData=TableData;
this.cols=this.TableData[0].length;
this.rows=this.TableData.length;
this.rowindex=0;
}
function movenext(Step){
if (this.rowindex>=this.rows){
return
}
if (Step=="" || typeof(Step)=="undefined") {
if (this.rowindex<this.rows-1)
this.rowindex++;
return;
}
else{
if (this.rowindex + Step<=this.rows-1 && this.rowindex + Step>=0 ){
this.rowindex=this.rowindex + Step;
}
else
{
if (this.rowindex + Step<0){
this.rowindex= 0;
return;
}
if (this.rowindex + Step>this.rows-1){
this.rowindex= this.rows-1;
return;
}
}
}
}
function getfielddata(Field){
var colindex=-1;
var i=0;
if (typeof(Field) == "number"){
colindex=Field;
}
else
{
for (i=0;i<this.cols && this.rowindex<this.rows ;i++){
if (this.TableData[0][i]==Field){
colindex=i;
break;
}
}
}
if (colindex!=-1) {
return this.TableData[this.rowindex][colindex];
}
}
function sort_desc(){//降序
var colindex=-1;
var highindex=-1;
desc_array=new Array();
var i,j;
for (n=0; n<arguments.length; n++){
Field=arguments[arguments.length-1-n];
for (i=0;i<this.cols;i++){
if (this.TableData[0][i]==Field){
colindex=i;
break;
}
}
if ( colindex==-1 )
return;
else
{
desc_array[0]=this.TableData[0];
for(i=1;i<this.rows;i++){
desc_array[i]=this.TableData[1];
highindex=1;
for(j=1;j<this.TableData.length;j++){
if (desc_array[i][colindex]<this.TableData[j][colindex]){
desc_array[i]=this.TableData[j];
highindex=j;
}
}
if (highindex!=-1)
this.TableData=this.TableData.slice(0,highindex).concat(this.TableData.slice(highindex+1,this.TableData.length));
}
}
this.TableData=desc_array;
}
return;
}
function sort_asc(){//升序
var colindex=-1;
var highindex=-1;
var i,j;
for (n=0; n<arguments.length; n++){
asc_array=new Array();
Field=arguments[arguments.length-1-n];
for (i=0;i<this.cols;i++){
if (this.TableData[0][i]==Field){
colindex=i;
break;
}
}
if ( colindex==-1 )
return;
else
{
asc_array[0]=this.TableData[0];
for(i=1;i<this.rows;i++){
asc_array[i]=this.TableData[1];
highindex=1;
for(j=1;j<this.TableData.length;j++){//找出最小的列值
if (asc_array[i][colindex]>this.TableData[j][colindex]){
asc_array[i]=this.TableData[j];
highindex=j;
}
}
if (highindex!=-1)
this.TableData=this.TableData.slice(0,highindex).concat(this.TableData.slice(highindex+1,this.TableData.length));
}
}
this.TableData=asc_array;
}
return;
}
function getData(Field,FieldValue){
var colindex=-1;
var i,j;
GetData=new Array();
if (typeof(Field)=="undefined" || typeof(FieldValue)=="undefined" ){
return this.TableData;
}
for(j=0;j<this.cols;j++){
if (this.TableData[0][j]==Field){
colindex=j;
}
}
if (colindex!=-1){
for(i=1;i<this.rows;i++){
if (this.TableData[i][colindex]==FieldValue){
GetData[i]=new Array();
GetData[i]=this.TableData[i];
}
}
}
return GetData;
}
function Delete(){
this.TableData=this.TableData.slice(0,this.rowindex).concat(this.TableData.slice(this.rowindex+1,this.TableData.length));
this.rows=this.TableData.length;
return;
}
function updateField(Field,FieldValue){
var colindex=-1;
var i=0;
if (typeof(Field) == "number"){
colindex=Field;
}
else
{
for (i=0;i<this.cols && this.rowindex<this.rows ;i++){
if (this.TableData[0][i]==Field){
colindex=i;
break;
}
}
}
if (colindex!=-1) {
this.TableData[this.rowindex][colindex]=FieldValue;
}
}
function movefirst(){
this.rowindex=0;
}
function movelast(){
this.rowindex=this.rows-1;
}
function String.prototype.Trim() {return this.replace(/(^\s*)|(\s*$)/g,"");}
GetTableData.prototype.MoveNext = movenext;
GetTableData.prototype.GetFieldData = getfielddata;
GetTableData.prototype.Sort_asc = sort_asc;
GetTableData.prototype.Sort_desc = sort_desc;
GetTableData.prototype.GetData = getData;
GetTableData.prototype.Delete = Delete;
GetTableData.prototype.UpdateField = updateField;
GetTableData.prototype.MoveFirst = movefirst;
具體的例子:http://202.119.73.208/NetEAn/com/test/jsprint.htm
在每個文本框的onblur事件中調(diào)用校驗代碼,并且每個文本框中onKeyDown事件中寫一個enter轉(zhuǎn)tab函數(shù)
//回車鍵換為tab
function enterToTab()
{
if(event.srcElement.type != 'button' && event.srcElement.type != 'textarea'
&& event.keyCode == 13)
{
event.keyCode = 9;
}
}
有時候還需要自由編輯表格---
給大家一個自由編輯表格的小例子,寫的有點亂,呵呵:)
//===============================start================================
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
<TITLE>測試修改表格</TITLE>
<STYLE>
/*提示層的樣式*/
div
{
BORDER-RIGHT: #80c144 1px solid;
BORDER-TOP: #80c144 1px solid;
VISIBILITY: hidden;
BORDER-LEFT: #80c144 1px solid;
CURSOR: default;
LINE-HEIGHT: 20px;
BORDER-BOTTOM: #80c144 1px solid;
FONT-FAMILY: 宋體;
font-size:12px;
POSITION: absolute;
BACKGROUND-COLOR: #f6f6f6;
TOP:30px;
LEFT:30px;
}
/*tr的樣式*/
tr
{
font-family: "宋體";
color: #000000;
background-color: #C1DBF5;
font-size: 12px
}
/*table腳注樣式*/
.TrFoot
{
FONT-SIZE: 12px;
font-family:"宋體", "Verdana", "Arial";
BACKGROUND-COLOR: #6699CC;
COLOR:#FFFFFF;
height: 25;
}
/*trhead屬性*/
.TrHead
{
FONT-SIZE: 13px;
font-family:"宋體", "Verdana", "Arial";
BACKGROUND-COLOR: #77AADD;
COLOR:#FFFFFF;
height: 25;
}
/*文本框樣式*/
INPUT
{
BORDER-COLOR: #AACEF7 #AACEF7 #AACEF7 #AACEF7;
BORDER-RIGHT: 1px solid;
BORDER-TOP: 1px solid;
BORDER-LEFT: 1px solid;
BORDER-BOTTOM: 1px solid;
FONT-SIZE: 12px;
FONT-FAMILY: "宋體","Verdana";
color: #000000;
BACKGROUND-COLOR: #E9EFF5;
}
/*button樣式*/
button
{
BORDER-COLOR: #AACEF7 #AACEF7 #AACEF7 #AACEF7;
BACKGROUND-COLOR: #D5E4F3;
CURSOR: hand;
FONT-SIZE:12px;
BORDER-RIGHT: 1px solid;
BORDER-TOP: 1px solid;
BORDER-LEFT: 1px solid;
BORDER-BOTTOM: 1px solid;
COLOR: #000000;
}
</STYLE>
</HEAD>
<BODY>
<SCRIPT language = "JavaScript">
<!--全局變量
//標(biāo)志位,值為false代表未打開一個編輯框,值為true為已經(jīng)打開一個編輯框開始編輯
var editer_table_cell_tag = false;
//開啟編輯功能標(biāo)志,值為true時為允許編輯
var run_edit_flag = false;
//-->
</SCRIPT>
<SCRIPT language = "JavaScript">
<!--
/**
* 編輯表格函數(shù)
* 單擊某個單元格可以對里面的內(nèi)容進(jìn)行自由編輯
* @para tableID 為要編輯的table的id
* @para noEdiID 為不要編輯的td的ID,比如說table的標(biāo)題
* 可以寫為<TD id="no_editer">自由編輯表格</TD>
* 此時該td不可編輯
*/
function editerTableCell(tableId,noEdiId)
{
var tdObject = event.srcElement;
var tObject = ((tdObject.parentNode).parentNode).parentNode;
if(tObject.id == tableId &&tdObject.id != noEdiId&&editer_table_cell_tag == false && run_edit_flag == true)
{
tdObject.innerHTML = "<input type=text id=edit_table_txt name=edit_table_txt value="+tdObject.innerText+" size='15' onKeyDown='enterToTab()'> <input type=button value=' 確定 ' onclick='certainEdit()'>";
edit_table_txt.focus();
edit_table_txt.select();
editer_table_cell_tag = true;
//修改按鈕提示信息
editTip.innerText = "請先點確定按鈕確認(rèn)修改!";
}
else
{
return false;
}
}
/**
* 確定修改
*/
function certainEdit()
{
var bObject = event.srcElement;
var tdObject = bObject.parentNode;
var txtObject = tdObject.firstChild;
tdObject.innerHTML = txtObject.value;
//代表編輯框已經(jīng)關(guān)閉
editer_table_cell_tag = false;
//修改按鈕提示信息
editTip.innerText = "請單擊某個單元格進(jìn)行編輯!";
}
function enterToTab()
{
if(event.srcElement.type != 'button' && event.srcElement.type != 'textarea'
&& event.keyCode == 13)
{
event.keyCode = 9;
}
}
/**
* 控制是否編輯
*/
function editStart()
{
if(event.srcElement.value == "開始編輯")
{
event.srcElement.value = "編輯完成";
run_edit_flag = true;
}
else
{
//如果當(dāng)前沒有編輯框,則編輯成功,否則,無法提交
//必須按確定按鈕后才能正常提交
if(editer_table_cell_tag == false)
{
alert("編輯成功結(jié)束!");
event.srcElement.value = "開始編輯";
run_edit_flag = false;
}
}
}
/**
* 根據(jù)不同的按鈕提供不同的提示信息
*/
function showTip()
{
if(event.srcElement.value == "編輯完成")
{
editTip.style.top = event.y + 15;
editTip.style.left = event.x + 12;
editTip.style.visibility = "visible";
}
else
{
editTip.style.visibility = "hidden";
}
}
-->
</SCRIPT>
<TABLE id="editer_table" width="100%" align="center"
onclick="editerTableCell('editer_table','no_editer')">
<TR class="TrHead">
<TD colspan="3" align="center" id="no_editer">自由編輯表格</TD>
</TR>
<TR>
<TD width="33%">單擊開始編輯按鈕,然后點擊各單元格編輯</TD>
<TD width="33%">2</TD>
<TD width="33%">3</TD>
</TR>
<TR>
<TD width="33%">4</TD>
<TD width="33%">5</TD>
<TD width="33%">6</TD>
</TR>
<TR>
<TD width="33%">one</TD>
<TD width="33%">two</TD>
<TD width="33%">three</TD>
</TR>
<TR>
<TD width="33%">four</TD>
<TD width="33%">five</TD>
<TD width="33%">six</TD>
</TR>
<TR class="TrFoot">
<TD colspan="3" align="center" id="no_editer">
<INPUT type="button" class="bt" value="開始編輯" onClick="editStart()" onMouseOver="showTip()" onMouseMove="showTip()" onMouseOut="editTip.style.visibility = 'hidden';">
</TD>
</TR>
</TABLE>
</BODY>
<DIV id="editTip">請單擊某個單元格進(jìn)行編輯!</DIV>
</HTML>
/*
* 功能:表單內(nèi)容格式檢測
* 參數(shù) obj 為表單名稱(ID)
* chktype 為類型,參照函數(shù)內(nèi)釋
*/
function chk(obj, chktype){
switch(chktype){
case 1://判斷是否為空
if(obj.value == ""){
alert("請輸入必要的字符。");
obj.focus();
obj.onselect();
}
break;
case 2://判斷是否為數(shù)字
var reg = /^\d+(\.\d+)?$/;
if(!reg.test(obj.value)){
alert("請輸入數(shù)字。");
obj.focus();
obj.select();
}
break;
case 3://判斷是否為用戶名格式
var reg = /^[^\d\-_][\w\-]*[^\-_]$/;
if(!reg.test(obj.value)){
alert("請輸入正確的格式。");
obj.focus();
obj.select();
}
break;
case 4://判斷是否為漢字
var reg = /^[\u4E00-\u9FA5]*$/;
if(!reg.test(obj.value)){
alert("你輸入的不全是漢字。");
obj.focus();
obj.select();
}
break;
case 5://判斷是否為郵箱格式
var reg = /^[^\d\-_][\w\-]*[^\-_]@[^\-][a-zA-Z\d\-]*[^\-](\.[^\-][a-zA-Z\d\-]*[^\-])*\.[a-zA-Z]{3}(\.[a-zA-Z]{2})?$/;
if(!reg.test(obj.value)){
alert("你輸入正確的郵箱格式。");
obj.focus();
obj.select();
}
break;
case 6://判斷是否為合法日期格式
var reg = /^(19|20)\d\d\-(0|1)\d\-(0|1|2|3)\d$/;
if(!reg.test(obj.value)){
alert("你輸入正確的日期格式。");
obj.focus();
obj.select();
}
break;
}
}
Abs(number)
返回絕對值。
Array(arglist)
創(chuàng)建一個數(shù)組。
Asc(string)
返回字符串第一個字符的ANSI碼。
Atn(number)
返回反正弦值。
CBool (expression)
轉(zhuǎn)換成Boolean數(shù)據(jù)類型變量。
CByte (expression)
轉(zhuǎn)換成Byte數(shù)據(jù)類型變量。
CCur (expression)
轉(zhuǎn)換成Currency數(shù)據(jù)類型變量。
CDate (expression)
轉(zhuǎn)換成Date數(shù)據(jù)類型變量。
CDbl (expression)
轉(zhuǎn)換成Double數(shù)據(jù)類型變量。
Chr(charcode)
把ANSI 碼轉(zhuǎn)換成相應(yīng)的鍵盤字符。
CInt (expression)
轉(zhuǎn)換成Integer數(shù)據(jù)類型變量。
CLng (expression)
轉(zhuǎn)換成Long數(shù)據(jù)類型變量。
CreateObject(servername.typename)
創(chuàng)建一個自動對象。
CSng (expression)
轉(zhuǎn)換成Single數(shù)據(jù)類型變量。
CStr (expression)
轉(zhuǎn)換成String數(shù)據(jù)類型變量。
Date
根據(jù)所用的系統(tǒng)返回時間。
DateAdd(interval,number,date)
向date對象添加指定的時間間隔。其中參數(shù)interval 接受下表所示的值。
1:

2

3

4

2:

2

3


2

3

將編碼格式改為UTF-8就可以了:



to_date("要轉(zhuǎn)換的字符串","轉(zhuǎn)換的格式") 兩個參數(shù)的格式必須匹配,否則會報錯。
即按照第二個參數(shù)的格式解釋第一個參數(shù)。
to_char(日期,"轉(zhuǎn)換格式" ) 即把給定的日期按照“轉(zhuǎn)換格式”轉(zhuǎn)換。
轉(zhuǎn)換的格式:
表示year的:y 表示年的最后一位 yy 表示年的最后2位 yyy 表示年的最后3位 yyyy 用4位數(shù)表示年
表示month的:mm 用2位數(shù)字表示月;mon 用簡寫形式 比如11月或者nov ;month 用全稱 比如11月或者november
表示day的:dd 表示當(dāng)月第幾天;ddd表示當(dāng)年第幾天;dy 當(dāng)周第幾天 簡寫 比如星期五或者fri;day當(dāng)周第幾天 全寫
比如星期五或者friday。
表示hour的:hh 2位數(shù)表示小時 12進(jìn)制; hh24 2位數(shù)表示小時 24小時
表示minute的:mi 2位數(shù)表示分鐘
表示second的:ss 2位數(shù)表示秒 60進(jìn)制
表示季度的:q 一位數(shù) 表示季度 (1-4)
另外還有ww 用來表示當(dāng)年第幾周 w用來表示當(dāng)月第幾周。
24小時制下的時間范圍:00:00:00-23:59:59
12小時制下的時間范圍:1:00:00-12:59:59
比如:
select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual //顯示:08-11-07 13:22:42
select to_date('2005-12-25,13:25:59','yyyy-mm-dd,hh24:mi:ss') from dual //顯示:2005-12-25 13:25:59
而如果把上式寫作:select to_date('2005-12-25,13:25:59','yyyy-mm-dd,hh:mi:ss') from dual,則會報錯,因為小時hh是12進(jìn)制,13為非法輸入,不能匹配。
補(bǔ)充:
當(dāng)前時間減去7分鐘的時間
select sysdate,sysdate - interval '7' MINUTE from dual
當(dāng)前時間減去7小時的時間
select sysdate - interval '7' hour from dual
當(dāng)前時間減去7天的時間
select sysdate - interval ’7’ day from dual
當(dāng)前時間減去7月的時間
select sysdate,sysdate - interval '7' month from dual
當(dāng)前時間減去7年的時間
select sysdate,sysdate - interval '7' year from dual
時間間隔乘以一個數(shù)字
select sysdate,sysdate - 8*interval '7' hour from dual
Dual偽列
含義解釋:
Dual 是 Oracle中的一個實際存在的表,任何用戶均可讀取,常用在沒有目標(biāo)表的select語句塊中。
比如,我要獲得系統(tǒng)時間,則用“select sysdate from dual” 則返回系統(tǒng)當(dāng)前的時間:2008-11-07 9:32:49,不同系統(tǒng)可能返回日期的格式不一樣。"select user from dual"則返回當(dāng)前連接的用戶。如果是"select 1+2 from dual",則返回結(jié)果:3
<%
// 將過期日期設(shè)置為一個過去時間
response.setHeader("Expires", "Sat, 6 May 1995 12:00:00 GMT");
// 設(shè)置 HTTP/1.1 no-cache 頭
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
// 設(shè)置 IE 擴(kuò)展 HTTP/1.1 no-cache headers, 用戶自己添加
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
response.setHeader("Pragma", "no-cache");
%>
在文件所在目錄下,
D:\>jar cvf jspsmart.jar jspsmart
SQL語句大全/ SQL 經(jīng)典語句
--語 句 功 能
--數(shù)據(jù)操作
SELECT --從數(shù)據(jù)庫表中檢索數(shù)據(jù)行和列
INSERT --向數(shù)據(jù)庫表添加新數(shù)據(jù)行
DELETE --從數(shù)據(jù)庫表中刪除數(shù)據(jù)行
UPDATE --更新數(shù)據(jù)庫表中的數(shù)據(jù)
--數(shù)據(jù)定義
CREATE TABLE --創(chuàng)建一個數(shù)據(jù)庫表
DROP TABLE --從數(shù)據(jù)庫中刪除表
ALTER TABLE --修改數(shù)據(jù)庫表結(jié)構(gòu)
CREATE VIEW --創(chuàng)建一個視圖
DROP VIEW --從數(shù)據(jù)庫中刪除視圖
CREATE INDEX --為數(shù)據(jù)庫表創(chuàng)建一個索引
DROP INDEX --從數(shù)據(jù)庫中刪除索引
CREATE PROCEDURE --創(chuàng)建一個存儲過程
DROP PROCEDURE --從數(shù)據(jù)庫中刪除存儲過程
CREATE TRIGGER --創(chuàng)建一個觸發(fā)器
DROP TRIGGER --從數(shù)據(jù)庫中刪除觸發(fā)器
CREATE SCHEMA --向數(shù)據(jù)庫添加一個新模式
DROP SCHEMA --從數(shù)據(jù)庫中刪除一個模式
CREATE DOMAIN --創(chuàng)建一個數(shù)據(jù)值域
ALTER DOMAIN --改變域定義
DROP DOMAIN --從數(shù)據(jù)庫中刪除一個域
--數(shù)據(jù)控制
GRANT --授予用戶訪問權(quán)限
DENY --拒絕用戶訪問
REVOKE --解除用戶訪問權(quán)限
--事務(wù)控制
COMMIT --結(jié)束當(dāng)前事務(wù)
ROLLBACK --中止當(dāng)前事務(wù)
SET TRANSACTION --定義當(dāng)前事務(wù)數(shù)據(jù)訪問特征
--程序化SQL
DECLARE --為查詢設(shè)定游標(biāo)
EXPLAN --為查詢描述數(shù)據(jù)訪問計劃
OPEN --檢索查詢結(jié)果打開一個游標(biāo)
FETCH --檢索一行查詢結(jié)果
CLOSE --關(guān)閉游標(biāo)
PREPARE --為動態(tài)執(zhí)行準(zhǔn)備SQL 語句
EXECUTE --動態(tài)地執(zhí)行SQL 語句
DESCRIBE --描述準(zhǔn)備好的查詢
---局部變量
declare @id char(10)
--set @id = '10010001'
select @id = '10010001'
---全局變量
---必須以@@開頭
--IF ELSE
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --打印字符串'x > y'
else if @y > @z
print 'y > z'
else print 'z > y'
--CASE
use pangu
update employee
set e_wage =
case
when job_level = ’1’ then e_wage*1.08
when job_level = ’2’ then e_wage*1.07
when job_level = ’3’ then e_wage*1.06
else e_wage*1.05
end
--WHILE CONTINUE BREAK
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --打印變量x 的值
while @y < 3
begin
select @c = 100*@x + @y
print @c --打印變量c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
--WAITFOR
--例 等待1 小時2 分零3 秒后才執(zhí)行SELECT 語句
waitfor delay ’01:02:03’
select * from employee
--例 等到晚上11 點零8 分后才執(zhí)行SELECT 語句
waitfor time ’23:08:00’
select * from employee
***SELECT***
select *(列名) from table_name(表名) where column_name operator value
ex:(宿主)
select * from stock_information where stockid = str(nid)
stockname = 'str_name'
stockname like '% find this %'
stockname like '[a-zA-Z]%' --------- ([]指定值的范圍)
stockname like '[^F-M]%' --------- (^排除指定范圍)
--------- 只能在使用like關(guān)鍵字的where子句中使用通配符)
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stock*** = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc) --------- 排序,desc-降序,asc-升序
order by 1,2 --------- by列號
stockname = (select stockname from stock_information where stockid = 4)
--------- 子查詢
--------- 除非能確保內(nèi)層select只返回一個行的值,
--------- 否則應(yīng)在外層where子句中用一個in限定符
select distinct column_name form table_name --------- distinct指定檢索獨有的列值,不重復(fù)
select stocknumber ,stocknumber + 10 = stocknumber + 10 from table_name
select stockname , stocknumber = count(*) from table_name group by stockname
--------- group by 將表按行分組,指定列中有相同的值
having count(*) = 2 --------- having選定指定的組
select *
from table1, table2
where table1.id *= table2.id -------- 左外部連接,table1中有的而table2中沒有得以null表示
table1.id =* table2.id -------- 右外部連接
select stockname from table1
union [all] ----- union合并查詢結(jié)果集,all-保留重復(fù)行
select stockname from table2
***insert***
insert into table_name (Stock_name,Stock_number) value (xxx,xxxx)
value (select Stockname , Stocknumber from Stock_table2)---value為select語句
***update***
update table_name set Stockname = xxx [where Stockid = 3]
Stockname = default
Stockname = null
Stocknumber = Stockname + 4
***delete***
delete from table_name where Stockid = 3
truncate table_name ----------- 刪除表中所有行,仍保持表的完整性
drop table table_name --------------- 完全刪除表
***alter table*** --- 修改數(shù)據(jù)庫表結(jié)構(gòu)
alter table database.owner.table_name add column_name char(2) null .....
sp_help table_name ---- 顯示表已有特征
create table table_name (name char(20), age smallint, lname varchar(30))
insert into table_name select ......... ----- 實現(xiàn)刪除列的方法(創(chuàng)建新表)
alter table table_name drop constraint Stockname_default ---- 刪除Stockname的default約束
***function(/*常用函數(shù)*/)***
----統(tǒng)計函數(shù)----
***G --求平均值
COUNT --統(tǒng)計數(shù)目
MAX --求最大值
MIN --求最小值
SUM --求和
--***G
use pangu
select avg(e_wage) as dept_avgWage
from employee
group by dept_id
--MAX
--求工資最高的員工姓名
use pangu
select e_name
from employee
where e_wage =
(select max(e_wage)
from employee)
--STDEV()
--STDEV()函數(shù)返回表達(dá)式中所有數(shù)據(jù)的標(biāo)準(zhǔn)差
--STDEVP()
--STDEVP()函數(shù)返回總體標(biāo)準(zhǔn)差
--VAR()
--VAR()函數(shù)返回表達(dá)式中所有值的統(tǒng)計變異數(shù)
--VARP()
--VARP()函數(shù)返回總體變異數(shù)
----算術(shù)函數(shù)----
/***三角函數(shù)***/
SIN(float_expression) --返回以弧度表示的角的正弦
COS(float_expression) --返回以弧度表示的角的余弦
TAN(float_expression) --返回以弧度表示的角的正切
COT(float_expression) --返回以弧度表示的角的余切
/***反三角函數(shù)***/
ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角
ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角
ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角
ATAN2(float_expression1,float_expression2)
--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)
--把弧度轉(zhuǎn)換為角度返回與表達(dá)式相同的數(shù)據(jù)類型可為
--INTEGER/MONEY/REAL/FLOAT 類型
RADIANS(numeric_expression) --把角度轉(zhuǎn)換為弧度返回與表達(dá)式相同的數(shù)據(jù)類型可為
--INTEGER/MONEY/REAL/FLOAT 類型
EXP(float_expression) --返回表達(dá)式的指數(shù)值
LOG(float_expression) --返回表達(dá)式的自然對數(shù)值
LOG10(float_expression)--返回表達(dá)式的以10 為底的對數(shù)值
SQRT(float_expression) --返回表達(dá)式的平方根
/***取近似值函數(shù)***/
CEILING(numeric_expression) --返回>=表達(dá)式的最小整數(shù)返回的數(shù)據(jù)類型與表達(dá)式相同可為
--INTEGER/MONEY/REAL/FLOAT 類型
FLOOR(numeric_expression) --返回<=表達(dá)式的最小整數(shù)返回的數(shù)據(jù)類型與表達(dá)式相同可為
--INTEGER/MONEY/REAL/FLOAT 類型
ROUND(numeric_expression) --返回以integer_expression 為精度的四舍五入值返回的數(shù)據(jù)
--類型與表達(dá)式相同可為INTEGER/MONEY/REAL/FLOAT 類型
ABS(numeric_expression) --返回表達(dá)式的絕對值返回的數(shù)據(jù)類型與表達(dá)式相同可為
--INTEGER/MONEY/REAL/FLOAT 類型
SIGN(numeric_expression) --測試參數(shù)的正負(fù)號返回0 零值1 正數(shù)或-1 負(fù)數(shù)返回的數(shù)據(jù)類型
--與表達(dá)式相同可為INTEGER/MONEY/REAL/FLOAT 類型
PI() --返回值為π 即3.1415926535897936
RAND([integer_expression]) --用任選的[integer_expression]做種子值得出0-1 間的隨機(jī)浮點數(shù)
----字符串函數(shù)----
ASCII() --函數(shù)返回字符表達(dá)式最左端字符的ASCII 碼值
CHAR() --函數(shù)用于將ASCII 碼轉(zhuǎn)換為字符
--如果沒有輸入0 ~ 255 之間的ASCII 碼值CHAR 函數(shù)會返回一個NULL 值
LOWER() --函數(shù)把字符串全部轉(zhuǎn)換為小寫
UPPER() --函數(shù)把字符串全部轉(zhuǎn)換為大寫
STR() --函數(shù)把數(shù)值型數(shù)據(jù)轉(zhuǎn)換為字符型數(shù)據(jù)
LTRIM() --函數(shù)把字符串頭部的空格去掉
RTRIM() --函數(shù)把字符串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING() --函數(shù)返回部分字符串
CHARINDEX(),PATINDEX() --函數(shù)返回字符串中某個指定的子串出現(xiàn)的開始位置
SOUNDEX() --函數(shù)返回一個四位字符碼
--SOUNDEX函數(shù)可用來查找聲音相似的字符串但SOUNDEX函數(shù)對數(shù)字和漢字均只返回0 值
DIFFERENCE() --函數(shù)返回由SOUNDEX 函數(shù)返回的兩個字符表達(dá)式的值的差異
--0 兩個SOUNDEX 函數(shù)返回值的第一個字符不同
--1 兩個SOUNDEX 函數(shù)返回值的第一個字符相同
--2 兩個SOUNDEX 函數(shù)返回值的第一二個字符相同
--3 兩個SOUNDEX 函數(shù)返回值的第一二三個字符相同
--4 兩個SOUNDEX 函數(shù)返回值完全相同
QUOTENAME() --函數(shù)返回被特定字符括起來的字符串
/*select quotename('abc', '{') quotename('abc')
運行結(jié)果如下
----------------------------------{
{abc} [abc]*/
REPLICATE() --函數(shù)返回一個重復(fù)character_expression 指定次數(shù)的字符串
/*select replicate('abc', 3) replicate( 'abc', -2)
運行結(jié)果如下
----------- -----------
abcabcabc NULL*/
REVERSE() --函數(shù)將指定的字符串的字符排列順序顛倒
REPLACE() --函數(shù)返回被替換了指定子串的字符串
/*select replace('abc123g', '123', 'def')
運行結(jié)果如下
----------- -----------
abcdefg*/
SPACE() --函數(shù)返回一個有指定長度的空白字符串
STUFF() --函數(shù)用另一子串替換字符串指定位置長度的子串
----數(shù)據(jù)類型轉(zhuǎn)換函數(shù)----
CAST() 函數(shù)語法如下
CAST() (<expression> AS <data_ type>[ length ])
CONVERT() 函數(shù)語法如下
CONVERT() (<data_ type>[ length ], <expression> [, style])
select cast(100+99 as char) convert(varchar(12), getdate())
運行結(jié)果如下
------------------------------ ------------
199 Jan 15 2000
----日期函數(shù)----
DAY() --函數(shù)返回date_expression 中的日期值
MONTH() --函數(shù)返回date_expression 中的月份值
YEAR() --函數(shù)返回date_expression 中的年份值
DATEADD(<datepart> ,<number> ,<date>)
--函數(shù)返回指定日期date 加上指定的額外日期間隔number 產(chǎn)生的新日期
DATEDIFF(<datepart> ,<number> ,<date>)
--函數(shù)返回兩個指定日期在datepart 方面的不同之處
DATENAME(<datepart> , <date>) --函數(shù)以字符串的形式返回日期的指定部分
DATEPART(<datepart> , <date>) --函數(shù)以整數(shù)值的形式返回日期的指定部分
GETDATE() --函數(shù)以DATETIME 的缺省格式返回系統(tǒng)當(dāng)前的日期和時間
----系統(tǒng)函數(shù)----
APP_NAME() --函數(shù)返回當(dāng)前執(zhí)行的應(yīng)用程序的名稱
COALESCE() --函數(shù)返回眾多表達(dá)式中第一個非NULL 表達(dá)式的值
COL_LENGTH(<'table_name'>, <'column_name'>) --函數(shù)返回表中指定字段的長度值
COL_NAME(<table_id>, <column_id>) --函數(shù)返回表中指定字段的名稱即列名
DATALENGTH() --函數(shù)返回數(shù)據(jù)表達(dá)式的數(shù)據(jù)的實際長度
DB_ID(['database_name']) --函數(shù)返回數(shù)據(jù)庫的編號
DB_NAME(database_id) --函數(shù)返回數(shù)據(jù)庫的名稱
HOST_ID() --函數(shù)返回服務(wù)器端計算機(jī)的名稱
HOST_NAME() --函數(shù)返回服務(wù)器端計算機(jī)的名稱
IDENTITY(<data_type>[, seed increment]) [AS column_name])
--IDENTITY() 函數(shù)只在SELECT INTO 語句中使用用于插入一個identity column列到新表中
/*select identity(int, 1, 1) as column_name
into newtable
from oldtable*/
ISDATE() --函數(shù)判斷所給定的表達(dá)式是否為合理日期
ISNULL(<check_expression>, <replacement_value>) --函數(shù)將表達(dá)式中的NULL 值用指定值替換
ISNUMERIC() --函數(shù)判斷所給定的表達(dá)式是否為合理的數(shù)值
NEWID() --函數(shù)返回一個UNIQUEIDENTIFIER 類型的數(shù)值
NULLIF(<expression1>, <expression2>)
--NULLIF 函數(shù)在expression1 與expression2 相等時返回NULL 值若不相等時則返回expression1 的值
----------------------------------------------------------------------------------------------------------
sql 經(jīng)典語句
SQL分類:
DDL—數(shù)據(jù)定義語言(CREATE,ALTER,DROP,DECLARE)
DML—數(shù)據(jù)操縱語言(SELECT,DELETE,UPDATE,INSERT)
DCL—數(shù)據(jù)控制語言(GRANT,REVOKE,COMMIT,ROLLBACK)
首先,簡要介紹基礎(chǔ)語句:
1、說明:創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE database-name
2、說明:刪除數(shù)據(jù)庫
drop database dbname
3、說明:備份sql server
--- 創(chuàng)建 備份數(shù)據(jù)的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 開始 備份
BACKUP DATABASE pubs TO testBack
4、說明:創(chuàng)建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根據(jù)已有的表創(chuàng)建新表:
A:create table tab_new like tab_old (使用舊表創(chuàng)建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5、說明:刪除新表drop table tabname
6、說明:增加一個列
Alter table tabname add column col type
注:列增加后將不能刪除。DB2中列加上后數(shù)據(jù)類型也不能改變,唯一能改變的是增加varchar類型的長度。
7、說明:添加主鍵: Alter table tabname add primary key(col)
說明:刪除主鍵: Alter table tabname drop primary key(col)
8、說明:創(chuàng)建索引:create [unique] index idxname on tabname(col….)
刪除索引:drop index idxname
注:索引是不可更改的,想更改必須刪除重新建。
9、說明:創(chuàng)建視圖:create view viewname as select statement
刪除視圖:drop view viewname
10、說明:幾個簡單的基本的sql語句
選擇:select * from table1 where 范圍
插入:insert into table1(field1,field2) values(value1,value2)
刪除:delete from table1 where 范圍
更新:update table1 set field1=value1 where 范圍
查找:select * from table1 where field1 like ’%value1%’ ---like的語法很精妙,查資料!
排序:select * from table1 order by field1,field2 [desc]
總數(shù):select count * as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、說明:幾個高級查詢運算詞
A: UNION 運算符
UNION 運算符通過組合其他兩個結(jié)果表(例如 TABLE1 和 TABLE2)并消去表中任何重復(fù)行而派生出一個結(jié)果表。當(dāng) ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復(fù)行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。
B: EXCEPT 運算符
EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重復(fù)行而派生出一個結(jié)果表。當(dāng) ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復(fù)行。
C: INTERSECT 運算符
INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行并消除所有重復(fù)行而派生出一個結(jié)果表。當(dāng) ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復(fù)行。
注:使用運算詞的幾個查詢結(jié)果行必須是一致的。
12、說明:使用外連接
A、left outer join:
左外連接(左連接):結(jié)果集幾包括連接表的匹配行,也包括左連接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right outer join:
右外連接(右連接):結(jié)果集既包括連接表的匹配連接行,也包括右連接表的所有行。
C:full outer join:
全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。
其次,大家來看一些不錯的sql語句
1、說明:復(fù)制表(只復(fù)制結(jié)構(gòu),源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1
法二:select top 0 * into b from a
2、說明:拷貝表(拷貝數(shù)據(jù),源表名:a 目標(biāo)表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;
3、說明:跨數(shù)據(jù)庫之間表的拷貝(具體數(shù)據(jù)使用絕對路徑) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具體數(shù)據(jù)庫’ where 條件
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
4、說明:子查詢(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
5、說明:顯示文章、提交人和最后回復(fù)時間
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、說明:外連接查詢(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
7、說明:在線視圖查詢(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、說明:between的用法,between限制查詢數(shù)據(jù)范圍時包括了邊界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 數(shù)值1 and 數(shù)值2
9、說明:in 的使用方法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
10、說明:兩張關(guān)聯(lián)表,刪除主表中已經(jīng)在副表中沒有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、說明:四表聯(lián)查問題:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
12、說明:日程安排提前五分鐘提醒
SQL: select * from 日程安排 where datediff('minute',f開始時間,getdate())>5
13、說明:一條sql 語句搞定數(shù)據(jù)庫分頁
select top 10 b.* from (select top 20 主鍵字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主鍵字段 = a.主鍵字段 order by a.排序字段
14、說明:前10條記錄
select top 10 * form table1 where 范圍
15、說明:選擇在每一組b值相同的數(shù)據(jù)中對應(yīng)的a最大的記錄的所有信息(類似這樣的用法可以用于論壇每月排行榜,每月熱銷產(chǎn)品分析,按科目成績排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
16、說明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重復(fù)行而派生出一個結(jié)果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
17、說明:隨機(jī)取出10條數(shù)據(jù)
select top 10 * from tablename order by newid()
18、說明:隨機(jī)選擇記錄
select newid()
19、說明:刪除重復(fù)記錄
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
20、說明:列出數(shù)據(jù)庫里所有的表名
select name from sysobjects where type='U'
21、說明:列出表里的所有的
select name from syscolumns where id=object_id('TableName')
22、說明:列示type、vender、pcs字段,以type字段排列,case可以方便地實現(xiàn)多重選擇,類似select 中的case。
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
顯示結(jié)果:
type vender pcs
電腦 A 1
電腦 A 1
光盤 B 2
光盤 A 2
手機(jī) B 3
手機(jī) C 3
23、說明:初始化表table1
TRUNCATE TABLE table1
24、說明:選擇從10到15的記錄
select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc
隨機(jī)選擇數(shù)據(jù)庫記錄的方法(使用Randomize函數(shù),通過SQL語句實現(xiàn))
對存儲在數(shù)據(jù)庫中的數(shù)據(jù)來說,隨機(jī)數(shù)特性能給出上面的效果,但它們可能太慢了些。你不能要求ASP“找個隨機(jī)數(shù)”然后打印出來。實際上常見的解決方案是建立如下所示的循環(huán):
Randomize
RNumber = Int(Rnd*499) +1
While Not objRec.EOF
If objRec("ID") = RNumber THEN
... 這里是執(zhí)行腳本 ...
end if
objRec.MoveNext
Wend
這很容易理解。首先,你取出1到500范圍之內(nèi)的一個隨機(jī)數(shù)(假設(shè)500就是數(shù)據(jù)庫內(nèi)記錄的總數(shù))。然后,你遍歷每一記錄來測試ID 的值、檢查其是否匹配RNumber。滿足條件的話就執(zhí)行由THEN 關(guān)鍵字開始的那一塊代碼。假如你的RNumber 等于495,那么要循環(huán)一遍數(shù)據(jù)庫花的時間可就長了。雖然500這個數(shù)字看起來大了些,但相比更為穩(wěn)固的企業(yè)解決方案這還是個小型數(shù)據(jù)庫了,后者通常在一個數(shù)據(jù)庫內(nèi)就包含了成千上萬條記錄。這時候不就死定了?
采用SQL,你就可以很快地找出準(zhǔn)確的記錄并且打開一個只包含該記錄的recordset,如下所示:
Randomize
RNumber = Int(Rnd*499) + 1
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
set objRec = ObjConn.Execute(SQL)
Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")
不必寫出RNumber 和ID,你只需要檢查匹配情況即可。只要你對以上代碼的工作滿意,你自可按需操作“隨機(jī)”記錄。Recordset沒有包含其他內(nèi)容,因此你很快就能找到你需要的記錄這樣就大大降低了處理時間。
再談隨機(jī)數(shù)
現(xiàn)在你下定決心要榨干Random 函數(shù)的最后一滴油,那么你可能會一次取出多條隨機(jī)記錄或者想采用一定隨機(jī)范圍內(nèi)的記錄。把上面的標(biāo)準(zhǔn)Random 示例擴(kuò)展一下就可以用SQL應(yīng)對上面兩種情況了。
為了取出幾條隨機(jī)選擇的記錄并存放在同一recordset內(nèi),你可以存儲三個隨機(jī)數(shù),然后查詢數(shù)據(jù)庫獲得匹配這些數(shù)字的記錄:
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & " OR ID = " & RNumber3
假如你想選出10條記錄(也許是每次頁面裝載時的10條鏈接的列表),你可以用BETWEEN 或者數(shù)學(xué)等式選出第一條記錄和適當(dāng)數(shù)量的遞增記錄。這一操作可以通過好幾種方式來完成,但是 SELECT 語句只顯示一種可能(這里的ID 是自動生成的號碼):
SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"
注意:以上代碼的執(zhí)行目的不是檢查數(shù)據(jù)庫內(nèi)是否有9條并發(fā)記錄。
隨機(jī)讀取若干條記錄,測試過
Access語法:SELECT top 10 * From 表名 ORDER BY Rnd(id)
Sql server:select top n * from 表名 order by newid()
mysqlelect * From 表名 Order By rand() Limit n
Access左連接語法(最近開發(fā)要用左連接,Access幫助什么都沒有,網(wǎng)上沒有Access的SQL說明,只有自己測試, 現(xiàn)在記下以備后查)
語法elect table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...
使用SQL語句 用...代替過長的字符串顯示
語法:
SQL數(shù)據(jù)庫:select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename
Access數(shù)據(jù)庫:SELECT iif(len(field)>2,left(field,2)+'...',field) FROM tablename;
Conn.Execute說明
Execute方法
該方法用于執(zhí)行SQL語句。根據(jù)SQL語句執(zhí)行后是否返回記錄集,該方法的使用格式分為以下兩種:
1.執(zhí)行SQL查詢語句時,將返回查詢得到的記錄集。用法為:
Set 對象變量名=連接對象.Execute("SQL 查詢語言")
Execute方法調(diào)用后,會自動創(chuàng)建記錄集對象,并將查詢結(jié)果存儲在該記錄對象中,通過Set方法,將記錄集賦給指定的對象保存,以后對象變量就代表了該記錄集對象。
2.執(zhí)行SQL的操作性語言時,沒有記錄集的返回。此時用法為:
連接對象.Execute "SQL 操作性語句" [, RecordAffected][, Option]
·RecordAffected 為可選項,此出可放置一個變量,SQL語句執(zhí)行后,所生效的記錄數(shù)會自動保存到該變量中。通過訪問該變量,就可知道SQL語句隊多少條記錄進(jìn)行了操作。
·Option 可選項,該參數(shù)的取值通常為adCMDText,它用于告訴ADO,應(yīng)該將Execute方法之后的第一個字符解釋為命令文本。通過指定該參數(shù),可使執(zhí)行更高效。
·BeginTrans、RollbackTrans、CommitTrans方法
這三個方法是連接對象提供的用于事務(wù)處理的方法。BeginTrans用于開始一個事物;RollbackTrans用于回滾事務(wù);CommitTrans用于提交所有的事務(wù)處理結(jié)果,即確認(rèn)事務(wù)的處理。
事務(wù)處理可以將一組操作視為一個整體,只有全部語句都成功執(zhí)行后,事務(wù)處理才算成功;若其中有一個語句執(zhí)行失敗,則整個處理就算失敗,并恢復(fù)到處里前的狀態(tài)。
BeginTrans和CommitTrans用于標(biāo)記事務(wù)的開始和結(jié)束,在這兩個之間的語句,就是作為事務(wù)處理的語句。判斷事務(wù)處理是否成功,可通過連接對象的Error集合來實現(xiàn),若Error集合的成員個數(shù)不為0,則說明有錯誤發(fā)生,事務(wù)處理失敗。Error集合中的每一個Error對象,代表一個錯誤信息。