konhon

          忘掉過(guò)去,展望未來(lái)。找回自我,超越自我。
          逃避不一定躲的過(guò), 面對(duì)不一定最難過(guò), 孤單不一定不快樂(lè), 得到不一定能長(zhǎng)久, 失去不一定不再擁有, 可能因?yàn)槟硞€(gè)理由而傷心難過(guò), 但我卻能找個(gè)理由讓自己快樂(lè).

          Google

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            203 Posts :: 0 Stories :: 61 Comments :: 0 Trackbacks

          #

          復(fù)制表結(jié)構(gòu)的通用存儲(chǔ)過(guò)程

          -- Transfer對(duì)象的重要屬性

          -- 1. 屬性

          屬性名                            類型                描述
          --------------------------------- ------------------- --------------------
          CopyAllDefaults                Boolean    所有默認(rèn)值
          CopyAllObjects                 Boolean    所有對(duì)象
          CopyAllRules                   Boolean    所有規(guī)則
          CopyAllStoredProcedures        Boolean    所有存儲(chǔ)過(guò)程
          CopyAllTables                  Boolean    所有表
          CopyAllTriggers                Boolean    所有觸發(fā)器
          CopyAllUserDefinedDatatypes    Boolean    所有用戶自定義類型
          CopyAllViews                   Boolean    所有視圖
          CopyData                       Boolean    所有數(shù)據(jù)
          DestDatabase                   String     目標(biāo)對(duì)象數(shù)據(jù)庫(kù)
          DestLogin                      String     目標(biāo)數(shù)據(jù)庫(kù)登陸用戶名
          DestPassword                   String     目標(biāo)數(shù)據(jù)庫(kù)登陸密碼
          DestServer                     String     目標(biāo)服務(wù)器
          DestUseTrustedConnection       Boolean    用戶信任連接
          DropDestObjectsFirst           Boolean    是否先刪除目標(biāo)對(duì)象
          IncludeDependencies            Boolean    是否包含依靠對(duì)象
          ScriptType                     Boolean    腳本類型

          -- 2. 重要方法: 

          方法名稱                    功能描述
          --------------------------- --------------------------
          AddObject                   增加對(duì)象
          AddObjectByName             通過(guò)對(duì)象名稱增加對(duì)象

          if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[P_CopyDB]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
          drop procedure [dbo].[P_CopyDB]
          GO

          /*-- 在 SQLServer 中使用SQLDMO.Transfer 實(shí)現(xiàn)數(shù)據(jù)遷移
              存儲(chǔ)過(guò)程實(shí)現(xiàn)源數(shù)據(jù)庫(kù)到目標(biāo)數(shù)據(jù)庫(kù)的對(duì)象和數(shù)據(jù)的復(fù)制
              要求源數(shù)據(jù)庫(kù)和目標(biāo)數(shù)據(jù)庫(kù)在同一服務(wù)器
              如果是要實(shí)現(xiàn)不同服務(wù)器之間的復(fù)制,則需要增加驗(yàn)證信息
          --鄒建 2005.07(引用請(qǐng)保留此信息)--*/

          /*--調(diào)用示例

              CREATE DATABASE test
              EXEC P_CopyDB @Source_DB='northwind',@Des_DB='test'
              DROP DATABASE test
          --*/
          CREATE PROCEDURE P_CopyDB     
          @Des_DB      sysname,           --目標(biāo)數(shù)據(jù)庫(kù)
          @Obj_Type    nvarchar(4000)=N'',--復(fù)制的對(duì)象類型,可以是下列字符串列表:
                                          -- O 所有對(duì)象,D 默認(rèn)值,R 規(guī)則,P 存儲(chǔ)過(guò)程
                                          -- T 表,TR 觸發(fā)器,DT 用戶定義數(shù)據(jù)類型
                                          -- V 視圖,DATA 數(shù)據(jù),DEL 刪除目標(biāo)對(duì)象
          @Source_DB   sysname=N'',       --源數(shù)據(jù)庫(kù)
          @ServerName  sysname=N'',       --服務(wù)器名
          @UserName    sysname=N'',       --用戶名,不指定則表示使用 Windows 身份登錄
          @pwd         sysname=N''        --密碼 
          AS
          SET NOCOUNT ON
          DECLARE @srvid int,@Dbid int,@S_dbid int,@D_dbid int,@TransferID int,
              @err int,@src varchar(255), @desc varchar(255)

          IF ISNULL(@ServerName,N'')=N'' SET @ServerName=@@SERVERNAME
          IF ISNULL(@Source_DB,N'')=N'' SET @Source_DB=DB_NAME()

          --創(chuàng)建sqldmo對(duì)象·
          EXEC @err=sp_oacreate 'sqldmo.sqlserver',@srvid OUT
          IF @err<>0 GOTO lb_Err

          --連接服務(wù)器
          IF ISNULL(@UserName,N'')=N'' --使用 Windows 身份登錄
          BEGIN
              EXEC @err=sp_oasetproperty @srvid,'loginsecure',-1
              IF @err<>0 GOTO lb_Err

              EXEC @err=sp_oamethod @srvid,'connect',NULL,@servername
          END
          ELSE
              EXEC @err=sp_oamethod @srvid,'connect',NULL,@servername,@UserName,@pwd

          IF @err<>0 GOTO lb_Err

          --獲取數(shù)據(jù)庫(kù)集
          EXEC @err=sp_oagetproperty @srvid,'databases',@Dbid OUT
          IF @err<>0 GOTO lb_Err

          --選擇源數(shù)據(jù)庫(kù)    
          EXEC @err=sp_oamethod @Dbid,'item',@S_dbid OUT,@Source_DB
          IF @err<>0 GOTO lb_Err

          --選擇目標(biāo)數(shù)據(jù)庫(kù)    
          EXEC @err=sp_oamethod @Dbid,'item',@D_dbid OUT,@Des_DB
          IF @err<>0 GOTO lb_Err

          --設(shè)置復(fù)制的對(duì)象
          EXEC @err=sp_oacreate 'SQLDMO.Transfer',@TransferID OUT
          IF @err<>0 GOTO lb_Err

          --設(shè)置目標(biāo)服務(wù)器信息
          EXEC @err=sp_oasetproperty  @TransferID,'DestServer',@ServerName
          IF @err<>0 GOTO lb_Err

            --設(shè)置連接用戶
          IF ISNULL(@UserName,N'')=N'' --使用 Windows 身份登錄
          BEGIN
              EXEC @err=sp_oasetproperty @TransferID,'DestUseTrustedConnection',1
              IF @err<>0 GOTO lb_Err
          END
          ELSE
          BEGIN
              EXEC @err=sp_oasetproperty @TransferID,'DestLogin',@UserName
              IF @err<>0 GOTO lb_Err

              EXEC @err=sp_oasetproperty @TransferID,'DestPassword',@pwd
              IF @err<>0 GOTO lb_Err
          END

            --設(shè)置復(fù)制對(duì)象信息
          EXEC @err=sp_oasetproperty @TransferID,'DestDatabase',@Des_DB
          IF @err<>0 GOTO lb_Err

          DECLARE tb CURSOR FAST_FORWARD LOCAL
          FOR
          SELECT Name FROM(
              SELECT KeyWord=N',D,',   Name=N'CopyAllDefaults' UNION ALL
              SELECT KeyWord=N',O,',   Name=N'CopyAllObjects' UNION ALL
              SELECT KeyWord=N',R,',   Name=N'CopyAllRules' UNION ALL
              SELECT KeyWord=N',P,',   Name=N'CopyAllStoredProcedures' UNION ALL
              SELECT KeyWord=N',T,',   Name=N'CopyAllTables' UNION ALL
              SELECT KeyWord=N',TR,',  Name=N'CopyAllTriggers' UNION ALL
              SELECT KeyWord=N',DT,',  Name=N'CopyAllUserDefinedDatatypes' UNION ALL
              SELECT KeyWord=N',V,',   Name=N'CopyAllViews' UNION ALL
              SELECT KeyWord=N',DATA,',Name=N'CopyData' UNION ALL
              SELECT KeyWord=N',DEL,', Name=N'DropDestObjectsFirst'
          )A WHERE CHARINDEX(KeyWord,
                  CASE WHEN ISNULL(@Obj_Type,N'')='' THEN ',O,DATA,' ELSE @Obj_Type END)>0
          OPEN tb
          FETCH tb INTO @src
          WHILE @@FETCH_STATUS=0
          BEGIN
              EXEC @err=sp_oasetproperty @TransferID,@src,1
              IF @err<>0 GOTO lb_Err
              FETCH tb INTO @src
          END
          CLOSE tb
          DEALLOCATE tb

          --復(fù)制對(duì)象
          EXEC @err=sp_oamethod @S_dbid,'Transfer',null,@TransferID
          IF @err<>0 GOTO lb_Err

          --結(jié)束
          SET @err=0
          GOTO lb_Exit

          --錯(cuò)誤處理
          lb_Err:
              EXEC sp_oageterrorinfo NULL, @src OUT, @desc OUT 
              RAISERROR(N'錯(cuò)誤編號(hào) %#x, 錯(cuò)誤源 "%s", 錯(cuò)誤描述 "%s"',16,1,@err,@src,@desc)
              RETURN -1

          lb_Exit:
              EXEC sp_OADestroy @Dbid  
              EXEC sp_OADestroy @srvid 
              EXEC sp_OADestroy @TransferID 
              RETURN @err
          GO

          posted @ 2005-09-16 19:42 konhon 優(yōu)華 閱讀(892) | 評(píng)論 (0)編輯 收藏

           

          This stored procedure can be used to insert the result set of the
          particular select statement into Excel file (c:\ImportToExcel.xls,
          by default).
          You can pass the server name, user name, user password, the select
          statement to execute, and the file name to store the results set,
          as in the example below:

          EXEC ExportToExcel @server = '.',
                             @uname = 'sa',
                             @QueryText = 'SELECT au_fname FROM pubs..authors',
                             @filename = 'c:\ImportToExcel.xls'

          /*
          Version: SQL Server 7.0/2000
          Created by: Alexander Chigrik
          - all about MS SQL
          (SQL Server Articles, FAQ, Scripts, Tips and Test Exams).

          This stored procedure can be used to insert the result set of the
          particular select statement into Excel file (c:\ImportToExcel.xls,
          by default).
          You can pass the server name, user name, user password, the select
          statement to execute, and the file name to store the results set,
          as in the example below:

          EXEC ExportToExcel @server = '.',
                             @uname = 'sa',
                             @QueryText = 'SELECT au_fname FROM pubs..authors',
                             @filename = 'c:\ImportToExcel.xls'
          */

          IF OBJECT_ID('ExportToExcel') IS NOT NULL DROP PROC ExportToExcel
          GO

          CREATE PROCEDURE ExportToExcel (
            @server sysname = null,
            @uname sysname = null,
            @pwd sysname = null,
            @QueryText varchar(200) = null,
            @filename varchar(200) = 'c:\ImportToExcel.xls'
          )
          AS
          DECLARE @SQLServer int,
                  @QueryResults int,
                  @CurrentResultSet int,
                  @object int,
                  @WorkBooks int,
                  @WorkBook int,
                  @Range int,
                  @hr int,
                  @Columns int,
                  @Rows int,
                  @indColumn int,
                  @indRow int,
                  @off_Column int,
                  @off_Row int,
                  @code_str varchar(100),
                  @result_str varchar(255)

          IF @QueryText IS NULL 
            BEGIN
              PRINT 'Set the query string'
              RETURN
            END

          -- Sets the server to the local server
          IF @server IS NULL SELECT @server = @@servername

          -- Sets the username to the current user name
          IF @uname IS NULL SELECT @uname = SYSTEM_USER

          SET NOCOUNT ON

          EXEC @hr = sp_OACreate 'SQLDMO.SQLServer', @SQLServer OUT
          IF @hr <> 0
          BEGIN
              PRINT 'error create SQLDMO.SQLServer'
              RETURN
          END

          --  Connect to the SQL Server
          IF @pwd IS NULL
            BEGIN
              EXEC @hr = sp_OAMethod @SQLServer, 'Connect', null, @server, @uname
              IF @hr <> 0
                 BEGIN
                   PRINT 'error Connect'
                   RETURN
                 END
            END
          ELSE
            BEGIN
              EXEC @hr = sp_OAMethod @SQLServer, 'Connect', null, @server, @uname, @pwd
              IF @hr <> 0
                BEGIN
                  PRINT 'error Connect'
                  RETURN
                END
            END

          SELECT @result_str = 'ExecuteWithResults("' + @QueryText + '")'
          EXEC @hr = sp_OAMethod @SQLServer, @result_str, @QueryResults OUT
          IF @hr <> 0
          BEGIN
              PRINT 'error with method ExecuteWithResults'
              RETURN
          END

          EXEC @hr = sp_OAMethod @QueryResults, 'CurrentResultSet', @CurrentResultSet OUT
          IF @hr <> 0
          BEGIN
              PRINT 'error get CurrentResultSet'
              RETURN
          END

          EXEC @hr = sp_OAMethod @QueryResults, 'Columns', @Columns OUT
          IF @hr <> 0
          BEGIN
              PRINT 'error get Columns'
              RETURN
          END

          EXEC @hr = sp_OAMethod @QueryResults, 'Rows', @Rows OUT
          IF @hr <> 0
          BEGIN
              PRINT 'error get Rows'
              RETURN
          END

          EXEC @hr = sp_OACreate 'Excel.Application', @object OUT
          IF @hr <> 0
          BEGIN
              PRINT 'error create Excel.Application'
              RETURN
          END

          EXEC @hr = sp_OAGetProperty @object, 'WorkBooks', @WorkBooks OUT
          IF @hr <> 0
          BEGIN
              PRINT 'error create WorkBooks'
              RETURN
          END

          EXEC @hr = sp_OAGetProperty @WorkBooks, 'Add', @WorkBook OUT
          IF @hr <> 0
          BEGIN
              PRINT 'error with method Add'
              RETURN
          END

          EXEC @hr = sp_OAGetProperty @object, 'Range("A1")', @Range OUT
          IF @hr <> 0
          BEGIN
              PRINT 'error create Range'
              RETURN
          END

          SELECT @indRow = 1
          SELECT @off_Row = 0
          SELECT @off_Column = 1

          WHILE (@indRow <= @Rows)
          BEGIN
          SELECT @indColumn = 1

          WHILE (@indColumn <= @Columns)
          BEGIN

          EXEC @hr = sp_OAMethod @QueryResults, 'GetColumnString', @result_str OUT, @indRow, @indColumn
          IF @hr <> 0
          BEGIN
              PRINT 'error get GetColumnString'
              RETURN
          END

          EXEC @hr = sp_OASetProperty @Range, 'value', @result_str
          IF @hr <> 0
          BEGIN
              PRINT 'error set value'
              RETURN
          END

          EXEC @hr = sp_OAGetProperty @Range, 'Offset', @Range OUT, @off_Row, @off_Column
          IF @hr <> 0
          BEGIN
              PRINT 'error get Offset'
              RETURN
          END

          SELECT @indColumn = @indColumn + 1

          END

          SELECT @indRow = @indRow + 1
          SELECT @code_str = 'Range("A' + LTRIM(str(@indRow)) + '")'
          EXEC @hr = sp_OAGetProperty @object, @code_str, @Range OUT
          IF @hr <> 0
          BEGIN
              PRINT 'error create Range'
              RETURN
          END

          END

          SELECT @result_str = 'exec master..xp_cmdshell ''del ' + @filename + ''', no_output'
          EXEC(@result_str)
          SELECT @result_str = 'SaveAs("' + @filename + '")'
          EXEC @hr = sp_OAMethod @WorkBook, @result_str
          IF @hr <> 0
          BEGIN
              PRINT 'error with method SaveAs'
              RETURN
          END

          EXEC @hr = sp_OAMethod @WorkBook, 'Close'
          IF @hr <> 0
          BEGIN
              PRINT 'error with method Close'
              RETURN
          END

          EXEC @hr = sp_OADestroy @object
          IF @hr <> 0
          BEGIN
              PRINT 'error destroy Excel.Application'
              RETURN
          END

          EXEC @hr = sp_OADestroy @SQLServer
          IF @hr <> 0
          BEGIN
              PRINT 'error destroy SQLDMO.SQLServer'
              RETURN
          END
          GO

          posted @ 2005-09-16 19:41 konhon 優(yōu)華 閱讀(760) | 評(píng)論 (0)編輯 收藏

          UML

          UML有三類主要的圖, 靜態(tài)圖(static diagrams),動(dòng)態(tài)圖(dynamic diagrams),物理圖(physical diagrams)。

          靜態(tài)圖描述了那些不發(fā)生變化的軟件元素的邏輯結(jié)構(gòu),描繪了類、對(duì)象、數(shù)據(jù)結(jié)構(gòu)及其存在于它們之間的關(guān)系。

          動(dòng)態(tài)圖展示了在運(yùn)行期間軟件實(shí)體的變化,描繪了執(zhí)行流程、實(shí)體改變狀態(tài)的方式。

          物理圖顯示了軟件實(shí)體的不變化的物理結(jié)構(gòu),描繪的物理實(shí)體有源文件、庫(kù)文件、字節(jié)文件、數(shù)據(jù)文件等,以及存在于它們之間的關(guān)系。

          UML表示:

          1)長(zhǎng)方形表示類、箭頭表示關(guān)系(一般用垂直方向的箭頭表示繼承關(guān)系, 水平方向的箭頭表示關(guān)聯(lián));
          2)圖中所有的關(guān)系叫關(guān)聯(lián)(associations),關(guān)聯(lián)是簡(jiǎn)單的數(shù)據(jù)關(guān)系,用來(lái)表示一個(gè)對(duì)象持有一個(gè)另外一個(gè)對(duì)象的引用,或是調(diào)用另外一個(gè)對(duì)象的方法;
          3)關(guān)系的名稱映射到持有的引用的變量名稱;
          4)挨著箭頭的數(shù)字通常用來(lái)說(shuō)明關(guān)聯(lián)持有實(shí)例的數(shù)量,如果數(shù)字大于1說(shuō)明采用了某些容器,通常是使用了一個(gè)數(shù)組;
          5)類圖標(biāo)可以有多于一個(gè)的框格,最上面的框格永遠(yuǎn)是表示類的名稱,其它的框格描述函數(shù)和變量;
          6)《interface》符號(hào)表示Comparable是一個(gè)接口(interface);
          7)大多數(shù)符號(hào)是可選的。
          8)在變量和函數(shù)的前面有一個(gè)字符,一個(gè)“-”表示變量或函數(shù)是私有(private),“#”表示變量或函數(shù)是受保護(hù)(protected)的,“+”表示變量或函數(shù)是公開(kāi)的。

          posted @ 2005-09-08 21:27 konhon 優(yōu)華 閱讀(391) | 評(píng)論 (0)編輯 收藏

          Java examples (example source code)

          http://www.java2s.com/ExampleCode/J2ME/CatalogJ2ME.htm
          posted @ 2005-09-08 19:37 konhon 優(yōu)華 閱讀(580) | 評(píng)論 (0)編輯 收藏

          有關(guān)JSP/Servlet的重定向技術(shù)綜述如下[補(bǔ)充]

          1.RequestDispatcher.forward()
          是在服務(wù)器端起作用,當(dāng)使用forward()時(shí),Servlet engine傳遞HTTP請(qǐng)求從當(dāng)前的Servlet or JSP到另外一個(gè)Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此時(shí)form提交的所有信息在b.jsp都可以獲得,參數(shù)自動(dòng)傳遞.
          但forward()無(wú)法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同時(shí)forward()無(wú)法在后面帶參數(shù)傳遞,比如servlet?name=frank,這樣不行,可以程序內(nèi)通過(guò)response.setAttribute("name",name)來(lái)傳至下一個(gè)頁(yè)面.

          重定向后瀏覽器地址欄URL不變.

          例:在servlet中進(jìn)行重定向
          public void doPost(HttpServletRequest request,HttpServletResponse response)
          throws ServletException,IOException
          {

          response.setContentType(
          "text/html; charset=gb2312");

          ServletContext sc 
          = getServletContext();

          RequestDispatcher rd 
          = null;

          rd 
          = sc.getRequestDispatcher("/index.jsp"); //定向的頁(yè)面

          rd.forward(request, response);

          }

          通常在servlet中使用,不在jsp中使用。

          2.response.sendRedirect()
          是在用戶的瀏覽器端工作,sendRedirect()可以帶參數(shù)傳遞,比如servlet?name=frank傳至下個(gè)頁(yè)面,同時(shí)它可以重定向至不同的主機(jī)上,sendRedirect()可以重定向有frame.的jsp文件.
          重定向后在瀏覽器地址欄上會(huì)出現(xiàn)重定向頁(yè)面的URL
          例:在servlet中重定向
          public void doPost(HttpServletRequest request,HttpServletResponse response)

          throws ServletException,IOException

          {

          response.setContentType(
          "text/html; charset=gb2312");

          response.sendRedirect(
          "/index.jsp");

          }


          由于response是jsp頁(yè)面中的隱含對(duì)象,故在jsp頁(yè)面中可以用response.sendRedirect()直接實(shí)現(xiàn)重定位。
          注意:
          (1).使用response.sendRedirect時(shí),前面不能有HTML輸出。
          這并不是絕對(duì)的,不能有HTML輸出其實(shí)是指不能有HTML被送到了瀏覽器。事實(shí)上現(xiàn)在的server都有cache機(jī)制,一般在8K(我是說(shuō)JSP SERVER),這就意味著,除非你關(guān)閉了cache,或者你使用了out.flush()強(qiáng)制刷新,那么在使用sendRedirect之前,有少量的HTML輸出也是允許的。
          (2).response.sendRedirect之后,應(yīng)該緊跟一句return;
          我們已經(jīng)知道response.sendRedirect是通過(guò)瀏覽器來(lái)做轉(zhuǎn)向的,所以只有在頁(yè)面處理完成后,才會(huì)有實(shí)際的動(dòng)作。既然你已經(jīng)要做轉(zhuǎn)向了,那么后的輸出還有什么意義呢?而且有可能會(huì)因?yàn)楹竺娴妮敵鰧?dǎo)致轉(zhuǎn)向失敗。
          比較:
          (1).Request Dispatcher.forward()是容器中控制權(quán)的轉(zhuǎn)向,在客戶端瀏覽器地址欄中不會(huì)顯示出轉(zhuǎn)向后的地址;
          (2).response.sendRedirect()則是完全的跳轉(zhuǎn),瀏覽器將會(huì)得到跳轉(zhuǎn)的地址,并重新發(fā)送請(qǐng)求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址。
          前者更加高效,在前者可以滿足需要時(shí),盡量使用RequestDispatcher.forward()方法.

          注:在有些情況下,比如,需要跳轉(zhuǎn)到一個(gè)其它服務(wù)器上的資源,則必須使用HttpServletResponse.sendRequest()方法。

          3.

          它的底層部分是由RequestDispatcher來(lái)實(shí)現(xiàn)的,因此它帶有RequestDispatcher.forward()方法的印記。


          如果在之前有很多輸出,前面的輸出已使緩沖區(qū)滿,將自動(dòng)輸出到客戶端,那么該語(yǔ)句將不起作用,這一點(diǎn)應(yīng)該特別注意。
          另外要注意:它不能改變?yōu)g覽器地址,刷新的話會(huì)導(dǎo)致重復(fù)提交

          4.修改HTTP header的Location屬性來(lái)重定向
          通過(guò)設(shè)置直接修改地址欄來(lái)實(shí)現(xiàn)頁(yè)面的重定向。
          jsp文件代碼如下:

          <%
          response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
          String newLocn = "/newpath/jsa.jsp";
          response.setHeader("Location",newLocn);
          %>

          5.JSP中實(shí)現(xiàn)在某頁(yè)面停留若干秒后,自動(dòng)重定向到另一頁(yè)面
          在html文件中,下面的代碼:

          它的含義:在5分鐘之后正在瀏覽的頁(yè)面將會(huì)自動(dòng)變?yōu)閠arget.html這一頁(yè)。代碼中300為刷新的延遲時(shí)間,以秒為單位。targer.html為你想轉(zhuǎn)向的目標(biāo)頁(yè),若為本頁(yè)則為自動(dòng)刷新本頁(yè)。
          由上可知,可以通過(guò)setHeader來(lái)實(shí)現(xiàn)某頁(yè)面停留若干秒后,自動(dòng)重定向到另一頁(yè)面。
          關(guān)鍵代碼:
          String content=stayTime+";URL="+URL;
          response.setHeader("REFRESH",content);

          如果總結(jié)得不夠全面,請(qǐng)各位發(fā)表自己的意見(jiàn)或經(jīng)驗(yàn)。
          posted @ 2005-09-08 19:06 konhon 優(yōu)華 閱讀(874) | 評(píng)論 (3)編輯 收藏

          // 一個(gè)算物料計(jì)劃的存儲(chǔ)過(guò)程
          CREATE FUNCTION DBO.F_BomList
          (
                @PPartNo NVARCHAR(20),
                @PQuantity INT = 1,
                @PType BIT = 0
          )
          RETURNS @BomList TABLE(
             PartNo NVARCHAR(20),
             FUsage FLOAT,
             Raw_ID INT)
          AS 
          BEGIN
               DECLARE @BomListTmp TABLE(
                     CPartNo NVARCHAR(20),
                     PartNo NVARCHAR(20),
                     FUsage FLOAT,
                     _Level INT)
                --@Lev是層的定義
               DECLARE @LLevel INT, @LSample INT
               SET @LLevel  = 1
               SELECT @LSample = ISNULL(Sample, 1) FROM Bom WHERE CPartNo = @PPartNo
               IF @LSample = 0
                    SET @LSample = 1
               --先取@PPartNo的第一層數(shù)據(jù)到#Temp
               INSERT INTO @BomListTmp (CPartNo, PartNo, FUsage, _Level)
                               SELECT CPartNo, CPartNo, 1, @LLevel FROM Bom WHERE CPartNo = @PPartNo
               --以循環(huán)方式取得所有的下層元件清單到#Temp
               WHILE EXISTS(SELECT CPartNo FROM @BomListTmp WHERE _Level = @LLevel)
               BEGIN
                     SET @LLevel = @LLevel + 1
                     INSERT INTO @BomListTmp (CPartNo, PartNo, FUsage, _Level)
                                     SELECT a.CPartNo, a.PartNo,
                                     CASE WHEN @LLevel = 2 THEN  a.FUsage * b.FUsage / @LSample ELSE a.FUsage * b.FUsage END, @LLevel
                                     FROM BomDtl a, (SELECT PartNo, FUsage FROM @BomListTmp WHERE _Level + 1= @LLevel) b
                                     WHERE a.CPartNo = b.PartNo
               END
               -- 計(jì)算總量
               INSERT INTO @BomList(PartNo, FUsage, Raw_ID)
                      SELECT PartNo, SUM(FUsage) * @PQuantity FUsage, 0 FROM @BomListTmp WHERE _Level <> 1
                      GROUP BY PartNo
               IF @PType = 0
                     -- 標(biāo)識(shí)非原材料
                    UPDATE @BomList SET Raw_ID = 1
                          WHERE PartNo IN (SELECT DISTINCT CPartNo FROM BomDtl)
               RETURN
          End

           

          posted @ 2005-09-08 06:09 konhon 優(yōu)華 閱讀(437) | 評(píng)論 (0)編輯 收藏

          剛開(kāi)始撰寫(xiě)JSP時(shí),總是會(huì)被JSP的除錯(cuò)訊息所困擾,如果沒(méi)有稍微瞭解JSP與Servlet之間運(yùn)作關(guān)係的初學(xué)者,所看到的只是一堆除錯(cuò)訊息,甚至例外發(fā)生的訊息,這些訊息雖然包括詳細(xì)的錯(cuò)誤訊息,但對(duì)於初學(xué)者而言卻是不友善、不易閱讀理解的。基本上,只要瞭解JSP與Servlet之間的運(yùn)作關(guān)係,並瞭解Java編譯訊息與例外處理,要瞭解在撰寫(xiě)JSP網(wǎng)頁(yè)時(shí),因錯(cuò)誤而產(chǎn)生的錯(cuò)誤報(bào)告頁(yè)面就不是件難事。

          我們知道JSP終究會(huì)轉(zhuǎn)換為Servlet,而運(yùn)行時(shí)真正動(dòng)作的是Servlet類,所以錯(cuò)誤可能發(fā)生在兩個(gè)時(shí)候:一個(gè)是JSP轉(zhuǎn)換為 Servlet原始碼時(shí),因?yàn)镴SP語(yǔ)法錯(cuò)誤而導(dǎo)致無(wú)法生成Servlet原始碼,或是已轉(zhuǎn)換為Servlet程式碼,但編譯時(shí)編譯器檢查出錯(cuò)誤,這稱之為T(mén)ranslation Time Processing Errors;第二個(gè)錯(cuò)誤發(fā)生的時(shí)期在於客戶請(qǐng)求執(zhí)行Servlet時(shí),因?yàn)槌淌竭壿嫽蜻\(yùn)行時(shí)未考慮到的錯(cuò)誤而產(chǎn)生例外,這稱之為Client Request Time Processing Errors。

          如何在JSP運(yùn)行時(shí)判別錯(cuò)誤發(fā)生的種類?如果錯(cuò)誤報(bào)告頁(yè)面出現(xiàn)"....encountered an internal error....",就有可能是轉(zhuǎn)換時(shí)期錯(cuò)誤,或是"Generated servlet error: [javac] Compiling 1 source file....",就有可能是編譯器在編譯Servlet程式碼時(shí)發(fā)現(xiàn)錯(cuò)誤,這個(gè)時(shí)候您必須檢查一下JSP語(yǔ)法是否有錯(cuò)誤,或是程式邏輯有明顯可讓編譯器檢查出的錯(cuò)誤。
          posted @ 2005-09-08 03:52 konhon 優(yōu)華 閱讀(444) | 評(píng)論 (0)編輯 收藏

          為女朋友寫(xiě)的一個(gè)小程序
          主要功能類似"中英字典", 不中英對(duì)照需要自己錄入才行.

          http://www.aygfsteel.com/Files/konhon/WordTip.rar

          錄入完後供查找.
          適用midp1.0的手機(jī).

          軟件截圖:
          r_aa.JPG
          posted @ 2005-09-07 03:42 konhon 優(yōu)華 閱讀(703) | 評(píng)論 (0)編輯 收藏


          Java的中文問(wèn)題通常會(huì)困擾很多開(kāi)發(fā)者,你可能在開(kāi)發(fā)Web應(yīng)用程序的時(shí)候遇到中文參數(shù)的傳遞問(wèn)題,最后你可能選擇使用Filter把Request的編碼方式設(shè)置為GBK來(lái)解決。在J2ME的開(kāi)發(fā)中我們同樣會(huì)遇到中文問(wèn)題,比如在RMS中存儲(chǔ)中文、網(wǎng)絡(luò)傳輸中傳輸中文、從文件中讀取中文等問(wèn)題。

              我們?cè)诮鉀Q中文問(wèn)題的時(shí)候,用到的最多的一個(gè)詞就是UTF-8。我們知道ASCII碼是單字節(jié)編碼方式,可以解決英文的問(wèn)題,但是中文的字庫(kù)非常龐大,用ASSII碼就難以解決了。Java語(yǔ)言是支持UNICODE編碼方式的,UNICODE是雙字節(jié)的編碼方式可以支持中文字庫(kù),但是這多少帶來(lái)一些浪費(fèi),因?yàn)椴⒉皇撬械淖址际欠怯⑽淖址摹TF-8編碼方式正好可以解決這個(gè)問(wèn)題,只有當(dāng)字符不是ASSII碼的時(shí)候他采用雙字節(jié)來(lái)表示,這樣就節(jié)省了空間。這里我只總結(jié)了三種J2ME常見(jiàn)的中文問(wèn)題。


          網(wǎng)絡(luò)傳輸中的中文問(wèn)題
              解決這個(gè)問(wèn)題的關(guān)鍵是我們不采用InputStream或者OutputStream提供的方法按照字節(jié)來(lái)傳遞數(shù)據(jù),而是把InputStream或者OutputStream封裝為DataInputStream和DataOutputStream。這樣我們就可以使用DataOutputStream中的writeUTF(String s)來(lái)送出數(shù)據(jù)了,同時(shí)可以使用DataInputStream提供的readUTF()來(lái)讀入數(shù)據(jù)。注意在這兩個(gè)方法搭配使用的時(shí)候要注意順序。比如我們?cè)诼?lián)網(wǎng)的時(shí)候可能寫(xiě)出這樣的代碼
            
              客戶端
            dos.writeInt(myint);
              dos.writeByte(mybyte);
              dos.writeUTF(myString);

              服務(wù)器端
              int i = dis.readInt();
              byte b = dis.readByte();
              String s = dis.readUTF();  
          RMS持久性存儲(chǔ)的中文問(wèn)題
              由于RMS中的數(shù)據(jù)存儲(chǔ)都是按照byte[]的格式存儲(chǔ)的,因此我們需要稍微變化一下,但是基本上還是走UTF-8的思路。
              
              寫(xiě)入數(shù)據(jù)
              ByteArrayOutputStream baos = new ByteArrayOutputStream();
              DataOutputStream dos = new DataOutputStream(baos);
              dos.writeUTF(myString);
              byte[] data = baos.toByteArray();
              rs.addRecord(data,0,data.length);

              讀出數(shù)據(jù)
              byte[] data = rs.getRecord(index);
              ByteArrayInputStream bais = new ByteArrayInputStream(data);
              DataInputStream dis = new DataInputStream(bais);
              String myString = dis.readUTF();
          讀取中文文件的問(wèn)題
          在MIDP中并不支持文件系統(tǒng),但是我們可以讀取jar包中的文件。如果文件中含有中文,那么我們需要進(jìn)行一些特殊的處理,首先我們使用UE或者Notepad工具把相關(guān)的文件轉(zhuǎn)換文UTF-8格式編碼。我們?cè)谧x取文件的時(shí)候需要進(jìn)行如下的簡(jiǎn)單處理。下面是處理函數(shù)。

              public String readFromFile(String fileName)
              {
                  String returnString = null;
                  InputStream is = getClass().getResourceAsStream(fileName);
                  if (is != null)
                  {
                      ByteArrayOutputStream baos = new ByteArrayOutputStream();
                      int ch = 0;
                      try
                      {
                          while ((ch = is.read()) != -1)
                          {
                              baos.write(ch);
                          }
                          byte[] data = baos.toByteArray();
                          returnString = new String(data, "UTF-8");
                          is.close();
                          baos.close();

                      } catch (IOException e)
                      {
                          e.printStackTrace();
                      }
                  }
                  return returnString;
              }

          posted @ 2005-09-05 03:11 konhon 優(yōu)華 閱讀(446) | 評(píng)論 (0)編輯 收藏

          1. 具備良好的java語(yǔ)言基礎(chǔ),不要還沒(méi)有學(xué)習(xí)java語(yǔ)言就拿起一本J2ME的書(shū)來(lái)看。這樣效果并不好,相反如果你有良好的java語(yǔ)言基礎(chǔ)的話,J2ME就顯得比較容易掌握!

          2. 如果你決定開(kāi)始學(xué)習(xí)J2ME了,那么首先你應(yīng)該清楚J2ME的體系結(jié)構(gòu)是什么樣的。當(dāng)你真正清楚了Configuration和Profile的關(guān)系、了解了CDC和CLDC的區(qū)別后,那么你可以開(kāi)始編寫(xiě)自己的HelloWorldMIDlet了

          3. 選擇優(yōu)秀的開(kāi)發(fā)環(huán)境,J2ME的開(kāi)發(fā)環(huán)境比較靈活。我推薦使用Eclipse和EclipseME插件。因?yàn)镋clipse的插件非常豐富且靈活,當(dāng)你開(kāi)發(fā)聯(lián)網(wǎng)應(yīng)用程序的時(shí)候安裝Lomboz就可以了。當(dāng)然你也可以選擇Jbuilder等IDE,但是不推薦記事本!

          4. 在編寫(xiě)代碼之前,應(yīng)該多讀一下好的代碼。畢竟MIDlet的寫(xiě)法和一般的java Application不是很一樣。推薦WTK中的Demo程序。

          5. MIDP的API doc比較少,每個(gè)類的方法也很少。如果有時(shí)間的話,每天看個(gè)4-5個(gè)。這會(huì)對(duì)你幫助很大。畢竟它的API和J2SE的并不一樣,只是它的子集,不應(yīng)該想當(dāng)然的使用。

          6. 清楚MIDP中高級(jí)UI和低級(jí)UI類的使用和區(qū)別,在你做用戶界面的之前,思考好什么符合你的要求,推薦使用高級(jí)UI,這樣更簡(jiǎn)單、可移植性更好。但是需要使用Canvas的時(shí)候不要猶豫,大膽使用!清楚高級(jí)事件和低級(jí)事件處理的機(jī)制。

          7. 在開(kāi)發(fā)應(yīng)用程序的時(shí)候盡量使用MVC模式,這樣擴(kuò)展性出色。

          8. 徹底掌握Record Management System,這是MIDP的一個(gè)重要子集。實(shí)現(xiàn)數(shù)據(jù)持久性存儲(chǔ)不可缺少的系統(tǒng)。善于使用RecordFilter和RecordEnumeration來(lái)簡(jiǎn)化RMS的操作,在我的blog里面有一系列的關(guān)于RMS的文章,有時(shí)間就看看吧!

          9. 重視線程,如果你還不真正清楚線程的時(shí)候的話,那么趕快找資料看看吧。在J2ME的開(kāi)發(fā)中,這非常的重要。具備了聯(lián)網(wǎng)的能力則給你的應(yīng)用程序插上了翅膀,而聯(lián)網(wǎng)的時(shí)候?yàn)榱吮苊舛氯欢ㄒ褂枚嗑€程技術(shù)。

          10. 時(shí)刻關(guān)注最新的技術(shù),比如PIM,BlueTooth等都在慢慢的得到支持。你可以使用WTK2.2開(kāi)發(fā)相關(guān)的程序了。

          11. 掌握J(rèn)ava中文問(wèn)題,在J2ME中這個(gè)問(wèn)題更加突出。你應(yīng)該把你的應(yīng)用程序放到手機(jī)上去測(cè)試這個(gè)問(wèn)題而不是在模擬器上。

          12. IO不用我說(shuō)你也必須清楚,在J2ME中提供的IO包中,類比較少你更應(yīng)該注意。

          13. 不要因?yàn)槁?tīng)說(shuō)手機(jī)資源受限,在寫(xiě)程序的時(shí)候就顧慮重重,不要犧牲代碼的可讀性和可維護(hù)性,但是也不能亂用。這個(gè)時(shí)候你的java語(yǔ)言的基礎(chǔ)起到了重要的作用!

          14. 如果想開(kāi)發(fā)游戲,那么你應(yīng)該多讀相關(guān)的書(shū)籍。我這里一本J2ME游戲開(kāi)發(fā)的書(shū)籍(電子版).想看的話可以email聯(lián)系我,http://javap2p.nease.net/book/j2me_gamingbook_pdf.zip

          15. 如果有些問(wèn)題想了很久都沒(méi)有明白的話,可以到論壇上去問(wèn)問(wèn),但是不要一有問(wèn)題就問(wèn),自己思考后得到正確答案效果更好。或者把問(wèn)題放下幾天,也許自然而然就明白了!不是胡說(shuō)。

          16. 多寫(xiě)代碼!多多總結(jié)!簡(jiǎn)單的八個(gè)字,非常重要:)
          posted @ 2005-09-05 03:04 konhon 優(yōu)華 閱讀(466) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共21頁(yè): First 上一頁(yè) 12 13 14 15 16 17 18 19 20 下一頁(yè) Last 
          主站蜘蛛池模板: 安阳县| 沾化县| 定西市| 布拖县| 汽车| 云南省| 内江市| 左权县| 宝鸡市| 宁德市| 乌鲁木齐县| 通渭县| 论坛| 麻城市| 慈利县| 南乐县| 漳州市| 金寨县| 灵石县| 三原县| 汶上县| 科尔| 海丰县| 新邵县| 长治市| 临城县| 乐昌市| 托克逊县| 巨鹿县| 京山县| 华亭县| 汉沽区| 牟定县| 肃宁县| 光山县| 萨嘎县| 三穗县| 石柱| 临洮县| 加查县| 东兰县|