當柳上原的風吹向天際的時候...

          真正的快樂來源于創造

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks

          #

          以下是使用SqlToolbox使用圖解教程,雖然是早期版本,但對于當前版本也一樣有參考價值。

          1) 啟動SqlToolBox.
          如下圖,點擊其中的"Run.bat"啟動程序.


          打開后,程序將顯示以下界面:


          2.通過對話框打開數據庫.
          首次啟動時,用戶本機沒有XML描述數據源文件,只能通過對話框來打開數據庫.
          點擊菜單中的"文件"->"打開數據源對話框",將彈出以下界面.


          接下來輸入數據庫服務器的IP地址和數據庫名,舉例如下:


          接著,選擇數據庫類型,我的數據庫是Oracle的,就選它了.選完后,你會發現數據庫類型和Url都被自動填入了.


          接下來填入用戶名和密碼,如果所有信息均正確,你稍等一會就能看到數據庫操作窗口被打開了.

          3.存儲數據庫信息文件.
          點擊數據源窗口中的"保存文件"按鈕,寫入文件名,你就將數據庫信息存儲到了文件中.


          文件信息如下:
          <?xml version="1.0" encoding="UTF-8"?>
          <datasource>
              
          <type>oracle</type>
              
          <url>jdbc:oracle:thin:@192.168.104.173:1521:orcl</url>
              
          <usr>hy</usr>
              
          <pswd>hy</pswd>
          </datasource>


          4.通過數據庫信息文件打開數據庫.
          點擊菜單"文件"->"打開XML形式的數據源文件",找到剛才保存的文件,


          然后出現以下界面:


          "執行中"對話框消失后,表空間和表都被載入了.
          以下是平面視圖狀態的表和表空間.


          以下是樹視圖狀態的表空間和表:


          5.查看表的字段及其字段屬性
          在平面視圖中中選擇一個表,左下方即出現這個表的字段及其字段屬性,如下圖:


          在樹視圖中左鍵選擇第三級節點-表節點,也可以達到同樣的效果。


          6.取得單表的各種Sql文。
          在平面視圖或樹視圖中,對著表名,點擊右鍵,會彈出一個菜單,選擇“取得單表查詢語句”到“取得單表更新語句”這五個菜單項,能得到Select,insert,delete,update等四種SQl文。它們將出現在右邊的當前選項卡的文本框中。


          樹視圖中的同等操作:

          posted @ 2009-02-01 18:24 何楊 閱讀(1873) | 評論 (5)編輯 收藏

          效果圖:


          代碼如下:
          import java.awt.Graphics;
          import java.awt.Image;

          import javax.swing.ImageIcon;
          import javax.swing.JDesktopPane;

          public class WindowDesktop extends JDesktopPane{
              
          private static final long serialVersionUID = -3458049910691811494L;
              Image image
          =new ImageIcon(MainFrame.class.getResource("/background.jpg")).getImage();
              
              
          public WindowDesktop(){
                  
          super();
              }

              
              
          public void paintComponent(Graphics g)
                  g.drawImage(image, 
          00, getWidth(), getHeight(), 00, image
                          .getWidth(
          null), image.getHeight(null), null);
              }
           
          }
          posted @ 2009-01-30 19:21 何楊 閱讀(2089) | 評論 (1)編輯 收藏

          界面概覽:


          整體說明
          SqlToolBox是一款純綠色,完全免費的,專為程序員打造的數據庫客戶端管理工具,旨在于向與數據庫打交道的程序員提供各種便利。

          功能簡介:
          1.無需安裝數據庫的客戶端,通過本程序即可訪問各種常用數據庫.
          2.本軟件已經加載了Oracle和MySql兩種數據庫的驅動包,可以暢通無阻的訪問這兩種數據庫,您不用進行任何特別設置。
          3.對于Db2,Sqlserver,Sybase,Informix,PostgreSql等數據庫,軟件已經內置對它們的支持,用戶只需加載相關數據庫的驅動jar包即可。(請參照Run.bat文件進行修改).
          3.打開數據庫時既可通過對話框的形式打開,您只需要輸入“數據庫類型”,“數據庫的URL”,“打開數據庫的用戶名”和“密碼”即可。如果需要多次訪問,您可以把這些信息保存成XML文件打開,以后可以打開這個文件即能快速訪問數據庫.
          4.打開數據庫后,程序會依次列出 DB中的數據庫,數據庫下的各表 和 以及表中的各字段 以方便程序員在數據庫中瀏覽.您還可以根據自己的喜好選擇“樹狀視圖”和“平面視圖”兩種方式進行瀏覽。
          5.在樹狀視圖和平面視圖,您可以輕松獲得某一張表的完整Select,Update,Insert,Delete等語句以及表對應的Pojo文件,Hibernate映射文件,建表語句等.
          6.在右上方的SQL執行窗口中,您可執行各種SQL語句,在結果窗口中可以顯示處理結果,如果是查詢,會以表格的方式顯示出來;如果是Update,Insert和Delete等語句會以文字的形式告訴你執行結果;如果執行的SQL語句有錯誤,則會提示用戶SQL語句錯誤。
          7.如果SQL語句比較復雜,軟件提供了一個功能可對多層的SQL語句進行整形,這可以幫助程序員迅速理清其結構,另外還提供了一個反整形功能將多行SQL合并成一行。
          8.您可以訪問不同的數據庫,只需打開多個窗口即可;您還可以進行不同的處理,只需打開多個選項頁即可。

          如何運行和使用SqlToolBox:
          運行此軟件需要安裝JDK1.5或更高版本。
          本軟件為綠色軟件,不需要進行安裝,只要您下載軟件后,解壓到任何一個目錄,點擊run.bat既、即能將程序運行起來。
          關于SqlToolBox的使用教程,請參看:SqlToolbox使用圖解http://www.aygfsteel.com/heyang/archive/2009/02/01/252878.html

          最近增加的功能:
          1.Sql語法高亮(1.71  2009年1月28日15:24:46)。
          2.增加一些圖片,特地增加新年壁紙背景(1.72 2009年1月30日19:18:28)。
          3.將背景修改為明代衣冠壁紙,增加了三個圖標(1.73 2009年1月31日17:31:56)。
          4.改善了Sql整形功能(嵌套SQL整形還未完成),全面引入了Spring的JdbcTemplate。(1.74 2009年2月3日14:01:06)
          5.嵌套SQL整形完成。(1.75 2009年2月5日22:38:38)
          6.增加了主鍵識別,改善了建表語句的生成效果。增加一個測試連接按鈕。修改了一些按鈕圖標。(1.76  2009年2月7日16:03:10)

          版本歷程
          2007年7月末  前身 SqlAnywhere1.00 誕生
          2007年8月初  SqlAnywhere1.03問世并發布到華軍軟件園
          2007年11月底到2008年一月初 更名為SqlToolBox并升級到1.60版本 發布到eNet下載頻道(一月二十七日)
          2009年1月 升級到當前最高版本 發布到華軍軟件園綠色軟件頻道多特下載站

          作者寄語:
          本軟件歷經了三次大的修改,十數次小修改,軟件名也從SqlAnywhere1.3變到了現在的版本,規模也從1.98M變到了5M多,目的是使它真正能對程序員訪問數據庫有所幫助,限于本人水平和時間有限,如果此軟件可能和您的需要有差別,或者沒有提供您想要的功能,請您將意見和建議盡量告訴我(可通過博客留言或是發送Email),我會把您想要的功能融入到新版本中。如果您覺得此軟件還不錯,請告知您的朋友們,作者在此向您表示感謝。    

          1.60版本下載地址
          http://www.box.net/shared/3y80aucin6

          1.8.0版下載地址:
          http://www.box.net/shared/ggmlmyjrrg

          與本軟件功能類似的開源軟件:
          Java開源數據庫管理工具 

          posted @ 2009-01-23 07:26 何楊 閱讀(1637) | 評論 (8)編輯 收藏

          全文如下:

          @echo off 
          set CLASSPATH_BAK
          =%CLASSPATH%
          set classpath
          =%CLASSPATH%;.\lib\dom4j-1.6.1.jar;.\lib\classes12.jar;.\lib\log4j-1.2.14.jar;.\lib\commons-dbcp-1.2.2.jar;.\lib\commons-pool-1.4.jar;.\lib\mysql-connector-java-5.0.6-bin.jar;.\lib\commons-logging-1.0.4.jar;.\lib\spring.jar;.\;.\SqlToolBox.jar
          start javaw com.sitinspring.Main  
          set classpath
          =%CLASSPATH_BAK%  
          posted @ 2009-01-22 17:46 何楊 閱讀(833) | 評論 (0)編輯 收藏

          凡是存在多人協作的系統必然具備權限子系統,它用于控制用戶能否執行某個操作,以此來控制系統的功能,業務的流向和業務權利的分配。

          權限系統具體來說分為等級控制類型和角色控制類型兩種形式,再復雜的權限系統都是這兩種形式的有限組合。前者可用于范圍控制,適用于用戶權力大小不同的場合;后者可用于單點控制,適用于用戶權力多寡有異的場合。現實世界中,軍隊中官銜類似于等級權限控制,現代企業中各司其職的權力分配類似于角色控制。角色權限控制是把單項權限一項項的賦予用戶,如同現實世界中把具體職位一個個的賦予某個員工一樣。在他執行操作前,先看他是否擁有執行此操作的權限,如果有則執行,否則不執行。

          下面的文章分別總結和討論了這兩種系統和具體的實現技術:

          等級權限控制的相關文章:
          1.簡單值控制權限系統的設計
          2.簡單值控制權限系統的改進
          3.使用AOP完善簡單值權限系統
          4.在簡單值權限系統中使用Annotation替代了原來處于XML中的值設置

          角色權限控制的相關文章:
          1.用戶角色權限控制的實現

          歡迎大家和我討論。
          posted @ 2009-01-20 09:24 何楊 閱讀(340) | 評論 (0)編輯 收藏

           在一個程序中,相對User這個領域對象的諸屬性進行修改,用來容納存儲數據的ActionForm是這樣寫的:

          public final class ModifyUserForm extends ActionForm {
              
          private static final long serialVersionUID = -3447738664240089399L;

              
          private User user;
              
              
          public ModifyUserForm(){

              }


              
          public void reset(ActionMapping mapping, HttpServletRequest request) {
              }


              
          public ActionErrors validate(ActionMapping mapping,
                                           HttpServletRequest request) 
          {

                  ActionErrors errors 
          = new ActionErrors();

                  
          return (errors);

              }


              
          public User getUser() {
                  
          return user;
              }


              
          public void setUser(User user) {
                  
          this.user = user;
              }

          }

          結果,進行頁面數據驗證的JS能準確無誤的進行前段驗證,但Action中沒有收到請求,驗證完畢提交表單后出現下面的異常,

          HTTP Status 500 -


          type Exception report

          message

          description The server encountered an internal error () that prevented it from fulfilling this request.

          exception

          javax.servlet.ServletException: javax.servlet.ServletException: BeanUtils.populate
          org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
          org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
          org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
          javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
          javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
          com.heyang.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:35)
          

           

          root cause

          javax.servlet.ServletException: BeanUtils.populate
          org.apache.struts.util.RequestUtils.populate(RequestUtils.java:469)
          org.apache.struts.chain.commands.servlet.PopulateActionForm.populate(PopulateActionForm.java:50)
          org.apache.struts.chain.commands.AbstractPopulateActionForm.execute(AbstractPopulateActionForm.java:60)
          org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
          org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
          org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
          org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
          org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
          org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
          org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
          javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
          javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
          com.heyang.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:35)
          

           

          root cause

          java.lang.IllegalArgumentException: No bean specified
          org.apache.commons.beanutils.PropertyUtilsBean.getPropertyDescriptor(PropertyUtilsBean.java:751)
          org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:937)
          org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:811)
          org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:298)
          org.apache.struts.util.RequestUtils.populate(RequestUtils.java:467)
          org.apache.struts.chain.commands.servlet.PopulateActionForm.populate(PopulateActionForm.java:50)
          org.apache.struts.chain.commands.AbstractPopulateActionForm.execute(AbstractPopulateActionForm.java:60)
          org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
          org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
          org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
          org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
          org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
          org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
          org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
          javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
          javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
          com.heyang.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:35)
          

           

          note The full stack trace of the root cause is available in the Apache Tomcat/6.0.10 logs.


          Apache Tomcat/6.0.10

          發生這個錯誤的原因應該是使用工具類commons beanutil向ActionForm中的屬性user輸入數據時發生了錯誤,解決這個問題也很簡單,在ActionForm內部將屬性user實例化即可,代碼如下:

          public final class ModifyUserForm extends ActionForm {
              
          private static final long serialVersionUID = -3447738664240089399L;

              
          private User user=new User();
              
              
          public ModifyUserForm(){

              }


              
          public void reset(ActionMapping mapping, HttpServletRequest request) {
              }


              
          public ActionErrors validate(ActionMapping mapping,
                                           HttpServletRequest request) 
          {

                  ActionErrors errors 
          = new ActionErrors();

                  
          return (errors);

              }


              
          public User getUser() {
                  
          return user;
              }


              
          public void setUser(User user) {
                  
          this.user = user;
              }

          }

          posted @ 2009-01-15 16:06 何楊 閱讀(732) | 評論 (0)編輯 收藏

          公安人員抓捕了四個盜竊嫌疑犯,下面是他們的審訊記錄:
          A:是B偷的,不是D偷的
          B:我沒有偷,是C偷的
          C說:A沒有偷,是B偷的
          D:我沒有偷
          現已經確切知道只有一人參與偷竊,且四人的話語要么全是真話,要么全在撒謊。
          請根據這些條件編程判斷誰是小偷?

          package com.heyang;

          public class WhoIsTheThief{
            
          public static void main(String[] args){
              
          int[] arr=new int[4]; 
              
              
          for(arr[0]=0;arr[0]<=1;arr[0]++){
                
          for(arr[1]=0;arr[1]<=1;arr[1]++){
                  
          for(arr[2]=0;arr[2]<=1;arr[2]++){
                    
          for(arr[3]=0;arr[3]<=1;arr[3]++){           
                      
          // 只有一個人是小偷
                      if(hasOnlyOneThief(arr)==false){
                        
          continue;
                      }

                      
                      
          boolean wordByA=(arr[1]==1 && arr[3]==0);
                      
          boolean wordByB=(arr[1]==0 && arr[2]==1);
                      
          boolean wordByC=(arr[0]==0 && arr[1]==1);
                      
          boolean wordByD=(arr[3]==0);
                      
                      
          boolean resultFinal=allTrueOrAllFalse(wordByA,wordByB,wordByC,wordByD);
                      
                      
          if(resultFinal==false){
                        printThief(arr);              
                        
          return;
                      }

                    }

                  }

                }

              }

            }

            
            
          private static boolean hasOnlyOneThief(int[] arr){
              
          int thiefCount=0;
              
              
          for(int i:arr){
                thiefCount
          +=i;
              }

              
              
          return thiefCount==1;
            }

            
            
          private static boolean allTrueOrAllFalse(boolean wordByA,boolean wordByB,boolean wordByC,boolean wordByD){
              
          if(wordByA==true && wordByB==true && wordByC==true && wordByD==true){
                
          return true;
              }

              
          else if(wordByA==false && wordByB==false && wordByC==false && wordByD==false){
                
          return true;
              }

              
          else{
                
          return false;
              }

            }

            
            
          private static void printThief(int[] arr){
              
          char[] arrNames={'A','B','C','D'};  
              
              
          for(int i=0;i<arr.length;i++){
                
          if(arr[i]==i){
                  System.out.println(arrNames[i]
          +"是竊賊");
                }

                
          else{
                  System.out.println(arrNames[i]
          +"不是竊賊");
                }

              }
           
            }

          }
          posted @ 2009-01-15 08:35 何楊 閱讀(172) | 評論 (0)編輯 收藏

          package com.heyang;

          /**
           * 兩個隊進行比賽,各出三人。甲隊為'張','李','王'三人,乙隊為'A','B','C'三人。已抽簽決定
             比賽名單。有人向隊員打聽比賽的名單。張說他不會對陣A,李說他不會對陣C,王說他不會對陣B,請編程序找出
             三隊賽手的名單。
           * 
          @author 何楊(heyang78@gmail.com)
           *
           * 
          @since 2009-1-14 下午04:17:11
           * 
          @version 1.00
           
          */

          public class MatchSchedule{
              
          public static void main(String[] args){
                  
          char[] team1={'','',''};
                  
          char[] team2={'A','B','C'};
                  
                  
          int arraySize=team2.length;
                  
          for(int i=0;i<arraySize;i++){
                      
          // team2[i]是張的對手
                      
                      
          if(team2[i]!='A'){        // 張說他不會對陣A    
                          for(int j=0;j<arraySize;j++){
                              
          // team2[j]是李的對手
                              
                              
          if(team2[j]!='C'){  // 李說他不會對陣C    
                                  for(int k=0;k<arraySize;k++){
                                      
          // team2[k]是王的對手
                                      
                                      
          if(team2[k]!='B')// 王說他不會對陣B    
                                          
                                          
          // 不會出現一名選手同時對戰兩人
                                          if(team2[i]!=team2[j] && team2[j]!=team2[k] && team2[k]!=team2[i] ){
                                              System.out.println(
          "\n比賽可能對陣表");
                                              System.out.println(team1[
          0]+" vs "+team2[i]);
                                              System.out.println(team1[
          1]+" vs "+team2[j]);
                                              System.out.println(team1[
          2]+" vs "+team2[k]);
                                          }

                                      }

                                  }

                              }

                          }

                      }

                  }

              }

          }
          posted @ 2009-01-14 16:18 何楊 閱讀(156) | 評論 (0)編輯 收藏

          package com.heyang;

          public class CompletedBitmapMethod{
              
          public static void main(String[] args){
                  
          int[] arr={1,7,3,6,9,-1};        
                  System.out.println(hasDuplicatedItem(arr));
              }
              
              
              
          public static boolean hasDuplicatedItem(int[] arr){
                  
          // 找出數組中最大值
                  int max=arr[0];
                  
          int min=max;
                  
          for(int i:arr){
                      
          if(max<i){
                          max
          =i;
                      }

                      
          if(min>i){
                          min
          =i;
                      }

                  }

                  
                  
          int[] newArr=new int[max-min+1];
                  
          for(int i:arr){
                      
          int index=i-min;
                      
                      
          if(newArr[index]==0){
                          
          // 以前未在此位置存值
                          newArr[index]=1;
                      }

                      
          else{
                          
          // 以前已經在此位置存值
                          return true;
                      }

                  }
              
                  
                  
          return false;
              }

          }
          posted @ 2009-01-14 16:16 何楊 閱讀(206) | 評論 (0)編輯 收藏

               摘要: 權限系統文章之五,業務和文章之一相同,使用Annotation替代了原來處于XML中的值設置。  閱讀全文
          posted @ 2009-01-06 15:59 何楊 閱讀(483) | 評論 (0)編輯 收藏

          僅列出標題
          共28頁: First 上一頁 20 21 22 23 24 25 26 27 28 下一頁 
          主站蜘蛛池模板: 榕江县| 兰考县| 鸡东县| 澜沧| 曲沃县| 浪卡子县| 蓬安县| 大宁县| 娄烦县| 石台县| 桓台县| 靖边县| 宣威市| 巴塘县| 湘潭县| 织金县| 眉山市| 厦门市| 徐汇区| 泗阳县| 赣州市| 龙泉市| 辽宁省| 忻城县| 蓬安县| 木兰县| 淳安县| 比如县| 雷州市| 淮南市| 巴中市| 金寨县| 平乡县| 田林县| 乾安县| 江西省| 宣汉县| 渭南市| 景泰县| 朝阳市| 德保县|