<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    2006年1月16日

    在這里工作也有半年了,有得有失. 近來心里十分的茅盾, 項目已經黃色第5周了.我還是沒有去改變它. 我不知道是自己不行, 還是自己不想. 學了不多的自我激勵方法, 可是都不見效果. 也知道這個時候只有自己才能解救自己.

    posted @ 2006-11-21 13:25 rodney 閱讀(387) | 評論 (0)編輯 收藏
     
    以下內容轉載于http://www.aspxboy.com/private/5294/default.aspx,感謝該作者的分享.
    1.???? 如何設置一個From的邊界

    2.???? 如何建立一個透明的From

    3.???? 如何設置窗體在屏幕中的位置

    4.???? 如何使最小化和最大化按鈕不可用

    5.???? 如何使一個窗體不見

    6.???? 如何設置使窗體成為非矩形的.

    7.???? 如何使一個窗體在屏幕的最頂端.

    8.???? 如何顯示一個Model和非Model的窗體

    9.???? 如何制作一個MDI的窗體

    10.? 如何將你的窗體不顯示在任務條上.

    11.? 如何制作一個帶啟動屏幕的窗體.

    12.? 如何使你的窗體TrayIcon.

    13.? 如何修改控制窗體的尺寸和長寬尺寸.

    14.? 如何建立一個Windows Explorer風格的窗體.

    15.? 如何設置初始的啟動窗體

    16.? 如何建立一個有背景圖像的窗體
    ==========================================================================================

    1.???? 如何設置一個From的邊界

    form總共有七種不同的邊界風格讓你設置,你可以在設計時刻也可以運行時通過代碼動態的來設置它.這七種邊界風格分別是:

    none (System.Windows.Forms.FormBorderStyle.None )

    fixed 3D (System.Windows.Forms.FormBorderStyle.Fixed3D)

    fixed Dialog (System.Windows.Forms.FormBorderStyle.FixedDialog)

    fixed Single(System.Windows.Forms.FormBorderStyle.FixedSingle)

    fixed Tool Window(System.Windows.Forms.FormBorderStyle.FixedToolWindow)

    sizable(system.windows.forms.formborderstyle.sizable)

    sizable? Tool Window

    (system.windows.forms.formborderstyle.sizabletoolwindow)

    在設計方式下在vs.net IDE的 Properties window中設置FormBorderStyle屬性就可以了.

    在運行方式下你可以用代碼來完成:

    dlgbx1.formborderstyle = System.Windows.Forms.FormBorderStyle.FixedDialog
    這七種邊界類型VB6中就有,沒有什么大的變化,運行方式下你需要對照不同的枚舉變量進行設置.

    ?

    2.???? 如何建立一個透明的From

    你可以通過兩種方法在設計時刻和運行時刻來做到這一點.

    設計時刻,你可以在vs.net IDE的 Properties window, 設置Opacity 屬性達到這個效果.這個值從0.0到1.0 . 0表示完全透明,1.0表示完全不透明.

    運行時刻你可以用下面的編碼設置窗體的opactiy屬性來做到.具體:

    frmtransparentform.opacity = 0.76; ( C# )

    看得出現在很簡單了,你已經不用再去了解什么alpha變量了.透明始終只是一種效果,不要濫用它.

    ?

    3.???? 如何設置窗體在屏幕中的位置

    你可以設置窗體的startposition屬性,vs.net一般給你一個保守的選項” WindowsDefaultLocation“ 這樣系統在Load窗體時將根據用戶當前的計算機設置來確定一個值,你也可以在設計時將它改成另一個值”Center”.

    如果你一定要在設計方式下確定窗體在屏幕出現的位置你可以先設置startposition為manual,然后設置location的x和y的值.

    運行時用代碼實現似乎更簡潔一些:

    ? Form1.Location = new Point (100, 100) ( VB.NET )
    當然你也可以分別修改的Location的X和Y值,對應的是窗體的Left和Top屬性,比如:

    form1.left += 200 ( VB.NET )

    form1.top -= 100 ( VB.NET )

    另外一個屬性將也將影響窗體在屏幕的位置:desktoplocation 這個屬性主要是在你設置窗體的位置相對于任務欄時非常實用(當你把任務條放在屏幕的頂或左邊時,其實相應改動了desktop coordinates (0,0)),你可以這樣設置這個不出現在設計屬性窗口中的屬性,

    form1.desktoplocation = new Point (100,100)

    窗體在屏幕中的位置將主要取決于各自用戶具體的硬件和設置情況,所以保守的作法是用默認的” WindowsDefaultLocation”或 ”Center”;專業的作法是自己先獲取系統的設置然后編碼動態計算后進行設置,不然很容易在屏幕上找不到你的窗體.

    ?

    4.???? 如何使最小化和最大化按鈕不可用

    在設置窗體的form.minimizebox和form.maximizebox 當為True時表示顯示,False時表示不可.用編程方式見下:

    frmmaxmin.minnimizebox = False ( VB.NET)

    frmmaxmin.maxmnimizebox = True? ( VB.NET )

    ?

    5.???? 如何使一個窗體不見

    我想最直接的辦法是你調用 Hide()方法來做到這一點.不過我想提供另一種方法,看了之后你會獲得一些其它的啟發. ( VB.NET )

    ??? Private Const WS_EX_TOOLWINDOW As Int32 = &H80

    ??? Private Const WS_POPUP As Int32 = &H80000000

    ??? Private Const WS_VISIBLE As Int32 = &H10000000

    ??? Private Const WS_SYSMENU As Int32 = &H80000

    ??? Private Const WS_MAXIMIZEBOX As Int32 = &H10000

    ?

    ??? Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams

    ??????? Get

    ??????????? Dim cp As System.Windows.Forms.CreateParams

    ??????????? cp = MyBase.CreateParams

    ??????????? cp.ExStyle = WS_EX_TOOLWINDOW

    ??????????? cp.Style = WS_POPUP Or WS_VISIBLE Or WS_SYSMENU Or WS_MAXIMIZEBOX

    ??????????? cp.Height = 0

    ??????????? cp.Width = 0

    ??????????? Return cp

    ??????? End Get

    ??? End Property

    ??? 原來是把Height 和Width都設置成0 ,我想這種方式和Hide()調用的底層可能是不同的。

    ?

    6.???? 如何設置使窗體成為非矩形的.

    這個問題我想我提供的不是最專業的作法,至少它還不能達到我期望的那樣,也就是說它在某些事件中它還會變回矩形.但至少我可以告訴你:如果試圖調用原來的win32’s API SetWindowRng是不行的,我曾如此的嘗試過.現在你可能需要知道有關窗體的Region屬性

    ???? ' // ( VB.NET )?

    ??? Public Sub SetWindowRegion()

    ?

    ??????? Dim FormPath As System.Drawing.Drawing2D.GraphicsPath

    ??????? Dim Reg As Drawing.Region

    ??????? Dim lRet As Long

    ?

    ??????? FormPath = New Drawing2D.GraphicsPath()

    ??????? FormPath.AddEllipse(New Rectangle(0, 0, 250, 120))

    ?

    ??????? Me.Region = New Region(FormPath)

    ?

    ??? End Sub

    ?

    ??? Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    ??????? Me.Region = Nothing

    ??????? SetWindowRegion()

    ??? End Sub

    ?

    ??? Protected Overrides Sub OnResize(ByVal e As System.EventArgs)

    ????????? Me.Region = Nothing

    ????????? SetWindowRegion()

    ??? End Sub

    ?

    7.???? 如何使一個窗體在屏幕的最頂端.

    這是很實用的一個功能,現在你不用在調用其它api了,只用設置topmost 屬性為True就可以了.對于這個屬性在設計時刻和運行時刻都是可以進行修改的.代碼方式:

    ???????? myTopForm.TopMost = True ( VB.NET)
    ?

    8.???? 如何顯示一個Model和非Model的窗體

    model和modeless的窗體主要將取決于你的應用,最多的是用在顯示對話框.當你需要model的窗體時你調用myform. ShowDialog而非Model的調用MyForm.Show,對于ShowDialog有一個可選參數ower可以讓你為一個窗體建立父子關系.比如:

    ' Visual Basic
    Private Sub mnuAbout_Click(…args…)
    ?? Dim f As New FormOption
    ?? f.ShowDialog Me
    End Sub
    有一點需要注意的是對于ShowDialog來說,當執行到這一句,窗體顯示,但這之后的代碼將不會執行,只到窗口關閉之后才繼續執行,而對于Show來說是即時的,顯示窗體之后將立即執行下面的代碼.
    9.???? 如何制作一個MDI的窗體

    1.???? 建立一個新的Windows Application項目

    2.???? 分別加入兩個窗體Form1 、Form2

    3.???? 設置Form1的IsMdiContainer屬性為True。使它成為MDI主窗體。

    4.???? 在Form2中加入一個RichTextBox控件,并設置Dock為:Fill

    5.???? 在Tools 窗體中拖一個MainMenu到窗體Form1,然后建立一個菜單File|Windows|Help三個菜單項,File中包括New、Exit菜單項;Windows中包括Cascade、Horizontal等。

    6.???? 設置Windows菜單項的MdiList屬性=True, 這樣每一個MDI子窗口將自動加在Windows菜單項下面。

    7.???? 雙擊New菜單項,然后加入以下代碼:

    ???? private void menuNew_Click(object sender, System.EventArgs e)

    ???? {

    ???????? Form2? NewMdiChild ;

    ???????? NewMdiChild = new Form2() ;

    ???????? NewMdiChild.MdiParent = this ;

    ???????? NewMdiChild.Show() ;

    ?

    ???? }

    8.???? 在Windows的Cascade等菜單項中加入以下代碼:

    ???? private void menuWindowCasca_Click(object sender, System.EventArgs e)

    ???? {

    ???????? this.LayoutMdi( MdiLayout.Cascade) ;

    ????????

    ???? }

    另外還有以下常用的:

    this.layoutmdi(mdilayout.tilehorizontal);

    this.layoutmdi(mdilayout.tilevertical);

    9.???? F5運行。

    最終版的vs.net 不知是否會有一個通用的模板,不過用完全手工的方式產生一個MDI的窗口,顯得有些繁瑣,不如VS.NET的IDE方式下那么簡潔。

    ?

    10.???? 如何將你的窗體不顯示在任務條上.

    當窗體的邊界風格是tools Window時它都不會出現在任務條上的.另外上面標題5中介紹的方法不僅窗體看不見,也不會出現在任務條上.

    ??? 如果你現在在Dotnet的世界,這件事也變的簡單,任何的Winform窗體現在都有ShowInTaskbar屬性,所以你只要簡單的設置這個屬性就可以了。同樣你可以選擇在屬性窗口中將ShowInTaskbar由True改為False。或是用代碼的方式:

    ??? MyTaskBarFrm.ShowInTaskbar = false ; ( C# )

    ?

    11.???? 如何制作一個帶啟動屏幕的窗體.

    需要你準備兩個winform的窗體,一個叫它:splashscreen,把它做成一個漂亮的窗體。然后你需要一個主窗體叫它:form1吧,然后在這個窗體加入下面的代碼。

    ???? // ( C# )

    ???? protected override void OnLoad ( System.EventArgs e )

    ???? {

    ???????? //make load take a long time

    ???????? Thread.Sleep(2000);

    ?

    ???????? base.OnLoad(e);

    ?

    ???? }

    然后在main中加入這樣的代碼:

    ???? [STAThread]

    ???? static void Main()

    ???? {

    ???????? SplashScreen splashForm = new SplashScreen();

    ???????? splashForm.Show();

    ?

    ???????? Form1 mainForm = new Form1() ;

    ???????? mainForm.Load += new EventHandler(splashForm.MainScreen_Load);

    ???????? Application.Run(mainForm);

    ?

    ???? }

    不要忘了加上對threading的引用: using System.Threading;

    ?

    12.???? 如何使你的窗體TrayIcon.

    實現這個功能你可以運用notifyicon控件來達到,從tools Windows中將NotifyIcon拖到你的窗體上然后在下面的事件加入如下代碼,F5。

    ????

    ?? ' // VB.NET

    ??? Private mIconA As Icon = New Icon("Icon1.ico")

    ??? Private mIconB As Icon = New Icon("Icon2.ico")

    ??? Private mIconDisplayed As Boolean

    ???

    ??? Public Sub New()

    ??????? MyBase.New

    ?

    ??????? Form1 = Me

    ?

    ??????? 'This call is required by the Win Form Designer.

    ??????? InitializeComponent

    ?

    ??????? 'TODO: Add any initialization after the InitializeComponent() call

    ???????

    ??????? 'this form isn't used directly so hide it immediately

    ??????? Me.Hide()

    ???????

    ??????? 'setup the tray icon

    ??????? Initializenotifyicon()

    ??? End Sub

    ???

    ??? Private Sub Initializenotifyicon()

    ??????? 'setup the default icon

    ??????? notifyicon = New System.Windows.Forms.NotifyIcon()

    ??????? NotifyIcon.Icon = mIconA

    ??????? NotifyIcon.Text = "Right Click for the menu"

    ??????? NotifyIcon.Visible = True

    ??????? mIconDisplayed = True

    ?

    ??????? 'Insert all MenuItem objects into an array and add them to

    ??????? 'the context menu simultaneously

    ??????? Dim mnuItms(3) As MenuItem

    ??????? mnuItms(0) = New MenuItem("Show Form...", New EventHandler(AddressOf Me.ShowFormSelect))

    ??????? mnuItms(0).DefaultItem = True

    ??????? mnuItms(1) = New MenuItem("Toggle Image", New EventHandler(AddressOf Me.ToggleImageSelect))

    ??????? mnuItms(2) = New MenuItem("-")

    ??????? mnuItms(3) = New MenuItem("Exit", New EventHandler(AddressOf Me.ExitSelect))

    ??????? Dim notifyiconMnu As ContextMenu = New ContextMenu(mnuItms)

    ??????? notifyicon.ContextMenu = notifyiconMnu

    ??? End Sub

    ?

    ??? Public Sub ShowFormSelect(ByVal sender As Object, ByVal e As System.EventArgs)

    ??????? 'Display the settings dialog

    ??????? Dim SettingsForm As New SettingsForm()

    ??????? SettingsForm.ShowDialog()

    ?

    ??? End Sub

    ?

    ??? Public Sub ToggleImageSelect(ByVal sender As Object, ByVal e As System.EventArgs)

    ??????? 'called when the user selects the 'Toggle Image' context menu

    ?

    ??????? 'determine which icon is currently visible and switch it

    ??????? If mIconDisplayed Then

    ??????????? 'called when the user selects the 'Show Form' context menu

    ??????????? NotifyIcon.Icon = mIconB

    ??????????? NotifyIcon.Text = "Sad"

    ??????????? mIconDisplayed = False

    ??????? Else

    ??????????? NotifyIcon.Icon = mIconA

    ??????????? NotifyIcon.Text = "Happy"

    ??????????? mIconDisplayed = True

    ??????? End If

    ?

    ??? End Sub

    ?

    ??? Public Sub ExitSelect(ByVal sender As Object, ByVal e As System.EventArgs)

    ??????? 'called when the user selects the 'Exit' context menu

    ?

    ??????? 'hide the tray icon

    ??????? NotifyIcon.Visible = False

    ?

    ??????? 'close up

    ??????? Me.Close()

    ??? End Sub

    ?

    ??? 'Form overrides dispose to clean up the component list.

    ??? Public Overloads Overrides Sub Dispose()

    ??????? MyBase.Dispose()

    ??????? components.Dispose()

    ??? End Sub

    ??? 圖標文件你自己準備了,如果成功你可以看到有關NotifyIcond的各種功能了。

    ?

    13.???? 如何修改控制窗體的尺寸和長寬尺寸.

    主要是修改winform的size, Width 和Height屬性。同樣它們都是可以在設計和運行時刻進行修改和設置。

    form1.size = New System.Drawing.Size(100, 100) ( VB.NET )

    form1.width += 100? (VB.NET )

    form1.height -= 20? (VB.NET )

    ?

    14.???? 如何建立一個Windows Explorer風格的窗體.

    1.建立一個新的windows Application

    2.從toolbox窗口拖一個treeview控件、、一個splitterk控件、一個listview控件,分別在屬性窗口中設置treeview的dock屬性為::left;設置listview控件的dock屬性為:fill

    3: F5 運行

    ?

    15.???? 如何設置初始的啟動窗體

    無論是c#還是visual Basic的Winform項目中你都可以在Solution Explorer窗口中右鍵你的Project,然后選擇屬性,從你Project的屬性頁中選擇你啟動的窗體或是Main()方法。

    有些不同的是在目前的vs.net Beta2中C#項目會自動產生Main() 方法,Visual Basic.Net 的項目中你必須自己添加Main()代碼,C#中你可以將Form1改成任何你可以啟動的窗體名:

    ???? // ( C# )

    ??????? static void Main()

    ??????? {

    ??????????? Application.Run(new Form1());

    ??????? }

    ?

    16.???? 如何建立一個有背景圖像的窗體

    現在的winform中所有的窗體都有一個backgroundimage屬性,只用對它賦值就可以了。普通窗體可以在運行模式也可以在運行模式完成這個設置。比如在initializecomponent()或窗體的構造函數中加入這樣的代碼:

    this.backgroundimage = new Bitmap("C:\\DotNetApp\\WinForm\\Tile.bmp" ) ;

    ??? 對于MDI的主窗體要麻煩一些,在VS.NET的IDE窗體中,當你設置完IsMdiContainer屬性為True后,你需要查看一下InitializeComponent()中是否有這樣的代碼 ( C# ):

    ??????????? this.mdiClient1.Dock = System.Windows.Forms.DockStyle.Fill;

    ??????????? this.mdiClient1.Name = "mdiClient1";

    或是在窗口的屬性窗口組合框中看到mdiclient1 System.Windows.Forms.mdiClient.這就是主MDI窗口,不過我沒有在dotnet的文檔中找到任何有關System.Windows.Forms.mdiClient的說明。然后你可以在InitializeComponent()或窗體的構造函數中加入這樣的代碼( C# ):

    this.mdiclient1.backgroundimage? = new Bitmap("C:\\DotNetApp\\WinForm\\Tile.bmp" ) ;

    ??? 網上有一個ImageView的例子,里面演示了給MDI主窗體中背景上加入一行Logo文字的方法,這樣使你的MDI窗體看起來很商業化,具體的你可以這樣做:

    1.?? 先在VS.NET 自動產生代碼的InitializeComponent中看是否有這樣的語句( C# ):

    this.controls.addrange(new System.Windows.Forms.Control[] {this.mdiClient1});

    ??? 又是這個mdiClient (haha)

    2.?? 建立以下兩個函數用于顯示這個Logo字符:

    // ( C# )

    ??????? protected? void Mdi_OnPaint (? Object s,? System.Windows.Forms.PaintEventArgs e )

    ??????? {

    ??????????? Control c = (Control)s;

    ???????????

    ?

    ??????????? Rectangle r1 = c.ClientRectangle;

    ??????????? r1.Width -= 4;

    ??????????? r1.Height -= 4;

    ?

    ??????????? Rectangle r2 = r1;

    ??????????? r2.Width -= 1;

    ??????????? r2.Height -= 1;

    ?

    ??????????? Font f = new Font("Tahoma", 8);

    ?

    ??????????? String str = "MyWinform.NET ?2001 MyWinform Application V1.0";

    ?

    ??????????? StringFormat sf = new StringFormat();

    ??????????? sf.Alignment = StringAlignment.Far;

    ??????????? sf.LineAlignment = StringAlignment.Far;

    ?

    ??????????? e.Graphics.DrawString(str, f, new SolidBrush(SystemColors.ControlDarkDark), r1, sf);

    ??????????? e.Graphics.DrawString(str, f, new SolidBrush(SystemColors.ControlLight), r2, sf);

    ?

    ??????? }

    ?

    ??????? protected? void Mdi_OnResize ( Object s ,? System.EventArgs e )

    ??????? {

    ???????????

    ??????????? Control c = (Control)s;

    ??????????? c.Invalidate();

    ??????? }

    3.?? 在InitializeComponent()或窗體的構造函數中加入這樣的代碼:

    ( C# )

    ??? this.Controls[0].Paint += new PaintEventHandler( Mdi_OnPaint ) ;

    ??? this.Controls[0].Resize += new EventHandler( Mdi_OnResize ) ;

    ??????? 注意將它加在InitializeComponent()后面或是在InitializeComponent函數中this.Controls.AddRange函數之后。

    posted @ 2006-05-10 10:01 rodney 閱讀(578) | 評論 (0)編輯 收藏
     

    昨天下班是計算機已經關機了。可今天早上一開到啟動Windows時系統一片藍屏。我用安全模式也進入不了。后來把硬盤拆下來,安裝到同事的機子上進行硬盤檢查。如果分區,壞道等。結果沒有什么問題,但為了資料的安全,我把有用的資料都copy到他機子上。把硬盤重新安裝回我的機子上。結果怎么樣。。。
    神了一點問題也沒有。真是虛驚一場呀。

    posted @ 2006-04-25 09:33 rodney 閱讀(716) | 評論 (0)編輯 收藏
     

    我用記事本打開一個以前的分頁程序。把其中的一部份代碼copy到我的現在的程序中,可是編譯器提示illegal character \12288錯誤。我按它提示的錯誤找到發生錯誤的行。我用別的變量名試了一下是可以的。難道是這個變量名輸入時用了中文的輸入法。我check一下,可是還是沒有解決。我又重新聲明了一個與這個變量名一樣的變量,把原來的注釋起來。后來發現可以了,我再把現在的注釋掉,用原來的變量,還是不行。我把它刪除掉重新寫了一遍包括空格也刪除。OK,就可以了。我想可能還是有中文的輸入字符或是空格。

    以面的問題可真是不是問題的問題,如果遇到同樣的問題的朋友看看是否也是犯了同樣的錯。

    最后發現是一個中文的空格,我在刪除該變量時發現有一個空格的距離較大。

    posted @ 2006-04-21 09:37 rodney 閱讀(1032) | 評論 (0)編輯 收藏
     

    因我的機子內存才512M要運行JBuilder2006,還要運行oracle9i時速度很慢,所以我先把oracle的幾個服務關了。后來我要使用oracle是一直連接不上,提示“沒有TNS監聽”。我一查看服務,果然那個oracleOraHome90TNSListener沒有啟動,我一接點擊啟動,可還是提示那句沒有TNS監聽。這是為什么呢?lt;br />第一種可能是否把計算機名改了。如果是就按下面的步驟做?lt;br />把安裝目錄下的listener.ora打開察看。如:d:\oracle\ora90\network\admin\listener.ora.
    打開該配置文件后發現如下一段配置信息:
    LISTENER?=
    ??(DESCRIPTION_LIST?=
    ????(DESCRIPTION?=
    ??????(ADDRESS_LIST?=
    ????????(ADDRESS?=?(PROTOCOL?=?IPC)(KEY?=?EXTPROC0))
    ??????)
    ??????(ADDRESS_LIST?=
    ????????(ADDRESS?=?(PROTOCOL?=?TCP)(HOST?=?local)(PORT?=?1521))
    ??????)
    ????)
    ??)
    看到這一行HOST=local這個是計算機名字,這個名字要與現在的計算機名對應。如果不知道自己的計算機名是什么可以到“我的電腦”的屬性中有一個“網絡標識”的tab?你在完整的計算機名稱后面看到的就是你的計算機名了?lt;br />以下內容轉載http://www3.ccw.com.cn/club/essence/200202/8252.htm版權歸原作?
    近來,瀏覽BBS時,常看到“急急急!如何啟動OMS?”的字眼,就針對以上這類問題,我有些經驗想和大家共同分享?lt;br />能否正常啟動OEM或OMS關鍵有以下兩點:
    ????第一.Oracle的系統服務是否開啟;
    ????第二.登錄時用的用戶名和口令是否正確?lt;br />
    ????那么先針對第一點談談Oracle的系統服務。在完全安裝的情況下,Oracle的系統服務共?1項:
    ????1.Oracle OLAP 9.0.1.0.1
    ????2.Oracle OLAP Agent
    ????3.OracleOraHome90Agent
    ????4.OracleOraHome90ClientCache
    ????5.OracleOraHome90HTTPServer
    ????6.OracleOraHome90ManagementServer(0.5M)
    ????7.OracleOraHome90PagingServer
    ????8.OracleOraHome90SNMPPeerEncapsulator
    ????9.OracleOraHome90SNMPPeerMasterAgent
    ????10.OracleOraHome90TNSListener(5.2M)
    ????11.OracleServiceORACLE(70M)
    ????????(注:OraHome90是可以在安裝時改變的Oracle的主目錄名稱,是安裝時的默認?

    ????其中最重要的服務有3個,分別是OracleOraHome90ManagementServer、OracleOraHome90TNSListener?lt;br />OracleServiceORACLE。下面就來看一下有哪些啟動錯誤與它們有關?lt;br />
    ????1.Oracle系統提示:Ora-12541:TNS:沒有監聽器;
    ????2.操作系統提示:在本地計算機無法啟動OMS服務
    ?????????????????????錯誤?053:服務并未及時響應來控制請求附帶?lt;br />????以上兩種錯誤提示大都是由OracleOraHome90TNSListener監聽服務引起的?lt;br />解決方法:控制面?>管理工具->服務->右鍵單擊“OracleOraHome90TNSListener”,再單擊“啟動”?lt;br />
    ????3.Oracle系統提示:Ora-12500:TNS:監聽程序無法啟動專用服務器進程;
    ????該錯誤是由OracleServiceORACLE專用服務器進程引起的?lt;br />解決方法:控制面?>管理工具->服務->右鍵單擊“OracleServiceORACLE”,再單擊“啟動”?lt;br />
    ????4.Oracle系統提示:VTK-1000:無法連接到Management Server?lt;br />???????????????????????請驗證您已輸入Oracle Management Server的正確主機名和狀態?lt;br />????該錯誤引起的原因有兩種,一是OracleOraHome90ManagementServer還沒啟動;二是沒有輸入主機名?lt;br />解決方法:控制面?>管理工具->服務->右鍵單擊“OracleOraHome90ManagementServer”,再單擊“啟動?
    或是輸入您這臺計算機的完整名稱?lt;br />小結:這三個服務的啟動或關閉還有先后的順序。一般來講,啟動時必須先啟動OracleOraHome90TNSListener啟動OracleOraHome90ManagementServer或OracleServiceORACLE,在啟動OracleOraHome90ManagementServer時,同時也啟動了OracleServiceORACLE。而關閉時必須先關閉OracleOraHome90ManagementServer再關閉OracleOraHome90TNSListener或OracleServiceORACLE,關閉OracleOraHome90ManagementServer時,若有提示輸入用戶名和口令,請輸入sysman的用戶名和口令,以確保成功的執行。有些其他提示如:資源已被占用,I/O重復,端口已被使用等等之類的話,那最好與系統管理員聯系,再尋求解決辦法?lt;br />

    ?

    posted @ 2006-04-20 08:52 rodney 閱讀(1037) | 評論 (1)編輯 收藏
     

    type Status report

    message /zz3in1/SrvTest

    description The requested resource (/zz3in1/SrvTest) is not available.
    這是為什呢?
    用過了../../SrvTest 這個是不行的。././SrvTest這樣可以。還有./SrvTest也可以。

    posted @ 2006-04-17 17:01 rodney 閱讀(363) | 評論 (0)編輯 收藏
     
    用document.getElementById("01").innerHTML/innerText都可以。如:<tr><td id="01">Hello</td></tr>要把Hello取出來就可以用document.getElementById("01").innerHTML/innerText。
    但是用innerHTML與用innerText有什么區別嗎?用innerHTML會把這個標記中的所有HTML標記與值取出來。innerText只會取最后的值。
    posted @ 2006-04-14 12:49 rodney 閱讀(501) | 評論 (0)編輯 收藏
     
    如果你在安裝oracle8i時,系統會自己給你安裝一個JDK1.1的或1.2的。然后你安裝JDK1.5后,在系統環境中設置了JAVA_HOME是JDK1.5的,path中也設置了javaroot\JDK1.5\bin可是你怎么樣也不能用JDK1.5中的命令。C:\Documents and Settings\Administrator>java
    Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'
    has value '1.1', but '1.2' is required.
    改注冊表HKEY_LOCAL_MACHINE???中的SOFTWARE--JavaSoft--Java Runtime Environment--CurrentVersion的值改成了1.5
    系統會提示你:C:\Documents and Settings\Administrator>java
    Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'
    has value '1.5', but '1.2' is required.這是為什么呢?因你的系統中安裝了舊的版本JDK,而且有程序程序有使用到它。這時你只要在當前的用戶系統環境下設置一個JAVA_HOME(可以不要)并且在系統環境的path的最前面加上javaroot\jdk1.5\bin。這樣就OK了。你可以把DOS窗口關閉再開啟。WINDOWS2K不要重啟計算機。WINDOWS98的要重啟。
    posted @ 2006-04-11 09:10 rodney 閱讀(879) | 評論 (0)編輯 收藏
     

    以下信息是轉載http://www.aaunion.net/cn/blog/more.asp?name=magicmao&id=687
    document
    文擋對象 - JavaScript腳本語言描述

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

    :頁面上元素name屬性和JavaScript引用的名稱必須一致包括大小寫

    ?? 否則會提示你一個錯誤信息 "引用的元素為空或者不是對象"

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

    ?

    對象屬性

    document.title???????????? // 設置文檔標題等價于HTML<title>標簽

    document.bgColor?????????? // 設置頁面背景色

    document.fgColor?????????? // 設置前景色(文本顏色)

    document.linkColor???????? // 未點擊過的鏈接顏色

    document.alinkColor?????? ?// 激活鏈接(焦點在此鏈接上)的顏色

    document.vlinkColor??????? // 已點擊過的鏈接顏色

    document.URL?????????????? // 設置URL屬性從而在同一窗口打開另一網頁

    document.fileCreatedDate?? // 文件建立日期,只讀屬性

    document.fileModifiedDate? // 文件修改日期,只讀屬性

    document.fileSize????????? // 文件大小,只讀屬性

    document.cookie??????????? // 設置和讀出cookie

    document.charset?????????? // 設置字符集 簡體中文:gb2312

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

    對象方法

    document.write()????????????????? // 動態向頁面寫入內容

    document.createElement(Tag)?????? // 創建一個html標簽對象

    document.getElementById(ID)?????? // 獲得指定ID值的對象

    document.getElementsByName(Name)? // 獲得指定Name值的對象

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

    ?

    images 集合(頁面中的圖象)

    ?

    a) 通過集合引用

    document.images???????????? // 對應頁面上的<img>標簽

    document.images.length????? // 對應頁面上<img>標簽的個數

    document.images[0]???????? ?// 1<img>標簽

    document.images[i]???????? ?// i-1<img>標簽

    ?

    b) 通過nane屬性直接引用

    <img name="oImage">

    document.images.oImage????? //document.images.name 屬性

    ?

    c) 引用圖片的src屬性

    document.images.oImage.src? //document.images.name 屬性.src

    ?

    d) 創建一個圖象

    var oImage

    oImage = new Image()

    document.images.oImage.src="/1.jpg"

    // 同時在頁面上建立一個<img>標簽與之對應就可以顯示

    ?

    <html>

    <img name=oImage>

    <script language="javascript">

    ?? var oImage

    ?? oImage = new Image()

    ?? document.images.oImage.src="/1.jpg"

    </script>

    </html>

    ?

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

    ?

    forms 集合(頁面中的表單)

    ?

    a) 通過集合引用

    document.forms???????????????? // 對應頁面上的<form>標簽

    document.forms.length????????? // 對應頁面上<form>標簽的個數

    document.forms[0]????????????? // 1<form>標簽

    document.forms[i]????????????? // i-1<form>標簽

    document.forms[i].length????? ?// i-1<form>中的控件數

    document.forms[i].elements[j]? // i-1<form>中第j-1個控件

    ?

    b) 通過標簽name屬性直接引用

    <form name="Myform"><input name="myctrl"></form>

    document.Myform.myctrl??????? ?//document. 表單名.控件名

    ?

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

    <html>

    <!--Text 控件相關Script-->

    <form name="Myform">

    <input type="text" name="oText">

    <input type="password" name="oPswd">

    <form>

    <script language="javascript">

    // 獲取文本密碼框的值

    document.write(document.Myform.oText.value)

    document.write(document.Myform.oPswd.value)

    </script>

    </html>

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

    <html>

    <!--Select 控件相關Script-->

    <form name="Myform">

    <select name="oSelect">

    <option value="1">1</option>

    <option value="2">2</option>

    <option value="3">3</option>

    </select>

    </form>

    ?

    <script language="javascript">

    ?? // 遍歷select控件的option

    ?? var length

    ?? length=document.Myform.oSelect.length

    ?? for(i=0;i<length;i++)

    ?? document.write(document.Myform.oSelect[i].value)

    </script>

    ?

    <script language="javascript">

    ?? // 遍歷option項并且判斷某個option是否被選中

    ?? for(i=0;i<document.Myform.oSelect.length;i++){

    ?? if(document.Myform.oSelect[i].selected!=true)

    ? ? document.write(document.Myform.oSelect[i].value)

    ?? else

    ?? document.write("<font color=red>"+document.Myform.oSelect[i].value+"</font>")??

    ?? }

    </script>

    ?

    <script language="javascript">

    ?? // 根據SelectedIndex打印出選中的option

    ?? //(0 document.Myform.oSelect.length-1)

    ?? i=document.Myform.oSelect.selectedIndex

    ?? document.write(document.Myform.oSelect[i].value)

    </script>

    ?

    <script language="javascript">

    ?? // 動態增加select控件的option

    ?? var oOption = document.createElement("OPTION");

    ?? oOption.text="4";

    ?? oOption.value="4";

    ?? document.Myform.oSelect.add(oOption);

    </script>

    <html>

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

    <Div id="oDiv">Text</Div>

    document.all.oDiv????????????????????? ?// 引用圖層oDiv

    document.all.oDiv.style????????????????

    document.all.oDiv.style.display=""????? // 圖層設置為可視

    document.all.oDiv.style.display="none"? // 圖層設置為隱藏

    /*document.all 表示document中所有對象的集合

    只有ie支持此屬性,因此也用來判斷瀏覽器的種類*/

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

    posted @ 2006-04-10 14:07 rodney 閱讀(7498) | 評論 (1)編輯 收藏
     
    我寫了一個測試oracle8.1的連接程序。用thin的方式連接。URL:jdbc:oracle:thin:@127.0.0.1:1521:orc;這個URL是正確的。我在thin與@中間少寫一個冒號。這是一個很低級的錯誤,以后要小心呀。
    posted @ 2006-04-05 12:02 rodney 閱讀(378) | 評論 (0)編輯 收藏
     
    如果下面的連接有出現class沒有找到的異常,有可能是沒有加裁到驅動程序,還有一種是驅動不對。
    1、Oracle8/8i/9i數據庫(thin模式)
    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
    String url="jdbc:oracle:thin:@localhost:1521:rcl"; //orcl為數據庫的SID
    String user="test";
    String password="test";
    Connection conn= DriverManager.getConnection(url,user,password);

    2、DB2數據庫

    Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
    String url="jdbc:db2://localhost:5000/sample"; //sample為你的數據庫名
    String user="admin";
    String password="";
    Connection conn= DriverManager.getConnection(url,user,password);

    3、Sql Server7.0/2000數據庫

    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
    String url="jdbc:microsoft:sqlserver://lin56:1433;DatabaseName=pubs";
    //mydb為數據庫
    String user="sa";
    String password="";
    Connection conn= DriverManager.getConnection(url,user,password);

    4、Sybase數據庫

    Class.forName("com.sybase.jdbc.SybDriver").newInstance();
    String url =" jdbcybase:Tds:localhost:5007/myDB";//myDB為你的數據庫名
    Properties sysProps = System.getProperties();
    SysProps.put("user","userid");
    SysProps.put("password","user_password");
    Connection conn= DriverManager.getConnection(url, SysProps);
    5、Informix數據庫


    Class.forName("com.informix.jdbc.IfxDriver").newInstance();
    String url = "jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;
    user=testuser;password=testpassword"; //myDB為數據庫名
    Connection conn= DriverManager.getConnection(url);

    6、MySQL數據庫

    Class.forName("org.gjt.mm.mysql.Driver").newInstance();
    String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
    //myDB為數據庫名
    Connection conn= DriverManager.getConnection(url);

    7、PostgreSQL數據庫

    Class.forName("org.postgresql.Driver").newInstance();
    String url ="jdbcostgresql://localhost/myDB" //myDB為數據庫名
    String user="myuser";
    String password="mypassword";
    Connection conn= DriverManager.getConnection(url,user,password);

    8、access數據庫直連用ODBC的
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
    String url="jdbcdbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ="+application.getRealPath("/Data/ReportDemo.mdb");
    Connection conn = DriverManager.getConnection(url,"","");
    Statement stmtNew=conn.createStatement() ;

    二、JDBC連接MySql方式
      下面是使用JDBC連接MySql的一個小的教程

    1、查找驅動程序
      MySQL目前提供的java驅動程序為Connection/J,可以從MySQL官方網站下載,并找到mysql-connector-java-3.0.15-ga-bin.jar文件,此驅動程序為純java驅動程序,不需做其他配置。

    2、動態指定classpath
      如果需要執行時動態指定classpath,就在執行時采用-cp方式。否則將上面的.jar文件加入到classpath環境變量中。

    3、加載驅動程序

    try{
     Class.forName(com.mysql.jdbc.Driver);
     System.out.println(Success loading Mysql Driver!);
    }catch(Exception e)
    {
     System.out.println(Error loading Mysql Driver!);
     e.printStackTrace();
    }
    


    4、設置連接的url
    jdbc:mysql://localhost/databasename[?pa=va][&pa=va]

    三、以下列出了在使用JDBC來連接Oracle數據庫時可以使用的一些技巧
    1、在客戶端軟件開發中使用Thin驅動程序
      在開發Java軟件方面,Oracle的數據庫提供了四種類型的驅動程序,二種用于應用軟件、applets、servlets等客戶端軟件,另外二種用于數據庫中的Java存儲過程等服務器端軟件。在客戶機端軟件的開發中,我們可以選擇OCI驅動程序或Thin驅動程序。OCI驅動程序利用Java本地化接口(JNI),通過Oracle客戶端軟件與數據庫進行通訊。Thin驅動程序是純Java驅動程序,它直接與數據庫進行通訊。為了獲得最高的性能,Oracle建議在客戶端軟件的開發中使用OCI驅動程序,這似乎是正確的。但我建議使用Thin驅動程序,因為通過多次測試發現,在通常情況下, Thin驅動程序的性能都超過了OCI驅動程序。

    2、關閉自動提交功能,提高系統性能
       在第一次建立與數據庫的連接時,在缺省情況下,連接是在自動提交模式下的。為了獲得更好的性能,可以通過調用帶布爾值false參數的Connection類的setAutoCommit()方法關閉自動提交功能,如下所示:

    conn.setAutoCommit(false);

      值得注意的是,一旦關閉了自動提交功能,我們就需要通過調用Connection類的commit()和rollback()方法來人工的方式對事務進行管理。

    3、在動態SQL或有時間限制的命令中使用Statement對象
      在執行SQL命令時,我們有二種選擇:可以使用PreparedStatement對象,也可以使用Statement對象。無論多少次地使用同一個 SQL命令,PreparedStatement都只對它解析和編譯一次。當使用Statement對象時,每次執行一個SQL命令時,都會對它進行解析和編譯。這可能會使你認為,使用PreparedStatement對象比使用Statement對象的速度更快。然而,我進行的測試表明,在客戶端軟件中,情況并非如此。因此,在有時間限制的SQL操作中,除非成批地處理SQL命令,我們應當考慮使用Statement對象。

       此外,使用Statement對象也使得編寫動態SQL命令更加簡單,因為我們可以將字符串連接在一起,建立一個有效的SQL命令。因此,我認為,Statement對象可以使動態SQL命令的創建和執行變得更加簡單。

    4、利用helper函數對動態SQL命令進行格式化
      在創建使用Statement對象執行的動態SQL命令時,我們需要處理一些格式化方面的問題。例如,如果我們想創建一個將名字O'Reilly插入表中的SQL命令,則必須使用二個相連的“''”號替換O'Reilly中的“'”號。完成這些工作的最好的方法是創建一個完成替換操作的helper方法,然后在連接字符串心服用公式表達一個SQL命令時,使用創建的helper方法。與此類似的是,我們可以讓helper方法接受一個Date型的值,然后讓它輸出基于Oracle的to_date()函數的字符串表達式。

    5、利用PreparedStatement對象提高數據庫的總體效率
      在使用PreparedStatement對象執行SQL命令時,命令被數據庫進行解析和編譯,然后被放到命令緩沖區。然后,每當執行同一個 PreparedStatement對象時,它就會被再解析一次,但不會被再次編譯。在緩沖區中可以發現預編譯的命令,并且可以重新使用。在有大量用戶的企業級應用軟件中,經常會重復執行相同的SQL命令,使用PreparedStatement對象帶來的編譯次數的減少能夠提高數據庫的總體性能。如果不是在客戶端創建、預備、執行PreparedStatement任務需要的時間長于Statement任務,我會建議在除動態SQL命令之外的所有情況下使用PreparedStatement對象。

    6、在成批處理重復的插入或更新操作中使用PreparedStatement對象
      如果成批地處理插入和更新操作,就能夠顯著地減少它們所需要的時間。Oracle提供的Statement和 CallableStatement并不真正地支持批處理,只有PreparedStatement對象才真正地支持批處理。我們可以使用 addBatch()和executeBatch()方法選擇標準的JDBC批處理,或者通過利用PreparedStatement對象的 setExecuteBatch()方法和標準的executeUpdate()方法選擇速度更快的Oracle專有的方法。要使用Oracle專有的批處理機制,可以以如下所示的方式調用setExecuteBatch():

    PreparedStatement pstmt3D null;
    try {
     ((OraclePreparedStatement)pstmt).setExecuteBatch(30);
     ...
     pstmt.executeUpdate();
    }
        調用setExecuteBatch()時指定的值是一個上限,當達到該值時,就會自動地引發SQL命令執行,標準的executeUpdate()方法就會被作為批處理送到數據庫中。我們可以通過調用PreparedStatement類的sendBatch()方法隨時傳輸批處理任務。
     
    7、使用Oracle locator方法插入、更新大對象(LOB)
      Oracle的PreparedStatement類不完全支持BLOB和CLOB等大對象的處理,尤其是Thin驅動程序不支持利用 PreparedStatement對象的setObject()和setBinaryStream()方法設置BLOB的值,也不支持利用 setCharacterStream()方法設置CLOB的值。只有locator本身中的方法才能夠從數據庫中獲取LOB類型的值。可以使用 PreparedStatement對象插入或更新LOB,但需要使用locator才能獲取LOB的值。由于存在這二個問題,因此,我建議使用 locator的方法來插入、更新或獲取LOB的值。

    8、使用SQL92語法調用存儲過程
      在調用存儲過程時,我們可以使用SQL92或Oracle PL/SQL,由于使用Oracle PL/SQL并沒有什么實際的好處,而且會給以后維護你的應用程序的開發人員帶來麻煩,因此,我建議在調用存儲過程時使用SQL92。

    9、使用Object SQL將對象模式轉移到數據庫中
      既然可以將Oracle的數據庫作為一種面向對象的數據庫來使用,就可以考慮將應用程序中的面向對象模式轉到數據庫中。目前的方法是創建Java bean作為偽裝的數據庫對象,將它們的屬性映射到關系表中,然后在這些bean中添加方法。盡管這樣作在Java中沒有什么問題,但由于操作都是在數據庫之外進行的,因此其他訪問數據庫的應用軟件無法利用對象模式。如果利用Oracle的面向對象的技術,可以通過創建一個新的數據庫對象類型在數據庫中模仿其數據和操作,然后使用JPublisher等工具生成自己的Java bean類。如果使用這種方式,不但Java應用程序可以使用應用軟件的對象模式,其他需要共享你的應用中的數據和操作的應用軟件也可以使用應用軟件中的對象模式。

    10、利用SQL完成數據庫內的操作
      我要向大家介紹的最重要的經驗是充分利用SQL的面向集合的方法來解決數據庫處理需求,而不是使用Java等過程化的編程語言。

      如果編程人員要在一個表中查找許多行,結果中的每個行都會查找其他表中的數據,最后,編程人員創建了獨立的UPDATE命令來成批地更新第一個表中的數據。與此類似的任務可以通過在set子句中使用多列子查詢而在一個UPDATE命令中完成。當能夠在單一的SQL命令中完成任務,何必要讓數據在網上流來流去的?我建議用戶認真學習如何最大限度地發揮SQL的功能。

      ?

    ORACLE 數據庫備份技術
      ORACLE數據庫是一種大型關系型的數據庫,可以存貯達到存貯TB的數據,那么如何保證這些數據的安全尤其至關重要,我們從1991年開始使用 ORACLE數據庫,通過這些年的使用,我們制定了一整套的ORACLE數據庫的備份制度。現在把我們的備份制度介紹給大家,供大家參考。

    1.根據實際需要決定數據庫的運行方式
    ORACLE數據庫有兩種運行方式:一是歸檔方式(ARCHIVELOG),歸檔方式的目的是當數據庫發生故障時最大限度恢復所有已提交的事物;二是不歸檔方式(NOARCHIVELOG),恢復數據庫到最近的回收點。我們根據數據庫的高可用性和用戶可承受丟失的工作量的多少,把我們正式運行的數據庫采用為歸檔方式;那些正在開發和調試的數據庫采用不歸檔方式。

    2如何改變數據庫的運行方式
    2.1在創建數據庫時設置數據庫的運行的方式
      在創建數據庫時,作為創建數據庫的一部分,就決定了數據庫初始的存檔方式。一般情況下為NOARCHIVELOG方式。當數據庫創建好以后,根據我們的需要把需要運行在歸檔方式的數據庫改成ARCHIVELOG方式。
      
    2.2改變不歸檔方式為為歸檔方式
      關閉數據庫,備份已有的數據
      改變數據庫的運行方式是對數據庫的重要改動,所以要對數據庫做備份,對可能出現的問題作出保護。
      啟動Instance ,Mount數據庫但不打開數據庫,來改變歸檔方式

      sqldba lmode=y(svrmgrl)
      sqldba>connect internal
      sqldba>startup mount
      sqldba>alter database archivelog;

      使能自動存檔
      在初始化文件init*.ora(一般放ORACLE根目錄的下層目錄dbs下)加參數:
      log_archive_start=true
      指定存檔的重做登錄文件名和存放的位置
      同樣是在初始化文件init*.ora中加入下面的參數:
      log_archive_format=%S.arc
      log_archive_dest=/arch12/arch (arch12 是日志文件存放的目錄)
      關閉數據庫,重新啟動數據庫,歸檔方式轉換完成。

    3回收制度
    3.1根據數據庫的運行方式和可承受丟失的工作量來決定數據庫的回收制度對于不歸檔方式,我們用的是ORACLE數據庫的邏輯備份Export ,回收的制度是:一個月作一次全備份(x01.dmp),一周作一次累積備份(c*.dmp),一天一次增量備份(I*.dmp),具體的是星期一到星期五作增量備份,星期六做累積備份或全備份,每次做完備份后自動傳到其它的機器上存儲。這些備份都是自動執行的,后面給出程序文本。

      對于歸檔方式,我們用的是ORCALE的物理備份:當數據庫創建好以后,做一次物理上的全備份,平時在不關閉數據庫的前提下,一個星期對經常改變的數據文件做聯機的數據庫數據文件的物理備份;當數據庫的結構發生改變,如:增加表空間,加數據文件等,如允許關機,正常關閉數據庫,重新做數據庫全備份,否則,備份控制文件,備份數據文件照常。聯機的日志文件我們是寫在陣列上的,不用鏡象和備份。

    3.2回收的方法
    3.2.1不歸檔方式
       我們拿曙光AIX操作系統為例,來講解以下如何做自動備份:
    ---- a.首先建UNIX用戶 demo/demo
    ---- b.拷貝oracle用戶下的 .profile 到 demo 用戶下,以保證 demo 用戶可以用 Export命令
    ---- c.用root用戶登錄,編輯 /var/adm/cron/cron.allow 加入用戶名demo,這樣demo用戶就有權自動執行數據庫備份的shell程序;
    ---- d.創建數據庫備份程序,放到本用戶的下層目錄bin下,并且這些文件要有可執行權文件zlbf1:(增量備份1,星期一執行的程序)

    . /u11/demo/.profile 
    exp system/manager inctype=INCREMENTAL file=i01.dmp 
    ftp -n< < ! 
    open 10.10.10.40 
    user demo demo 
    binary 
    prompt 
    cd backup40 
    put i01.dmp 
    close 
    bye 
    ! 
    
    文件zlbf2:(增量備份2, 星期二執行的程序) 
    
    . /u11/demo/.profile 
    exp system/manager inctype=INCREMENTAL file=i02.dmp 
    ftp -n< < ! 
    
    open 10.10.10.40 
    user demo demo 
    binary 
    prompt 
    cd backup40 
    put i02.dmp 
    close 
    bye 
    ! 
    
    文件zlbf3:(增量備份3, 星期三執行的程序) 
    . /u11/demo/.profile 
    exp system/manager inctype=INCREMENTAL file=i03.dmp 
    ftp -n< < ! 
    open 10.10.10.40 
    user demo demo 
    binary 
    prompt 
    cd backup40 
    put i03.dmp 
    close 
    bye 
    ! 
    文件zlbf4:(增量備份4, 星期四執行的程序) 
    . /u11/demo/.profile 
    exp system/manager inctype=INCREMENTAL file=i04.dmp 
    ftp -n< < ! 
    open 10.10.10.40 
    user demo demo 
    binary 
    prompt 
    cd backup40 
    put i04.dmp 
    close 
    bye 
    ! 
    文件zlbf5:(增量備份5, 星期五執行的程序) 
    . /u11/demo/.profile 
    exp system/manager inctype=INCREMENTAL file=i05.dmp 
    ftp -n< < ! 
    open 10.10.10.40 
    user demo demo 
    binary 
    prompt 
    cd backup40 
    put i05.dmp 
    close 
    bye 
    ! 
    文件zlbf6:(增量備份6, 星期六執行的程序) 
    . /u11/demo/.profile 
    js=`ls c*.dmp|wc -l` 
    if test  = 0 
    then 
    exp system/manager inctype=CUMULATIVE file=c01.dmp 
    ftp -n< < ! 
    open 10.10.10.40 
    user demo demo 
    binary 
    prompt 
    cd backup40 
    put c01.dmp 
    close 
    bye 
    ! 
    fi 
    if test  = 1 
    then 
    exp system/manger inctype=CUMULATIVE file=c02.dmp 
    ftp -n< < ! 
    open 10.10.10.40 
    user demo demo 
    binary 
    prompt 
    cd backup40 
    put c02.dmp 
    close 
    bye 
    ! 
    fi 
    if test  = 2 
    then 
    exp system/maneger inctype=CUMULATIVE file=c03.dmp 
    ftp -n< < ! 
    open 10.10.10.40 
    user demo demo 
    binary 
    prompt 
    cd backup40 
    put c03.dmp 
    close 
    bye 
    ! 
    fi 
    if test  = 3 
    then 
    exp system/manager inctype=COMPLETE file=x01.dmp 
    ftp -n< < ! 
    open 10.10.10.40 
    user demo demo 
    binary 
    prompt 
    cd backup40 
    put x01.dmp 
    close 
    bye 
    ! 
    rm c*.dmp 
    fi 
    
    ---- e.在demo 用戶下建一個文件,假如叫:cron.demo,文件內容如下 
    59 22 * * 1 bin/zlbf1 
    59 22 * * 2 bin/zlbf2 
    59 22 * * 3 bin/zlbf3 
    59 22 * * 4 bin/zlbf4 
    59 22 * * 5 bin/zlbf5 
    59 22 * * 6 bin/zlbf6 
    

    ---- f.在demo用戶下執行下面的命令:
    crontab cron.demo 執行的結果放到
    /var/spool/cron/crontabs/demo文件里

    ---- g.重新啟動cron 進程,命令:kill -1 進程號
    ---- h.執行結果放在本用戶的郵件里
    ---- i.查看結果是否執行,請看:/var/adm/cron/log文件

    3.2.2歸檔方式
    ---- a. 找到要回收的數據文件、聯機重做登錄文件、控制文件和參數文件
    ---- b. 正常關閉數據庫,作一次全回收(用操作系統的TAR命令,可以寫成shell程序),然后打開數據庫供正常使用,shell程序如下:
    tar cvf /dev/rmt/ctape2 /u1/oracle/dbs/ctrl1ora7.ctl
    /u1/oracle/dbs/ctrl2ora7.ctl
    /u1/oracle/dbs/ctrl3ora7.ctl
    /u1/oracle/dbs/systora7.dbf
    /u1/oracle/dbs/rbsora7.dbf
    /u1/oracle/dbs/tempora7.dbf
    /u1/oracle/dbs/toolora7.dbf
    /u1/oracle/dbs/usrora7.dbf
    /ls1/ls1.dbf
    /u1/oracle/dbs/log1ora7.dbf
    /u1/oracle/dbs/log2ora7.dbf
    /u1/oracle/dbs/log3ora7.dbf
    ---- c. 經常作聯機的表空間和數據文件的部分回收
    首先標記聯機表空間回收的開始
    alter tablespace 表空間名 begin backup;
    用操作系統命令備份數據文件
    最后標記聯機的表空間回收結束
    alter tablespace 表空間名 end backup
    ---- 多個表空間可以一起做標記,備份做標記的所有數據文件后,一起標記結束。
    ---- d. 當數據庫結構發生改變后,要對它的控制文件做回收
    sqldba >alter database backup
    controlfile to ’文件名’ reuse;  ?

    數據庫設計中的14個技巧
    1. 原始單據與實體之間的關系
      可以是一對一、一對多、多對多的關系。在一般情況下,它們是一對一的關系:即一張原始單據對應且只對應一個實體。在特殊情況下,它們可能是一對多或多對一的關系,即一張原始單證對應多個實體,或多張原始單證對應一個實體。這里的實體可以理解為基本表。明確這種對應關系后,對我們設計錄入界面大有好處。
      〖例1〗:一份員工履歷資料,在人力資源信息系統中,就對應三個基本表:員工基本情況表、社會關系表、工作簡歷表。這就是“一張原始單證對應多個實體”的典型例子。

    2. 主鍵與外鍵
      一般而言,一個實體不能既無主鍵又無外鍵。在E—R 圖中, 處于葉子部位的實體, 可以定義主鍵,也可以不定義主鍵(因為它無子孫), 但必須要有外鍵(因為它有父親)。
      主鍵與外鍵的設計,在全局數據庫的設計中,占有重要地位。當全局數據庫的設計完成以后,有個美國數據庫設計專家說:“鍵,到處都是鍵,除了鍵之外,什么也沒有”,這就是他的數據庫設計經驗之談,也反映了他對信息系統核心(數據模型)的高度抽象思想。因為:主鍵是實體的高度抽象,主鍵與外鍵的配對,表示實體之間的連接。

    3. 基本表的性質
      基本表與中間表、臨時表不同,因為它具有如下四個特性:
      (1) 原子性。基本表中的字段是不可再分解的。
      (2) 原始性。基本表中的記錄是原始數據(基礎數據)的記錄。
      (3) 演繹性。由基本表與代碼表中的數據,可以派生出所有的輸出數據。
      (4) 穩定性。基本表的結構是相對穩定的,表中的記錄是要長期保存的。
       理解基本表的性質后,在設計數據庫時,就能將基本表與中間表、臨時表區分開來。

    4. 范式標準
      基本表及其字段之間的關系, 應盡量滿足第三范式。但是,滿足第三范式的數據庫設計,往往不是最好的設計。為了提高數據庫的運行效率,常常需要降低范式標準:適當增加冗余,達到以空間換時間的目的。
      〖例2〗:有一張存放商品的基本表,如表1所示。“金額”這個字段的存在,表明該表的設計不滿足第三范式,因為“金額”可以由“單價”乘以“數量”得到,說明“金額”是冗余字段。但是,增加“金額”這個冗余字段,可以提高查詢統計的速度,這就是以空間換時間的作法。
      在Rose 2002中,規定列有兩種類型:數據列和計算列。“金額”這樣的列被稱為“計算列”,而“單價”和“數量”這樣的列被稱為“數據列”。
      表1 商品表的表結構
      商品名稱商品型號單價數量金額
      電視機 29吋 2,500 40 100,000

    5. 通俗地理解三個范式
      通俗地理解三個范式,對于數據庫設計大有好處。在數據庫設計中,為了更好地應用三個范式,就必須通俗地理解三個范式(通俗地理解是夠用的理解,并不是最科學最準確的理解):
      第一范式:1NF是對屬性的原子性約束,要求屬性具有原子性,不可再分解;
      第二范式:2NF是對記錄的惟一性約束,要求記錄有惟一標識,即實體的惟一性;
      第三范式:3NF是對字段冗余性的約束,即任何字段不能由其他字段派生出來,它要求字段沒有冗余。
      沒有冗余的數據庫設計可以做到。但是,沒有冗余的數據庫未必是最好的數據庫,有時為了提高運行效率,就必須降低范式標準,適當保留冗余數據。具體做法是:在概念數據模型設計時遵守第三范式,降低范式標準的工作放到物理數據模型設計時考慮。降低范式就是增加字段,允許冗余。

    6. 要善于識別與正確處理多對多的關系
      若兩個實體之間存在多對多的關系,則應消除這種關系。消除的辦法是,在兩者之間增加第三個實體。這樣,原來一個多對多的關系,現在變為兩個一對多的關系。要將原來兩個實體的屬性合理地分配到三個實體中去。這里的第三個實體,實質上是一個較復雜的關系,它對應一張基本表。一般來講,數據庫設計工具不能識別多對多的關系,但能處理多對多的關系。
      〖例3〗:在“圖書館信息系統”中,“圖書”是一個實體,“讀者”也是一個實體。這兩個實體之間的關系,是一個典型的多對多關系:一本圖書在不同時間可以被多個讀者借閱,一個讀者又可以借多本圖書。為此,要在二者之間增加第三個實體,該實體取名為“借還書”,它的屬性為:借還時間、借還標志(0表示借書,1表示還書),另外,它還應該有兩個外鍵(“圖書”的主鍵,“讀者”的主鍵),使它能與“圖書”和 “讀者”連接。

    7. 主鍵PK的取值方法
      PK是供程序員使用的表間連接工具,可以是一無物理意義的數字串, 由程序自動加1來實現。也可以是有物理意義的字段名或字段名的組合。不過前者比后者好。當PK是字段名的組合時,建議字段的個數不要太多,多了不但索引占用空間大,而且速度也慢。

    8. 正確認識數據冗余
      主鍵與外鍵在多表中的重復出現, 不屬于數據冗余,這個概念必須清楚,事實上有許多人還不清楚。非鍵字段的重復出現, 才是數據冗余!而且是一種低級冗余,即重復性的冗余。高級冗余不是字段的重復出現,而是字段的派生出現。
      〖例4〗:商品中的“單價、數量、金額”三個字段,“金額”就是由“單價”乘以“數量”派生出來的,它就是冗余,而且是一種高級冗余。冗余的目的是為了提高處理速度。只有低級冗余才會增加數據的不一致性,因為同一數據,可能從不同時間、地點、角色上多次錄入。因此,我們提倡高級冗余(派生性冗余),反對低級冗余(重復性冗余)。

    9. E--R圖沒有標準答案
      信息系統的E--R圖沒有標準答案,因為它的設計與畫法不是惟一的,只要它覆蓋了系統需求的業務范圍和功能內容,就是可行的。反之要修改E--R圖。盡管它沒有惟一的標準答案,并不意味著可以隨意設計。好的E—R圖的標準是:結構清晰、關聯簡潔、實體個數適中、屬性分配合理、沒有低級冗余。

    10. 視圖技術在數據庫設計中很有用
      與基本表、代碼表、中間表不同,視圖是一種虛表,它依賴數據源的實表而存在。視圖是供程序員使用數據庫的一個窗口,是基表數據綜合的一種形式, 是數據處理的一種方法,是用戶數據保密的一種手段。為了進行復雜處理、提高運算速度和節省存儲空間, 視圖的定義深度一般不得超過三層。若三層視圖仍不夠用, 則應在視圖上定義臨時表, 在臨時表上再定義視圖。這樣反復交迭定義, 視圖的深度就不受限制了。
      對于某些與國家政治、經濟、技術、軍事和安全利益有關的信息系統,視圖的作用更加重要。這些系統的基本表完成物理設計之后,立即在基本表上建立第一層視圖,這層視圖的個數和結構,與基本表的個數和結構是完全相同。并且規定,所有的程序員,一律只準在視圖上操作。只有數據庫管理員,帶著多個人員共同掌握的“安全鑰匙”,才能直接在基本表上操作。請讀者想想:這是為什么?

    11. 中間表、報表和臨時表
      中間表是存放統計數據的表,它是為數據倉庫、輸出報表或查詢結果而設計的,有時它沒有主鍵與外鍵(數據倉庫除外)。臨時表是程序員個人設計的,存放臨時記錄,為個人所用。基表和中間表由DBA維護,臨時表由程序員自己用程序自動維護。

    12. 完整性約束表現在三個方面
      域的完整性:用Check來實現約束,在數據庫設計工具中,對字段的取值范圍進行定義時,有一個Check按鈕,通過它定義字段的值城。
      參照完整性:用PK、FK、表級觸發器來實現。
      用戶定義完整性:它是一些業務規則,用存儲過程和觸發器來實現。

    13. 防止數據庫設計打補丁的方法是“三少原則”
      (1) 一個數據庫中表的個數越少越好。只有表的個數少了,才能說明系統的E--R圖少而精,去掉了重復的多余的實體,形成了對客觀世界的高度抽象,進行了系統的數據集成,防止了打補丁式的設計;
      (2) 一個表中組合主鍵的字段個數越少越好。因為主鍵的作用,一是建主鍵索引,二是做為子表的外鍵,所以組合主鍵的字段個數少了,不僅節省了運行時間,而且節省了索引存儲空間;
      (3) 一個表中的字段個數越少越好。只有字段的個數少了,才能說明在系統中不存在數據重復,且很少有數據冗余,更重要的是督促讀者學會“列變行”,這樣就防止了將子表中的字段拉入到主表中去,在主表中留下許多空余的字段。所謂“列變行”,就是將主表中的一部分內容拉出去,另外單獨建一個子表。這個方法很簡單,有的人就是不習慣、不采納、不執行。
      數據庫設計的實用原則是:在數據冗余和處理速度之間找到合適的平衡點。“三少”是一個整體概念,綜合觀點,不能孤立某一個原則。該原則是相對的,不是絕對的。“三多”原則肯定是錯誤的。試想:若覆蓋系統同樣的功能,一百個實體(共一千個屬性) 的E--R圖,肯定比二百個實體(共二千個屬性) 的E--R圖,要好得多。
      提倡“三少”原則,是叫讀者學會利用數據庫設計技術進行系統的數據集成。數據集成的步驟是將文件系統集成為應用數據庫,將應用數據庫集成為主題數據庫,將主題數據庫集成為全局綜合數據庫。集成的程度越高,數據共享性就越強,信息孤島現象就越少,整個企業信息系統的全局E—R圖中實體的個數、主鍵的個數、屬性的個數就會越少。
      提倡“三少”原則的目的,是防止讀者利用打補丁技術,不斷地對數據庫進行增刪改,使企業數據庫變成了隨意設計數據庫表的“垃圾堆”,或數據庫表的“大雜院”,最后造成數據庫中的基本表、代碼表、中間表、臨時表雜亂無章,不計其數,導致企事業單位的信息系統無法維護而癱瘓。
      “三多”原則任何人都可以做到,該原則是“打補丁方法”設計數據庫的歪理學說。“三少”原則是少而精的原則,它要求有較高的數據庫設計技巧與藝術,不是任何人都能做到的,因為該原則是杜絕用“打補丁方法”設計數據庫的理論依據。

    14. 提高數據庫運行效率的辦法
      在給定的系統硬件和系統軟件條件下,提高數據庫系統的運行效率的辦法是:
      (1) 在數據庫物理設計時,降低范式,增加冗余, 少用觸發器, 多用存儲過程。
      (2) 當計算非常復雜、而且記錄條數非常巨大時(例如一千萬條),復雜計算要先在數據庫外面,以文件系統方式用C++語言計算處理完成之后,最后才入庫追加到表中去。這是電信計費系統設計的經驗。
      (3) 發現某個表的記錄太多,例如超過一千萬條,則要對該表進行水平分割。水平分割的做法是,以該表主鍵PK的某個值為界線,將該表的記錄水平分割為兩個表。若發現某個表的字段太多,例如超過八十個,則垂直分割該表,將原來的一個表分解為兩個表。
      (4) 對數據庫管理系統DBMS進行系統優化,即優化各種系統參數,如緩沖區個數。
      (5) 在使用面向數據的SQL語言進行程序設計時,盡量采取優化算法。
       總之,要提高數據庫的運行效率,必須從數據庫系統級優化、數據庫設計級優化、程序實現級優化,這三個層次上同時下功夫。
      上述十四個技巧,是許多人在大量的數據庫分析與設計實踐中,逐步總結出來的。對于這些經驗的運用,讀者不能生幫硬套,死記硬背,而要消化理解,實事求是,靈活掌握。并逐步做到:在應用中發展,在發展中應用。
    特別聲明以上內容是轉至http://dev2dev.bea.com.cn/bbsdoc/20060112181.html,如果您認為該文檔的內容侵犯了您的權益,請與整理者(excelarthur.com.cn)聯系,與Dev2Dev網站無關。

    posted @ 2006-04-04 14:36 rodney 閱讀(1367) | 評論 (0)編輯 收藏
     
    在安裝完了JBuilder9時,打開JB9會彈出一個對話框講你要注冊。這時你沒有注冊號時,有一個叫JB9_Ent_KeyGen.exe的文件,這時你只要將這個文件copy to 你安裝的目錄下。double click this file,這時你只要點擊"Generate",再點擊"Save"就OK了。例如:E:\JBuilder9\jdk1.4\bin下放入copy的文件。這個文件一定要放入jdk1.4\bin下面。
    posted @ 2006-04-03 17:27 rodney 閱讀(1508) | 評論 (0)編輯 收藏
     
    如果你做過很多java程序,你可能對java集合類很熟悉,例如Vector和ArrayList。你可以創建一個集合并向其中增加元素:
    1.     List lst = new ArrayList();
    2.     lst.add(new Integer(37));

    在這個特殊的范例中,一個整型值37用于構造一個Integer封裝類對象,然后那個對象被加入到列表。

    這個簡單的范例展示集合的一個基礎-他們用于操縱一列對象,其中的每個對象是一個類或者接口類型。因此,一個ArrayList可以包含Object,String,Float以及Runnable類型的對象。集合類不能用于原始數據類型的列表,例如整型數組。

    如果你在你的程序中使用原始類型的數組,你如何操縱它們呢?這個技巧就給你展示幾個你可以使用的技術。

    第一個技術是排序。java.util.Arrays類包含一套排序和查找數組的類方法,例如:
    1.     import java.util.Arrays;
    2.     public class ArrayDemo1 {
    3.         public static void main(String args[]) {
    4.             int vec[] = {37, 47, 23, -5, 19, 56};
    5.             Arrays.sort(vec);
    6.             for (int i = 0; i < vec.length; i++) {
    7.                 System.out.println(vec[i]);
    8.             }
    9.         }
    10.     }

    這個演示程序初始化一個整數數組然后調用Arrays.sort升序排序那個數組。

    類似的,你可以在排完序的數組上進行二分法查找:
    1.     import java.util.Arrays;
    2.     public class ArrayDemo2 {
    3.         public static void main(String args[]) {
    4.             int vec[] = {-5, 19, 23, 37, 47, 56};
    5.             int slot = Arrays.binarySearch(vec, 35);
    6.             slot = -(slot + 1);
    7.             System.out.println("insertion point = " + slot);
    8.         }
    9.     }

    這個程序有個微妙的概念,如果二分法查找失敗它將返回:

        -(insertion point) - 1

    這個演示程序以參數35調用查找方法,而那個參數在數組中不存在,方法返回值-4,如果這個值加一再取其負數就得到3,這就是35應該被插入到數組中的位置,換言之,值-5, 19和23在數組中占據的位置是0,1和2。因此值35應該在索引3的位置,而37, 47以及56順延。搜索方法并不進行實際的插入操作而只是指出應該在何處插入。

    除了排序和查找,我們還可以對原始類型數組做什么?另一個有用的技術是將一個原始數組轉換為等價的對象類型數組。每個對應元素使用它們的封裝器類,例如在封裝數組中,37成為Integer(37)。
    1.     import java.util.Arrays;
    2.     import java.lang.reflect.Array;
    3.     
    4.     public class ArrayDemo3 {
    5.     
    6.         // if input is a single-dimension primitive array,
    7.         // return a new array consisting of wrapped elements,
    8.         // else just return input argument
    9.     
    10.         public static Object toArray(Object vec) {
    11.     
    12.             // if null, return
    13.     
    14.             if (vec == null) {
    15.                 return vec;
    16.             }
    17.     
    18.             // if not an array or elements not primitive, return
    19.     
    20.             Class cls = vec.getClass();
    21.             if (!cls.isArray()) {
    22.                 return vec;
    23.             }
    24.             if (!cls.getComponentType().isPrimitive()) {
    25.                 return vec;
    26.             }
    27.     
    28.             // get array length and create Object output array
    29.     
    30.             int length = Array.getLength(vec);
    31.             Object newvec[] = new Object[length];
    32.     
    33.             // wrap and copy elements
    34.     
    35.             for (int i = 0; i < length; i++) {
    36.                 newvec[i] = Array.get(vec, i);
    37.             }
    38.     
    39.             return newvec;
    40.         }
    41.     
    42.         public static void main(String args[]) {
    43.     
    44.             // create a primitive array
    45.     
    46.             int vec[] = new int[]{1, 2, 3};
    47.     
    48.             // wrap it
    49.     
    50.             Object wrappedvec[] = (Object[])toArray(vec);
    51.     
    52.             // display result
    53.     
    54.             for (int i = 0; i < wrappedvec.length; i++) {
    55.                 System.out.println(wrappedvec[i]);
    56.             }
    57.         }
    58.     }

    方法"toArray"的參數是一個Object對象(數組可以被賦值給一個Object引用)。如果參數是null或者代表的不是原始類型數組那么這個方法簡單的返回參數值。java.lang.Class工具類用于判斷參數是否是一個數組并獲取數組的底層元素的類型。

    一旦做完這些檢查,使用java.lang.reflect.Array工具類的反射工具方法就可以獲取原始數組的長度并獲得數組的單個元素。Array.get獲得的每個元素被返回到封裝器類中,例如Integer或者Double。

    最終的范例基于前面的那個并向你展示如何在數組上使用集合特性。這假設你已經有一個對象數組。
    1.     import java.util.Arrays;
    2.     import java.util.List;
    3.     public class ArrayDemo4 {
    4.         public static void main(String args[]) {
    5.             Object vec[] = {new Integer(37), new Integer(47)};
    6.             List lst = Arrays.asList(vec);
    7.             lst.set(1, new Integer(57));
    8.             for (int i = 0; i < vec.length; i++) {
    9.                 System.out.println(vec[i]);
    10.             }
    11.         }
    12.     }

    在這個程序中,vec是一個對象數組,包含Integer(37)和Integer(47),然后Arrays.asList被調用。它返回一個集合(List接口類型),使用數組作為集合的后臺存儲。換言之,ArrayList這樣的集合類型在它內部有某種存儲類型去存儲集合元素。在這個例子中,使用的存儲類型是作為參數傳遞到Arrays.asList的數組。這意味著集合方法所做的改變會被反射到底層的數組。

    修改集合中的元素1導致底層的數組也改變,程序的輸出是:

        37
        57

    因此如果你有一個對象數組,你可以在它上面使用集合特性,數組自身作為底層存儲。

    我們也可以將集合轉換為一個對象數組,例如:

        Object vec[] = lst.toArray();

    package com.cucu.test;

    /**
    * @author http://www.linewell.com <a href=mailto:cg@linewell.com>cg@linewell.com</a>
    * @version 1.0
    */
    public class Sort {

    public void swap(int a[], int i, int j) {
    int tmp = a;
    a = a[j];
    a[j] = tmp;
    }

    public int partition(int a[], int low, int high) {
    int pivot, p_pos, i;
    p_pos = low;
    pivot = a[p_pos];
    for (i = low + 1; i <= high; i++) {
    if (a > pivot) {
    p_pos++;
    swap(a, p_pos, i);
    }
    }
    swap(a, low, p_pos);
    return p_pos;
    }

    public void quicksort(int a[], int low, int high) {
    int pivot;
    if (low < high) {
    pivot = partition(a, low, high);
    quicksort(a, low, pivot - 1);
    quicksort(a, pivot + 1, high);
    }

    }

    public static void main(String args[]) {
    int vec[] = new int[] { 37, 47, 23, -5, 19, 56 };
    int temp;
    //選擇排序法(Selection Sort)
    long begin = System.currentTimeMillis();
    for (int k = 0; k < 1000000; k++) {
    for (int i = 0; i < vec.length; i++) {
    for (int j = i; j < vec.length; j++) {
    if (vec[j] > vec) {
    temp = vec;
    vec = vec[j];
    vec[j] = temp;
    }
    }

    }
    }
    long end = System.currentTimeMillis();
    System.out.println("選擇法用時為:" + (end - begin));
    //打印排序好的結果
    for (int i = 0; i < vec.length; i++) {
    System.out.println(vec);
    }
    // 冒泡排序法(Bubble Sort)
    begin = System.currentTimeMillis();
    for (int k = 0; k < 1000000; k++) {
    for (int i = 0; i < vec.length; i++) {
    for (int j = i; j < vec.length - 1; j++) {
    if (vec[j + 1] > vec[j]) {
    temp = vec[j + 1];
    vec[j + 1] = vec[j];
    vec[j] = temp;
    }
    }

    }
    }
    end = System.currentTimeMillis();
    System.out.println("冒泡法用時為:" + (end - begin));
    //打印排序好的結果
    for (int i = 0; i < vec.length; i++) {
    System.out.println(vec);
    }

    //插入排序法(Insertion Sort)
    begin = System.currentTimeMillis();
    for (int k = 0; k < 1000000; k++) {
    for (int i = 1; i < vec.length; i++) {
    int j = i;
    while (vec[j - 1] < vec) {
    vec[j] = vec[j - 1];
    j--;
    if (j <= 0) {
    break;
    }
    }
    vec[j] = vec;
    }
    }
    end = System.currentTimeMillis();
    System.out.println("插入法用時為:" + (end - begin));
    //打印排序好的結果
    for (int i = 0; i < vec.length; i++) {
    System.out.println(vec);
    }

    //快速排序法(Quick Sort)

    Sort s = new Sort();
    begin = System.currentTimeMillis();
    for (int k = 0; k < 1000000; k++) {
    s.quicksort(vec, 0, 5);
    }
    end = System.currentTimeMillis();
    System.out.println("快速法用時為:" + (end - begin));
    //打印排序好的結果
    for (int i = 0; i < vec.length; i++) {
    System.out.println(vec);
    }
    }

    }
    以下是運行結果:
    選擇法用時為:234
    56
    47
    37
    23
    19
    -5
    冒泡法用時為:172
    56
    47
    37
    23
    19
    -5
    插入法用時為:78
    56
    47
    37
    23
    19
    -5
    快速法用時為:297
    56
    47
    37
    23
    19
    -5*
    posted @ 2006-03-06 10:16 rodney 閱讀(376) | 評論 (0)編輯 收藏
     
    dwg,img,iso,sub怎么打開?這個問題在google去查詢一下有許多都可找到答案。我個人有過的的工具有:dwg用daemon,其它的用虛擬光驅就OK了。
    posted @ 2006-03-02 09:55 rodney 閱讀(765) | 評論 (0)編輯 收藏
     
    因一個QQ的網友發了一個鏈接給我,我一點擊,完了中他的套了。我的IE彈出了許多的廣告,在任務欄中有連接的小圖標不見了。我在設置中打開網絡和拔號連接,可這里也沒有呀。只是圖標不見了,連接還是可以用。不知道為什么,是哪里被改了。
    這可能是你的Network Connections服務被禁用了原因造成的,查看方法如下:在“運行”窗口中輸入“services.msc”,然后在打開的“服務”窗口右側服務列表中找到名稱為“Network Connections”的服務,看看其狀態是否為“已啟動”。如果不是,那么就需要將其設置為“已啟動”。
    posted @ 2006-03-01 10:03 rodney 閱讀(462) | 評論 (0)編輯 收藏
     

    這個異常是在測試EJB的時候,程序執行到ctx.lookup("testEJB")時拋出的。由NamingException捕捉到。打印出棧軌跡是
    javax.naming.NameNotFoundException: Unable to resolve 'TestEJB'. Resolved ''; remaining name 'TestEJB'
     at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1123)
     at weblogic.jndi.internal.BasicNamingNode.lookupHere(BasicNamingNode.java:250)
     at weblogic.jndi.internal.ServerNamingNode.lookupHere(ServerNamingNode.java:171)
     at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:204)
     at weblogic.jndi.internal.WLEventContextImpl.lookup(WLEventContextImpl.java:267)
     at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:362)
     at javax.naming.InitialContext.lookup(InitialContext.java:351)
     at testejb.servlet.SrvEJB.init(SrvEJB.java:26)
     at javax.servlet.GenericServlet.init(GenericServlet.java:256)
     at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:265)
     at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
     at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
     at weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:61)
     at weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:58)
     at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:48)
     at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:502)
     at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:224)
     at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:165)
     at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3022)
     at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
     at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
     at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:1925)
     at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1848)
     at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1288)
     at weblogic.work.ExecuteThread.execute(ExecuteThread.java:207)
     at weblogic.work.ExecuteThread.run(ExecuteThread.java:179)
    我的ejb-jar.xml文件描述如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "

    <ejb-jar>
      <display-name>EJB</display-name>
      <enterprise-beans>
        <session>
          <ejb-name>TestEJB</ejb-name>
          <home>testejb.ejb.TestEJBHome</home>
          <remote>testejb.ejb.TestEJBRemote</remote>
          <ejb-class>testejb.ejb.TestEJBBean</ejb-class>
          <session-type>Stateless</session-type>
          <transaction-type>Container</transaction-type>
        </session>
      </enterprise-beans>
      <assembly-descriptor>
        <container-transaction>
          <method>
            <ejb-name>TestEJB</ejb-name>
            <method-name>*</method-name>
          </method>
          <trans-attribute>Required</trans-attribute>
        </container-transaction>
      </assembly-descriptor>
    </ejb-jar>

    weblogic-ejb-jar.xml文件描述如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE weblogic-ejb-jar PUBLIC "-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN" "

    <weblogic-ejb-jar>
      <weblogic-enterprise-bean>
        <ejb-name>TestEJB</ejb-name>
        <jndi-name>TestEJB</jndi-name>
      </weblogic-enterprise-bean>
    </weblogic-ejb-jar>
    這些配置我都寫了為什么還有名字沒有找到的異常呢?
    請大家幫忙看看。謝謝! QQ:86322591。MSN:rodney_luo@163.com

     
    系統環境:
    OS: Windows Server 2000 SP4
    開發工具:JBuilder 2006。
    WEB服務器:Weblogic9.0
    數據庫:DB2 V7.2
    使用Type2的JDBC連接方式。因為DB2 V7.2只支持Type2與Type3的連接。
    我新建了一個TestDB類,在這個類中我可以連接到DB2中,并且取出數據。可是我把這個連接的方法寫到Servlet中就不能連接到該數據庫中了。拋出ClassNotFoundException的異常。  請大家幫忙看,我在系統環境有設置Classpath的DB2驅動程序包。并在WEB-INF\lib目錄下也有這個驅程驅動程序包。它就是在Sevelt中要拋出ClassNotFoundException的異常。。。。。
    QQ:86322591
    MSN: rodney_luo@163.com
    Email: rodney_luo@163.com

    謝謝大家。
    posted @ 2006-02-17 13:17 rodney 閱讀(476) | 評論 (0)編輯 收藏
     
    我想各位網上的朋友常為了找不到自己合適的工具而煩吧。http://www.9iv.com/down/index.htm?eid=236712這里有你想要的一切工具軟件,開發工具,商務軟件。一切的軟件盡在http://www.9iv.com/down/index.htm?eid=236712中。
    posted @ 2006-02-15 09:46 rodney 閱讀(444) | 評論 (0)編輯 收藏
     
    1.查詢返回結果數量的設置
      缺省的情況下,一個全文本索引查詢的結果被限制為250個文檔,如果你想改變查詢返回
      QueryMaxResults=XXXX;
      XXXX代表一個小于5000的數,如果XXXX超過5000,查詢將會變得很不穩定,我建議最好將
      2.NOTES.INI中PREFERENCES變量的設置
      在NOTES.INI中的PREFERENCES變量的值一直是個迷,LOTUS公司一直沒有提供詳細的說明
    。直到現在,經過國內外LOTUS愛好者的研究,才弄清楚它的大體含義。其實,PREFERENCES
    變量的值是一個有正負的32位WORD變量的十進制表示法,其中每一位代表一個不同的優先設置
      位位置 = 用戶優先設置選擇
      0 = 不詳
      1 =掃描未讀文檔
      2 =不詳
      3 =大字體
      4 =不詳
      5 =將Internet URLs地址 (http//:)變為熱點
      6 =不詳
      7 = 只有打字機字體
      8 =單色顯示
      9 = Scandinavian 校驗
      10 =不詳
      11 = 保存已發送郵件
      12 =發送郵件簽名
      13 =發送郵件加密
      14 = Metric(1)/Imperial(0)度量
      15 =最近校驗的次數
      16 = 法國包裝
      17 =不詳
      18 = 每隔X分鐘檢查一次新郵件
      19 = 使能本地后臺索引
      20 = 加密保存的郵件
      21 =不詳
      22 =不詳
      23 =右鍵雙擊關閉窗口
      24 =位置提示
      25 =不詳
      26 = 在預覽框中打開文檔后將文檔標記為已讀
      27 = 使能本地預定代理
      28 =保存發送郵件(總是提示,1=YES,0=NO)
      29 = 使新郵件提示可見
      30 =使新郵件提示可以聽見
      31 =有紋理的工作臺
      3.DOMINO最大限度獲得系統可用內存的設置
      在NOTES.INI文件中加入以下變量:
      Platform_Statistics_Enabled=1
      強烈建議在NOTES.INI文件中加入上面一行,這樣會讓DOMINO可以最大限度的獲得系統的
    內存,提高DOMINO服務器的性能。Domino 5.0.2 (或更高版本)的這個屬性支持NT和Solaris
      4.取消NOTES的缺省郵件程序地位
      大家可能都遇到過,如果NOTES被當作缺省的郵件程序時,當你點擊MAILTO聯接的時候,
    就會啟動NOTES,耗時費勁,那么怎樣改變NOTES的缺省郵件程序地位呢?在NOTES.INI中加
      NotDefaultMailTo=1
      將取消NOTES的缺省郵件程序地位。
      5.用層疊地址本(cascaded address book)鑒別WEB用戶
      在Domino 4.6.1以前的版本中,都可以使用層疊地址本(cascaded address book)鑒別
    WEB用戶,但是到了Domino 4.6.2以后,不再支持用層疊地址本鑒別WEB用戶,取而代之的是
    用主NAB鑒別WEB用戶。為了鑒別WEB用戶,我們不得不使用主地址本,不過在NOTES.INI中加
    入以下行,你將會重新可以使用層疊地址本鑒別WEB用戶。
      NoMABForWebNames=1
      6.在工作站上隱藏設計菜單
      如果你不想讓工作站上的用戶創建個人視圖,可以用以下的方法隱藏設計菜單:
      NoDesignMenu=1或0
      1------隱藏設計菜單
      0------不隱藏設計菜單
      7.改變郵件到達的提示聲音
      大家可能已經厭煩了LOTUS卻省的郵件到達提示聲音,不用急,改變一下notes.ini,你
    可以使用任何的聲音了。方法如下,在notes.ini中加入以下行:
      NewMailTune=[相對于NOTES DATA目錄的.wav文件的完整路徑].
      如:NewMailTune=c:winntmediamessage.wav
      現在你可以使用任何喜歡的聲音了。
      8.使用附加的地址本
      在NOTES.INI文件中加入以下行:
      Names=NAMES.NSF,NAMES1.NSF
      NOTES將會在NAMES.NSF和NAMES1.NSF兩個地址本中尋找用戶。

    9.設置新郵件檢查時間間隔
      在NOTES.INI文件中加入以下行:
      MinNewMailPoll= 時間(分鐘)
      工作站將會根據以上的設置,每隔一定時間檢查服務器上的新郵件。卻省的設置是15分鐘
      10.指定NOTES所用內存大小
      通過在NOTES.INI中使用以下行:
      Memory_Quota = xx
      可以指定NOTES客戶端使用的PC的內存大小,其中XX代表所用內存的大小,注意XX值設得
    不要太小,否則會出現問題,NOTES R5比NOTES4.X需要的內存多。
      11.記錄已經索引的數據庫
      可以通過改變NOTES.INI設置,讓日志記錄已經索引的數據庫。這個設置在數據庫更新所
    引的時候突然崩潰時非常有用。設置選項如下:
      要想記錄索引數據庫的視圖和文件夾:
      Log_Update=2
      要想只記錄索引過的數據庫:
      Log_Update=1
      完全關閉更新日志
      Log_Update=0
      12.調試代理
      在NOTES.INI文件中加入以下行,你就可以調試代理了:
      DEBUG_AMGR = n ,n代表以下的數值
      r = 代理運行
      l = 代理加載
      m = 代理內存警告
      p = 代理性能狀態
      e = 事件
      s = 計劃安排
      c = 代理控制參數顯示
      v = 詳細
      * =使能以上所有選項
      13.指定運行的NOTES程序
      當你在同一臺機器上安裝NOTES客戶端和DOMINO服務器的時候,在NOTES.INI文件中有一
    項會隨之變化:
      KitType=
      1 ? 客戶端
      2 ? 服務器和客戶端
      14.加速視圖索引的速度
      在NOTES.INI文件中加入以下行,就能在一個視圖首次打開時加速索引的速度:
      GOFASTER=1
      加速視圖索引
      GOFASTER=0
      放慢視圖索引
      15.平行運行WEB觸發代理
      DominoAsynchronizeAgents = 1
      在NOTES.INI文件中加入以上行之后,可以平行的運行WEB觸發的代理。
      例如,如果有一個WEBQUERYOPEN代理,同時運行這個代理的幾率很大,但是NOTES不支持
    同時運行同一個代理,因此,如果三個用戶同時申請了運行這個代理,那么只有一個用戶的申
    請被批準,其余的只有等待。用了以上的設置之后,三個用戶可以同時運行這個代理。
      16.將服務器窗口的內容寫入一個文件
      在NOTES.INI文件中寫入以下行,就可以將服務器端窗口的內容寫入一個文件:   Debug_Outfile = < filename >
      在NOTES4.X中,文件名必須是DEBUG.TXT,每次服務器重新啟動之后,就會產生一個文件
    DEBUG1.TXT,DEBUG2.TXT等等,依次類推,DEBUG.TXT代表最新的服務器端的內容
    posted @ 2006-01-16 16:05 rodney 閱讀(1079) | 評論 (0)編輯 收藏
     
    主站蜘蛛池模板: 国产在线98福利播放视频免费| 59pao成国产成视频永久免费| 国产黄色免费观看| 国产一级在线免费观看| 99re在线视频免费观看| 成年黄网站色大免费全看| 免费被黄网站在观看| 久久亚洲国产成人精品无码区| 亚洲国产第一站精品蜜芽| 亚洲国产av一区二区三区丶| 国产精品亚洲AV三区| a级毛片免费高清毛片视频| 四虎最新永久免费视频| 国产男女猛烈无遮挡免费视频网站 | 国产成人无码区免费网站| 亚洲人成在线免费观看| 国产精品无码一区二区三区免费| 亚洲综合AV在线在线播放| 亚洲综合激情六月婷婷在线观看| 性色av极品无码专区亚洲| 一个人看www免费高清字幕| 91福利视频免费| 国产精品国产午夜免费福利看| 国产亚洲av片在线观看16女人| 亚洲国产日韩女人aaaaaa毛片在线| 亚洲AV女人18毛片水真多| 91国内免费在线视频| 最近2019中文字幕免费看最新| 久久精品国产亚洲Aⅴ蜜臀色欲| 亚洲国产福利精品一区二区| 国产免费福利体检区久久| 全免费毛片在线播放| 在线日韩日本国产亚洲| 2017亚洲男人天堂一| 中文字幕久无码免费久久| 免费a级毛片无码a∨蜜芽试看| 最新亚洲成av人免费看| 亚洲性色AV日韩在线观看| 精品成人免费自拍视频| 国产成人无码区免费A∨视频网站| 亚洲成在人天堂一区二区|