1 目的
規范
數據庫設計。
2 概述
從
數據庫的
設計原則
設計文檔幾方面論述
數據庫設計的規范思想及命名規則。
3
數據庫應用結構
根據對一般
業務系統的分析,將
數據庫和程序系統
統一進行整體描述,展示
數據庫的
表之間以及與程序模塊間的關系。
3.1 數據表和程序模塊的分類
根據“處理特點”,將數據表和程序模塊進行分類如下:
數據表分類:業務數據表、基本編碼表、輔助編碼表、系統信息表、累計數據表、結
算數據表、決策數據表。
程序模塊分類:初始化、業務處理、完整性檢測與修正、結算處理、統計處理。
3.1.1 數據表分類說明
業務數據表:記錄業務發生的過程和結果。如,合同、出倉單、申請單、憑證。
基本編碼表:描述業務實體的基本信息和編碼。如,產品、客戶、供應商、雇員。
輔助編碼表:描述屬性的列表值。如,合同類型、職稱、民族、付款方式。
系統信息表:存放與系統操作、業務控制有關的參數。如,用戶信息、權限、用戶配
置信息、
成本核算方式。
累計數據表:存放業務的當前值和累計值。如,當前
庫存、當前存款、累計銷售、累
計支出、應收賬款。
結算數據表:存放各個時期末的結存數。如,月末庫存、月末銀行存款、應收賬款月
結。
決策數據表:存放各個時期內發生的統計值。如,月銷售統計、月回款統計、出入庫
統計。
3.1.2 程序模塊分類說明
初始化:系統運行前對系統進行數據的初始化。如,庫存初始化。
業務處理:業務過程的控制和結果記錄。如,合同錄入、費用審批、出入庫。
完整性檢測與修正:對累計數據表進行檢查并自動修正。如對當前庫存、當前存款、
累計銷售的檢查和重新
計算。
結算處理:計算并記錄各個時期末的結存數。庫存月結、應收賬款月結。
統計處理:計算并記錄各個時期內發生的統計數。如,統計月銷售、統計月回款、統
計出入庫。
3.2 數據表間的關系
業務數據表<-->基本編碼表 主-外鍵關系。如,合同表<-->客戶編碼表;
業務數據表<-->輔助編碼表 主-外鍵關系。如,合同表<-->付款方式;
業務數據表、累計數據表、結算數據表:累計數據表=結算數據表(上期末) + 業務數
據表(本期內發生)。如當前庫存=上月末庫存數+(本月入庫數-本月出庫數);
決策數據表<-->業務數據表 決策數據表的數據是由業務數據表中數據導出(統計)的;
3.3 數據表與程序模塊間的關系
由一個例子(倉庫管理)來說明數據表與程序模塊之間的關系:
. 系統使用前,由初始化模塊對庫存數(累計數據表)和上月末庫存數(結存數據表)進
行初始化;
. 當有入庫業務發生時,由入庫模塊(業務處理)將入庫單錄入并保存到入庫單明細帳(
業務數據表)中,同時將入庫數累加到庫存數(累計數據表)中;
. 定期或不定期,庫存數核算模塊(檢查完整性檢測與修正)根據上月末的庫存數(結存
數據表)、本月已發生數(業務數據表)檢查當前的庫存數(累計數據表)是否符合,不符合
則給出提示,可手工或自動進行更正(當前庫存數=上月末庫存數+本月入庫數-本月出庫數
);
. 每月初,進行上月的月結處理。月結模塊(結算處理)根據上月初的庫存數(結存數據
表)、上月發生數(業務數據表)計算出上月末的庫存數(累計數據表)。公式為:上月末庫
存數=上月初庫存數+上月入庫數-上月出庫數;
. 每個月月結后,庫存業務月統計模塊(統計處理)統計上月的各種庫存商品的入庫和
出庫數,便于查詢和生成報表,也作為決策
支持的數據
基礎。
3.4 數據表命名時對數據表分類的考慮
. 業務數據表:t_d_<系統標識>_<表標識>。如銷售系統的合同表 t_d_SH_Contract
或 t_d_SH_合同;
. 基本編碼表:t_b_[<系統標識>]_<表標識>。如客戶編碼表t_b_Customer 或 t_b_客
戶;
. 輔助編碼表:t_a_[<系統標識>]_<表標識>。如合同類別t_a_ContType 或 t_a_合同
類別;
. 系統信息表:t_s_[<系統標識>]_<表標識>。如用戶表t_s_User 或 t_s_用戶;
. 累計數據表:t_t_<系統標識>_<表標識>。如當前庫存表t_t_SO_Stock 或 t_t_SO_
庫存;
. 結算數據表:t_c_<系統標識>_<表標識>。如庫存月結表t_c_SO_StockMonth 或
t_c_SO_庫存月結;
. 決策數據表:t_w_<系統標識>_<表標識>。如月銷售統計表t_w_SH_SellMonth 或
t_w_SH_月銷售統計;
注:[]內的內容表示可選。如“t_s_[<系統標識>]_<表標識>”表示t_s_SH_User 和
t_s_User 都是符合規則的。
4
數據庫結構原則
規定除
數據庫設計所遵循的范式外的一些適用原則,在遵循
數據庫設計范式的基礎上
,合理地劃分表,添加狀態和控制字段等。
4.1 輔助編碼表
為了使輔助編碼表能起到預期的效能,又不因過多的輔助編碼表難以管理,故對輔助
編碼表的使用作如下規定:
1. 當某輔助編碼表的編碼允許用戶添加時,應
設計成“獨立”的數據表;否則,將不
允許用戶添加編碼的各輔助編碼表合并成一個“通用”的輔助編碼表。
2. “獨立”的輔助編碼表與主表的列采用主-外約束保證列數據完整性。
3. “通用”的輔助編碼表與各主表間沒有約束關系,主表列的數據完整性由列說明的
“域”來保證。
4. “通用”的輔助編碼表除編碼和名稱列外,還有一個標識列,用來標識合并前的各
碼表,該標識列+編碼列作為該表的主鍵。
5. 對于“獨立”的輔助編碼表,用戶只可添加新的編碼和改變名稱,并且不能改變一
個編碼所代表的意義;對于“通用”的輔助編碼表,原則上不允許用戶修改,或只有限地
允許修改名稱。
4.2 基本編碼表
1. 基本編碼表可以有如下的標識列:內編碼、外編碼、助記碼、簡稱、全稱。內編碼
(唯一編碼)作為主鍵有程序自動生成,用戶不可見;外編碼(唯一編碼)由用戶按某種
規則自行定義,用戶可見;助記碼為拼音縮,方便錄入,不唯一,重碼時由列表
選擇;簡
稱用于列表顯示和報表,以便縮短行寬。以上的列在實現時可視情況和習慣加以刪減。
2. 當碼表的列較多且也行較多時,可將上述的標識列和常用的信息存于一個表,將其
它的信息另表存儲。
4.3 業務數據表
1. 設有‘錄入人’和‘錄入日期’列,由系統自動記錄。
2. 記錄單據的表中設置“自動單據號”,由兩個字符開始以區分單據類型,后跟一數
字序列表示序號。‘自動單據號’由系統自動生成,作為主表的主鍵,不允許用戶修改。
當有對應的紙質單據時,設置“單據號”用于記錄紙質單據的單據號。
3. 明細表中設有行序號,自動記錄行的錄入順序。
4. 設置“存檔標記”列,用于抽取數據到決策
數據庫時的更新標記。插入新行或修改
已有行時設置該標記;數據抽取后清除該標記。
5. 對于用于查詢過濾條件的列,不可為空,以免行“丟失”。
6. 對于數值列,不可為空,“0”作為默認值。
7. 對于必要的“冗余”列,如客戶名稱,應有相應的程序保持各“冗余”列的同一性
,以免出現異議。
8. 設置“過程狀態”列和“記錄狀態”列。過程狀態列用于記錄如創建、審核、記賬
、沖紅等狀態;記錄狀態用于記錄如有效、刪除等狀態。
5
數據庫命名原則
5.1 表名
. 業務數據表:t_d_<系統標識>_<表標識>。
. 基本編碼表:t_b_[<系統標識>]_<表標識>。
. 輔助編碼表:t_a_[<系統標識>]_<表標識>。
. 系統信息表:t_s_[<系統標識>]_<表標識>。
. 累計數據表:t_t_<系統標識>_<表標識>。
. 結算數據表:t_c_<系統標識>_<表標識>。
. 決策數據表:t_w_<系統標識>_<表標識>。
5.2 視圖
v_<視圖類型>_[<系統標識>]_<視圖標識>。視圖類型參見《表的分類》。
5.3 存儲過程
p_[<系統標識>]_<存儲過程標識>
5.4 函數
f_[<系統標識>]_<函數標識>
5.5 觸發器
tr_<表名>_<i,u,d的任意組合> (after)
ti_<表名>_<i,u,d的任意組合> (instead)
5.6 自定義數據類型
ud_<自定義數據類型標識>_<數據類型>
5.7 Default
df_<Default標識>
5.8 Rule
ru_<Rule標識>
5.9 主鍵
pk_<表名>_<主鍵標識>
5.10 外鍵
fk_<表名>_<主表名>_<外鍵標識>
posted @
2007-04-09 16:46 larryjava 閱讀(170) |
評論 (0) |
編輯 收藏
jikes
是一個速度遠快于 javac 的
java
編譯器.
整合 ant 的方法:
- 設置環境變量 JIKESHOME 為 jikes 的路徑
- 設置 ANT_OPTS=-Dbuild.compiler=jikes
- 將 jikes 路徑添加到系統 PATH 中
注意區分大小寫.
然后在所有的ant任務就默認使用 jikes 了, 如果你想在單個工程中使用 ant, 就不要添加 ANT_OPTS 環境變量, 只需要修改 build.xml 中 javac 標簽中的 compiler 為 jikes, 例如:
<javacdestdir="${build.dir}"debug="true"deprecation="false"optimize="false"failonerror="true"compiler="jikes">
jikes 中可以設置如下值:
- classic ( JDK 1.1 或者 1.2 標準 ) – 也可以使用 javac1.1 和 javac1.2 作為別名.
- modern ( JDK 1.3/1.4/1.5 標準 ) – javac1.3, javac1.4, javac1.5 可以作為別名.
- jikes
- jvc - 微軟的那個編譯器
- kjc - kopi 編譯器
- gcj - GCC 中的 gcj 編譯器
- sj - Symantec 的 java 編譯器
- extJavac 根據現有 jvm 決定使用 classic 或者 modern 模式
另外 jikes 中還有幾個附加的屬性設置:
build.compiler.emacs=false
build.compiler.fulldepend=false
build.compiler.pedantic=false
build.compiler.warnings=true
build.compiler.warnings 這個屬性設置最好在 javac 標簽中使用 nowarn 屬性.
保存為 build.properties 文件, 在 build.xml 中這樣調用:
<propertyfile="build.properties"/>
就可以使用 jikes 的附加屬性了。
整合 tomcat 的方法:先如上設置 JIKESHOME 和系統 PATH ,在 web 應用的 web.xml 中添加:
?
<servlet>?
????<servlet-name>?
????jsp?
????</servlet-name>?
????<servlet-class>?
????org.apache.jasper.servlet.JspServlet?
????</servlet-class>?
????<init-param>?
????????<param-name>jspCompilerPlugin</param-name>?
????????<param-value>org.apache.jasper.compiler.JikesJavaCompiler</param-value>?
????</init-param>?
????<load-on-startup>?
????-1?
????</load-on-startup>?
????</servlet>?
????<servlet-mapping>?
????????<servlet-name>?
????????jsp?
????????</servlet-name>?
????????<url-pattern>?
????????*.jsp?
????????</url-pattern>?
????</servlet-mapping>
如果想要在所有 WEB 應用中使用 jikes, 則設置環境變量 CATALINA_OPTS=-Dbuild.compiler.emacs=true, 然后打開 ${TOMCAT_HOME}/conf/web.xml, 找到:
<servlet>?
????<servlet-name>jsp</servlet-name>?
????<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>?
????<init-param>?
????????<param-name>fork</param-name>?
????????<param-value>false</param-value>?
????????</init-param>?
????<init-param>?
????<param-name>xpoweredBy</param-name>?
????????<param-value>false</param-value>?
????????</init-param>?
????<load-on-startup>3</load-on-startup>?
</servlet>改為:
<servlet>?
????<servlet-name>jsp</servlet-name>?
????<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>?
????<init-param>?
????????<param-name>fork</param-name>?
????????<param-value>false</param-value>?
????</init-param>?
????<init-param>?
????????<param-name>compiler</param-name>?
????????<param-value>jikes</param-value>?
????</init-param>?
????<init-param>?
????????<param-name>xpoweredBy</param-name>?
????????<param-value>false</param-value>?
????</init-param>?
????<load-on-startup>3</load-on-startup>?
</servlet>

posted @
2007-02-05 10:03 larryjava 閱讀(274) |
評論 (0) |
編輯 收藏
#
!/
bin
/
sh
#
#?chkconfig:?
345
?
86
?
14
#?description:?manager?tomcat
#
#?filename:
/
etc
/
rc.d
/
init.d
/
tomcat5
#

javaDir
=
`ls?
/
usr
/
java`
for
?java?in?$javaDir
do
export?JAVA_HOME
=
"
/usr/java/${java}
"
done

export?TOMCAT_HOME
=
"
/usr/tomcat5
"
case
?$
1
?in
start)?$TOMCAT_HOME
/
bin
/
startup.sh
;;
stop)?$TOMCAT_HOME
/
bin
/
shutdown.sh
;;
restart)?$TOMCAT_HOME
/
bin
/
shutdown.sh
$TOMCAT_HOME
/
bin
/
startup.sh
;;
*
)?echo?
"
Usage:?$0?{start|stop|restart}
"
;;
esac
exit?
0
posted @
2007-02-02 09:40 larryjava 閱讀(255) |
評論 (0) |
編輯 收藏
Tomcat啟動可以用自帶的確jsvc來實現:jsvc本來要從
http://jakarta.apache.org/ 下載 commons-daemon-1.0-Alpha ,不過tomcat 已經自己帶了一個了,在tomcat/bin目錄下有一個jsvc.tar.gz 解壓,編譯: #tar -xzvf jsvc.tar.gz #cd jsvc-src 運行#sh support/buildconf.sh #./configure --with-java=/usr/java#make(注意:tomcat-5.0.18版本帶的jsvc源代碼有一個低級錯誤--少一個分號,會導致編譯不成功,可以自己加上這個分號) tomcat自己帶的jsvc-src/native目錄下還有兩個腳本 Tomcat.sh 和 Tomcat5.sh ,可以用作啟動和停止tomcat的腳本,我把Tomcat5.sh略作修改,文件如下: 代碼:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#!/bin/sh
#
# Startup Script for Tomcat5
#
# chkconfig: 345 87 13
# description: Tomcat Daemon
# processname: jsvc
# pidfile: /var/run/jsvc.pid
# config:
#
# Source function library.
. /etc/rc.d/init.d/functions
#
prog=tomcat
#
# Small shell script to show how to start/stop Tomcat using jsvc
# If you want to have Tomcat running on port 80 please modify the server.xml
# file:
#
#???
#??? #?????????????? port="80" minProcessors="5" maxProcessors="75"
#?????????????? enableLookups="true" redirectPort="8443"
#?????????????? acceptCount="10" debug="0" connectionTimeout="60000"/>
#
# You need a developement version of Tomcat (Apache Tomcat/4.1-dev)
#
# Adapt the following lines to your configuration #設定自己的參數
JAVA_HOME=/usr/local/j2sdk1.4.2-04
CATALINA_HOME=/usr/local/jakarta-tomcat-5.0.19
DAEMON_HOME=$CATALINA_HOME/bin
#需要在系統中設定一個沒有權限的
#用戶來運行,這樣比較安全
TOMCAT_USER=tomcat5
TMP_DIR=/var/tmp
CATALINA_OPTS=
CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar start(){
??? echo -n $"Starting $prog: "
??? #
??? # Start Tomcat
??? #
??? $DAEMON_HOME/jsvc-src/jsvc \
??? -user $TOMCAT_USER \
??? -home $JAVA_HOME \
??? -Dcatalina.home=$CATALINA_HOME \
??? -Djava.io.tmpdir=$TMP_DIR \
??? -outfile $CATALINA_HOME/logs/catalina.out \
??? -errfile '&1' \
??? $CATALINA_OPTS \
??? -cp $CLASSPATH \
??? org.apache.catalina.startup.Bootstrap
??? #
??? # To get a verbose JVM
??? #-verbose \
??? # To get a debug of jsvc.
??? #-debug \
??? RETVAL=$?
??? [ $RETVAL = 0 ] && touch /var/lock/subsys/jsvc
??? [ $RETVAL = 0 ] && echo_success || echo_failure
??? echo
??? return $RETVAL
}
stop(){
??? echo -n $"Stopping $prog: "
??? #
??? # Stop Tomcat
??? #
??? PID=`cat /var/run/jsvc.pid`
??? kill $PID
??? RETVAL=$?
??? [ $RETVAL = 0 ] && rm /var/lock/subsys/jsvc
??? [ $RETVAL = 0 ] && echo_success || echo_failure
??? echo
??? return $RETVAL
} case "$1" in
? start)
??????? start
??? ;; ? stop)
??????? stop
??? ;; ? restart|reload)
??????? stop
??????? start
??? ;; ? *)
??? echo "Usage $0 start/stop"
??? exit 1;;
esac^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^把這段代碼保存為 /etc/rc.d/init.d/tomcat ,然后運行 #chkconfig --add tomcat用--list看一下是否系統已有tomcat啟動文件
#ckhconfig --list即可把tomcat 添加為系統服務自動隨系統啟動了。這個腳本會在runlevel 3/4/5三種模式自動啟動。注意這段腳本是為tomcat5創建的,如果你用tomcat4,則需要在另一個tomcat.sh的基礎上修改。??
posted @
2007-02-02 09:26 larryjava 閱讀(165) |
評論 (0) |
編輯 收藏
webwork默認的類型轉換是不支持lob的,開發的時候formBean直接用域模型代替,往往根據域模型生成的model有lob字段,webwork不支持,我們需要手工加個。
java 代碼
?
??

public?class?ClobConverter?extends?DefaultTypeConverter?
{???
???
????@Override???

????public?Object?convertValue(Map?map,?Object?object,?Class?clazz)?
{???

????????if?(null?!=?object?&&?clazz?==?Clob.class)?
{???
????????????return?ClobUtils.createClob(String.valueOf(object));???
????????}???
????????return?super.convertValue(map,?object,?clazz);???
????}???
}???在classpath中加上如下的全局的類型轉換:xwork-conversion.properties
properties代碼
java.sql.Clob=com.shunpe.framework.typeconverter.ClobConverter??
posted @
2007-01-13 18:17 larryjava 閱讀(195) |
評論 (0) |
編輯 收藏
返回值進行區分: 1.如果是String型
代碼
-
<
ww:
if
?test
=
"
sftd.equals(\
"
4
\
"
)
"
></
ww:
if
>
2.如果是char型
代碼
-
<
ww:
if
?test
=
"
sftd.equals('4')
"
></
ww:
if
>
3.如果是int型
代碼
-
<
ww:
if
?test
=
"
sftd==4
"
></
ww:
if
>
?
?
在循環中:
代碼
注意:id==model.belong,而不是belong==model.belong
定義變量
代碼 <ww:set?name="tt1"?value="'aaaaaaaaaaaaaa'"/>????
<ww:property?value="#tt1"/>???
 注意:字符串要加''
日期顯示:
<ww:property?value="createTime.toString()"?/>

<ww:if?test="selectedByOthers!='true'">

<input?onclick="ST(this);?"?type="checkbox"?name="$$SelectDoc"?value="<ww:property?value='id'/>"?style="border:?0pt;"/>

</ww:if>

<ww:else>

<input?type="radio"?name="$$SelectDoc"?value="<ww:property?value='id'/>|<ww:property?value='topic'/>"

<ww:if?test="id.toString().equals(aboutDocid)">checked</ww:if>?

<ww:if?test="#status.count?%?2">style="border:?0pt;"</ww:if>

<ww:else>style="border:?0pt;background-color:#F7F7F7"</ww:else>?>

</ww:else>

 在ww:if比較時id.toString().equals(aboutDocid)中的id是長整型,必須通過toString()成為字符串后再與字符型的aboutDocid比較,否則不報錯,卻也得不到想要的結果。因為這些代碼是寫在jsp頁面的,這個小細節經常忘記,導致顯示的結果不正確卻又一時想不起原因來。:) |
posted @
2007-01-13 17:45 larryjava 閱讀(295) |
評論 (0) |
編輯 收藏
轉載于CSDN
在.net開發中,充分利用免費控件是好事情,但是如果不能修改控件達到自己的需求,就要動用JS大法了,前提是研究好瀏覽器模型 的各種對象的方法屬性。尤其是熟悉CSS+HTML就會做的很酷。就JS語言本身來說要求不高。
1,動態刪除Table 里面內容技巧,不需要寫太多代碼,一行:
tb.removeNode(true)
2,動態增加行,除了CreateElement方法,還可以這樣比較短小:
<table id=tb1></table>
<SCRIPT>
function addTable(){
? var row1 = tb1.insertRow();
? var cell1=row1.insertCell();
? var cell2=row1.insertCell();
? cell1.innerText="灰豆寶寶";
? cell2.innerText="超級大笨狼"
}
</SCRIPT>
<INPUT TYPE = "button" VALUE = "AddTable" onclick = "addTable()">
3,在DIV中動態增加Table
<SCRIPT>
function addTable(){
? var tb1 = document.createElement("table");
? tb1.border="1px";
? var row1 = tb1.insertRow();
? var cell1=row1.insertCell();
? var cell2=row1.insertCell();
? mydiv.appendChild(tb1);
? cell1.innerText="wanghr100";
? cell2.innerText="panyuguang962"
}
</SCRIPT>
<BODY>
<div id=mydiv style="width:400;height:300;"></div>
<INPUT TYPE = "button" VALUE = "AddTable" onclick = "addTable()">
4,在DIV中刪除Table,簡單只要Div.innerHTML=""就可以。
以上是部分實用相對短小的代碼,當然有其他各種辦法實現,不過一般都比上面的長,比如組合使用DIV對象的insertAdjacentHTML 方法等,在不同需要下使用不同方法,前提是研究好瀏覽器模型 的各種對象的方法屬性。尤其是熟悉CSS+HTML就會做的很酷。就JS語言本身來說要求不高。
以下是以Document對象為例,相關方法有:
Method Description
attachEvent
createAttribute ?
createComment ?
createDocumentFragment
createElement
createEventObject
createStyleSheet
createTextNode
detachEvent
getElementById ?
getElementsByName
getElementsByTagName
mergeAttributes
recalc
write ?
writeln
以DIV對象為例相關方法有:
addBehavior
appendChild
applyElement
attachEvent
clearAttributes
cloneNode
contains
detachEvent
getAdjacentText ?
getAttribute ?
getAttributeNode
getElementsByTagName
hasChildNodes
insertAdjacentElement
insertAdjacentHTML
insertAdjacentText
insertBefore
mergeAttributes
normalize
removeAttribute
removeAttributeNode ?
removeBehavior
removeChild
removeExpression
removeNode
replaceAdjacentText
replaceChild
replaceNode
setActive
setAttribute
setAttributeNode
setExpression ?
其他,比如下拉列表對象,和拖拽操作等我有時間也整理比較一下,實現相同功能,相對比較短的精彩代碼是值得收藏的。
1. removeNode(true) 非IE瀏覽器不支持的,應該用 obj.parentNode.removeChild(obj);
2. insertRow(x) insertCell(y) 這個參數是IE里是可以缺省,但是在非IE瀏覽器里不可缺省
<SCRIPT>
function addTable(){
? var tb1 = document.createElement("TABLE");
? tb1.border="1px";
? var row1 = tb1.insertRow(0);
? var cell1=row1.insertCell(0);
? var cell2=row1.insertCell(1);
? document.getElementById("mydiv").appendChild(tb1);
? cell1.innerHTML="wanghr100";
? cell2.innerHTML="panyuguang962";
? row1.insertCell(2).innerHTML="要注意:給的例子要考慮全面";
}
</SCRIPT>
<BODY>
<div id="mydiv" style="width:400;height:300;"></div>
<INPUT TYPE = "button" VALUE = "AddTable" onclick = "addTable()">
posted @
2006-11-24 19:10 larryjava 閱讀(395) |
評論 (0) |
編輯 收藏
Oralce中的to_date()函數用于將字符串轉換為日期對象,具體使用格式為:
to_date(?string,?
[
?format_mask?
]
,?
[
?nls_language?
]
?)
string1
要轉換的字符串.
format_mask
可選項,日期轉換格式.
nls_language
可選項. 指定用于轉換字符串的nls language.
其中
format_mask主要有以下幾種格式:
Format Code
|
Explanation
|
YEAR
|
Year, spelled out
|
YYYY
|
4-digit year
|
MM
|
Month (01-12; JAN = 01).
|
MON
|
Abbreviated name of month.
|
MONTH
|
Name of month, padded with blanks to length of 9 characters.
|
D
|
Day of week (1-7).
|
DAY
|
Name of day.
|
DD
|
Day of month (1-31).
|
DDD
|
Day of year (1-366).
|
DY
|
Abbreviated name of day.
|
HH
|
Hour of day (1-12).
|
HH12
|
Hour of day (1-12).
|
HH24
|
Hour of day (0-23).
|
MI
|
Minute (0-59).
|
SS
|
Second (0-59).
|
SSSSS
|
Seconds past midnight (0-86399).
|
[問題]
ORA-01810: format code appears twice
可能是像Java那樣指定日期格式,比如:
to_char('2006-06-01 18:00:00' 'yyyy-mm-dd hh:MM:ss')
而在Oracle中的日期格式是不區分大小寫的,所以 mm 出現了兩次。
正確的寫法是:
to_char('2006-06-01 18:00:00' 'yyyy-mm-dd hh:mi:ss')
ORA-01722: invalid number
可能是指定小時為hh,而hh取值范圍是 1-12,所以如果指定小時為 0 點將出現這個異常,比如:
to_char('2006-06-01 00:00:00' 'yyyy-mm-dd hh:MM:ss')
正確的寫法是:
to_char('2006-06-01 00:00:00' 'yyyy-mm-dd hh24:MM:ss')
posted @
2006-11-19 20:18 larryjava 閱讀(359) |
評論 (0) |
編輯 收藏
在很多程序請求是都有等待的頁面!
在WebWork2.1.1開始,就新增了一個攔截器:execAndWait
<interceptor name="execAndWait" class="com.opensymphony.webwork.interceptor.ExecuteAndWaitInterceptor"/>
execAndWait將請求的Action放到后臺執行,同時返回"wait"的輸出結果;再次同樣的Action請求,如果Action執行完畢,它將返回
真正的輸出結果。
注意:"wait"輸出等待頁面時必須包含下面語句:
<meta http-equiv="refresh" content="5;url="<ww:url includeParams="'all'" />">
它每隔5秒鐘,重新刷新前面的action請求。
?
Example:
// WaitAction.java
package example.wait;
import com.opensymphony.xwork.Action;
public class WaitAction implements Action{
?public String execute() throws Exception {
??try {
??????????? System.out.println("-----start sleep!");
??????????? Thread.sleep(2000 * 10);
??????????? System.out.println("-----end sleep!");
??????? } catch (InterruptedException e) {
??????????? e.printStackTrace();
??????? }
??return SUCCESS;
?}
}
?
xwork.xml:
?<action name="wait" class="example.wait.WaitAction">
??????????? <result name="success" type="dispatcher">
??????????????? <param name="location">/success.jsp</param>
??????????? </result>
??????????? <result name="wait" type="dispatcher">
??????????????? <param name="location">/wait.jsp</param>
??????????? </result>
??????????? <interceptor-ref name="execAndWait"/>
??????? </action>
wait.jsp:
<%@ taglib uri="webwork" prefix="ww" %>
<HTML>
<HEAD>
<meta http-equiv="refresh" content="5;url="<ww:url includeParams="'all'" />">
</HEAD>
<BODY>
Wait..............
</BODY>
</HTML>
posted @
2006-11-08 17:13 larryjava 閱讀(461) |
評論 (0) |
編輯 收藏
?
posted @
2006-11-01 16:30 larryjava 閱讀(283) |
評論 (0) |
編輯 收藏