Rising Sun

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            148 隨筆 :: 0 文章 :: 22 評論 :: 0 Trackbacks

          #

          準備工作:
          安裝tomcat5.5(注意這點)
          安裝mysql
          拷貝mysql驅動到tomcat_home/common/lib下
          新建一個web工程
          在工程中加入index.jsp


          <%@page import="java.util.*,javax.naming.*,java.sql.*,javax.sql.*" %>
          <%@page contentType="text/html;charset=BIG5"%>
          <%    
              Context ctx 
          = new InitialContext();      
              String strLookup 
          = "java:comp/env/jdbc/test"
              DataSource ds 
          =(DataSource) ctx.lookup(strLookup);
              Connection con 
          = ds.getConnection();
              
          if (con != null){
                  out.print(
          "success");
              }
          else{
                  out.print(
          "failure");
              }
                 
          %>

          web.xml中加入

          <resource-ref>
              
          <res-ref-name>jdbc/test</res-ref-name>
              
          <res-type>javax.sql.DataSource</res-type>
              
          <res-auth>Container</res-auth>
              
          <res-sharing-scope>Shareable</res-sharing-scope>
          </resource-ref>

          配置tomcat
          這一步的目的就是告訴tomcat如何連接數據庫
          可以分為兩種大的類型,每種類型又有很多種配置方式
          配置類型一;
          (直接配置的類型,這種方式最簡單)

          方法一:
          直接在tomcat_home/conf/localhost/下建立一個xml文件,文件名是<yourAppName>.xml
          例如我的工程名叫jndi,對應的名字叫jdni.xml
          內容如下:

          <Context>
           
          <Resource
                    name
          ="jdbc/test"
                    type
          ="javax.sql.DataSource"
                    password
          ="bb"
                    driverClassName
          ="com.mysql.jdbc.Driver"
                    maxIdle
          ="2"
                    maxWait
          ="50"
                    username
          ="root"
                    url
          ="jdbc:mysql://localhost:3306/test"
                    maxActive
          ="4"/>
          </Context>

          方法二:
          只需在tomcat_home\webapps\myapps\META-INF\context.xml中增加:
          <context>
          <Resource
                    name
          ="jdbc/test"
                    type
          ="javax.sql.DataSource"
                    password
          ="bb"
                    driverClassName
          ="com.mysql.jdbc.Driver"
                    maxIdle
          ="2"
                    maxWait
          ="50"
                    username
          ="root"
                    url
          ="jdbc:mysql://localhost:3306/test"
                    maxActive
          ="4"/>
          </context>


          說明:這種配置需要告訴tomcat resource的內容,resource應用于什么地方
          第一種方法通過文件名知道了app的name
          第二種方式本身就在app內部,所以name肯定知道
          兩種方式都要放在context中

          配置類型二:
          (配置全局resource,然后通過resourcelink來映射)

          步驟一:配置全局resource(這一步對于所有的配置都是一樣的)
          打開tomcat_home/conf/server.xml加入

          <Resource
                    name
          ="jdbc/test"
                    type
          ="javax.sql.DataSource"
                    password
          ="bb"
                    driverClassName
          ="com.mysql.jdbc.Driver"
                    maxIdle
          ="2"
                    maxWait
          ="50"
                    username
          ="root"
                    url
          ="jdbc:mysql://localhost:3306/test"
                    maxActive
          ="4"/>


          步驟二:映射
          (映射可以配置在多個地方,也就有多個配置方法:)

          方法一:(對比類型一的配置理解)
          直接在tomcat_home/conf/localhost/下建立一個xml文件,文件名是<yourAppName>.xml
          例如我的工程名叫jndi,對應的名字叫jdni.xml加入如下內容

          <Context>
          <ResourceLink global="jdbc/test" name="jdbc/test" type="javax.sql.DataSource"/>
          </Context>

          方法二:(對比類型一的配置理解)
          在tomcat_home\webapps\myapps\META-INF\context.xml的Context中增加:


          <context>
          <ResourceLink global="jdbc/test" name="jdbc/test" type="javax.sql.DataSource"/> 
          </context>


          方法三:(上邊兩種方法都是把全局的resource 映射給jndi這個web應用,第三種方法就是把這個
          全局的resource直接公開給所有的應用)
          在tomcat_home/conf/context.xml的<Context></context>之間加入
          <ResourceLink global="jdbc/test" name="jdbc/test" type="javax.sql.DataSource"/>


          運行測試:
          打開ie,輸入http://localhost:8080/jndi/index.jsp
          看到success

          常見錯誤:
          1,Name jdbc is not bound in this Context
          2,Cannot create JDBC driver of class '' for connect URL 'null' conf localhost
          原因:
          大多數是因為配置了全局的resource,但沒有link造成的。
          解決:
          加入link就行了,link的方式見類型二的三種方法。

          分析:
          看到上邊這么多方法,是否感覺眼花繚亂,其實不要死記配置,按照原理分析一下就好了。
          你需要的是告訴tomcat哪個應用如何連接數據庫。

          類型一的方式對應一個應用單獨使用這個配置的情況
          就是直接告訴tomcat"應用名"  "連接數據庫需要的參數"

          類型二的方式對應多個應用共享一個配置的情況
          這樣先配置server.xml告訴tomcat全局范圍的"連接數據庫需要的參數"
          然后映射,映射的時候
          1,如果不知道"app name(應用名)"就只需要通過文件名來傳遞這個信息
          2,如果"app name"都知道就只需要加入映射的內容
          3,如果要配置成全局公用的,就不需要"app name",本身放在tomcat的context.xml中

          最后再次提醒一下:所有的配置必須放在<context></context>之間 

          posted @ 2008-08-06 12:52 brock 閱讀(178) | 評論 (0)編輯 收藏

          我這有個系統是以tomcat5.5+sqlserver2000配置的。我將tomcat使用的初始內存和最大內存分別設置為100M和1024M,然后通過server.xml修改相關的線程數,但minSpareThreads和maxSpareThreads設置的很大或者應經足夠小了,通過壓力測試,看tomcat5.exe進程占用的內存數的走向圖沒有什么變化,比如通過壓力測試可以使tomcat占到最大800M內存,而壓力測試過后放置一晚上tomcat會回落并一直保持在600M。
          但通過下面的解釋tomcat占用的內存是否應該有變化
          minSpareThreads Tomcat初始化時創建的線程數。
          maxSpareThreads 一旦創建的線程超過這個值,Tomcat就會關閉不再需要
          的socket線程。

          下面是我分別設置的線程參數

          <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
          <Connector port="9080"
          maxHttpHeaderSize="8192"
          maxThreads="10000" minSpareThreads="1000" maxSpareThreads="2000"
          enableLookups="false" redirectPort="8443" acceptCount="10000"
          connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/>



          <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
          <Connector port="9080"
          maxHttpHeaderSize="8192"
          maxThreads="10000" minSpareThreads="50" maxSpareThreads="100"
          enableLookups="false" redirectPort="8443" acceptCount="10000"
          connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/>
          posted @ 2008-07-31 15:10 brock 閱讀(715) | 評論 (0)編輯 收藏

          . 條件標簽
              JSTL: 
           1 <c:if test="${user.password == 'hello'}">
           2     <c:choose>
           3         <c:when test="${user.age <= 18}">
           4             <font color="blue" />
           5         </c:when>
           6         <c:when test="${user.age <= 30 && user.age > 18}">
           7             <font color="red" />
           8         </c:when>
           9         <c:otherwise>
          10             <font color="green" />
          11         </c:otherwise>
          12     </c:choose>
          13 </c:if>
              Struts2:
          1 <s:if test="#user.age <= 18">
          2     <font color="blue" />
          3 </s:if>
          4 <s:elseif test="#user.age <= 30 && user.age > 18">
          5     <font color="red" />
          6 </s:elseif>
          7     <font color="green" />
          8 </s:else>

          2. 迭代標簽
              JSTL:
          1 <c:forEach var="user" items="${users}">
          2     <c:out value="${user.userName}" />
          3 </c:forEach>
          4 <!-- 迭代固定次數 -->
          5 <c:forEach var="i" begin="1" end="10" step="3">
          6     <c:out value="${i}" />
          7 </c:forEach>
          8 <!-- 這種循環相當于for(int i=1; i<10; i++), 其中step是指迭代的步長,默認為1. -->
              Struts2:
          1 <s:iterator value="#users" status="stuts">                
          2     <s:if test="#stuts.odd == true">   <!-- 判斷是否為奇數行 -->
          3         <s:property value="userName" />
          4     </s:if>
          5     <s:else>
          6         <s:property value="passWord" />
          7     </s:else>
          8 </s:iterator>

          3. URL相關標簽
              JSTL:
           1 <!-- 絕對路徑 -->
           2 <c:import url="http://127.0.0.1:8080/hello/hello.jsp" />
           3 <!-- 相對路徑 -->
           4 <c:import url="hello.jsp" />
           5 <!-- Encode -->
           6 <href="<c:url value='hello.jsp'><c:param name='userName' value='cyanbomb' /></c:url>"></a>
           7 <!-- 傳遞參數到指定的URL -->
           8 <c:import url="hello.jsp" charEncoding="gb2312" >
           9     <c:param name="userName" value="cyanbomb" />
          10 </c:import>
          11 <!-- URL重定向 -->
          12 <c:redirect url="${myurl}" />
          13 <!-- 構造URL -->
          14 <c:url value="myurl" var="hello.jsp" scope="session">
          15     <c:param name="userName" value="cyanbomb" />
          16 </c:url>
              Struts2:
          1 <href='<s:url value="/hello.jsp" />'>Hello</a><br />
          2 <s:url id="url" value="/hello.jsp">
          3     <s:param name="name">cyanbomb</s:param>
          4 </s:url>        
          5 <s:a href="%{url}">Hello</s:a>

          解除的疑問,list遍歷問題

          像這樣一個list,里面有3條記錄,每條記錄包含兩個對象,我把結果集(lstRooms)request到了頁面,想遍歷顯示RrmRooms里的id,和RrmRoomType里的name.
          我用JSTL實現如下:
          1 <table>
          2     <c:forEach var="rm" items="${lstRooms}">
          3         <tr>
          4             <td>${rm[0].id}</td>
          5             <td>${rm[1].name}</td>
          6         <tr>
          7     </c:forEach>
          8 </table>
          STRUTS2實現如下:
          1<table>
          2     <s:iterator value="#lstRooms" status="stat">
          3         <tr>
          4             <td><s:property value="#lstRooms[#stat.index][0].id" /></td>
          5             <td><s:property value="#lstRooms[#stat.index][1].name" /></td>
          6         <tr>
          7     </s:iterator>
          8</table>
          posted @ 2008-07-30 09:02 brock 閱讀(291) | 評論 (0)編輯 收藏

          利用w3c的dom:

           

          DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
            DocumentBuilder builder;
            
          try   {
             builder 
          =  factory.newDocumentBuilder();
             Document doc 
          =  builder.parse( new  ByteArrayInputStream(str.getBytes())); 
            }
            catch  (ParserConfigurationException e)  {
             
          //  TODO Auto-generated catch block
             e.printStackTrace();
            }
            catch  (SAXException e)  {
             
          //  TODO Auto-generated catch block
             e.printStackTrace();
            }
            catch  (IOException e)  {
             
          //  TODO Auto-generated catch block
             e.printStackTrace();
            }
           


          利用1 dom4j

          SAXReader saxReader = new SAXReader();
                  Document document;
                  
          try {
                      document 
          = saxReader.read(new ByteArrayInputStream(str.getBytes()));
                      Element incomingForm 
          = document.getRootElement();
                  }
           catch (DocumentException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }


          利用 2 dom4j :


          String text = "<person> <name>James</name> </person>";
          Document document = DocumentHelper.parseText(text);
          posted @ 2008-07-29 11:17 brock 閱讀(172) | 評論 (0)編輯 收藏

          Weblogic 中報Ora-01483

          數據庫 oralce 9i 版本9.2.0.1.0
          Server: Weblogic 814
          數據庫連接方式:Hibernate3+DataSource + ConnectionPool

          問題:
          往數據庫中某表插入Blog對象時偶爾(并不是每次都,現象是第一次不出錯,之后每次都出錯)出錯,錯誤異常:
          {org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Could not execute JDBC batch update: encountered SQLException [ORA-01483: invalid length for DATE or NUMBER bind variable]; nested exception is java.sql.BatchUpdateException: ORA-01483: invalid length for DATE or NUMBER bind variable.
          java.sql.BatchUpdateException: ORA-01483: invalid length for DATE or NUMBER bind variable

          原因分析:
          出現這個問題后,使用spring提供的org.springframework.jdbc.datasource.DriverManagerDataSource連數據庫執行相同的操作并沒有問題,由于使用的是server上配置的DataSource+ConnectionPool,數據庫驅動的獲取是server選擇的。經查找,server選擇的是%bea_home%/weblogic81/server/lib/ojdbc14.jar (version 10.1.0.6.0)。用類路徑里的驅動替代,該問題不再出現。

          解決辦法:使用version為10.1.0.4.0的ojdbc.jar代替%bea_home%/weblogic81/server/lib/ojdbc14.jar。

          轉載 
          我的weblogic9
          ojdbc14.jar 從orcale 10中找一個來odbc14.jar
          posted @ 2008-05-04 17:12 brock 閱讀(2344) | 評論 (0)編輯 收藏

          oracle的分析函數over 及開窗函數
          一:分析函數over
          Oracle從8.1.6開始提供分析函數,分析函數用于計算基于組的某種聚合值,它和聚合函數的不同之處是
          對于每個組返回多行,而聚合函數對于每個組只返回一行。
          下面通過幾個例子來說明其應用。                                       
          1:統計某商店的營業額。        
               date       sale
               1           20
               2           15
               3           14
               4           18
               5           30
              規則:按天統計:每天都統計前面幾天的總額
              得到的結果:
              DATE   SALE       SUM
              ----- -------- ------
              1      20        20           --1天           
              2      15        35           --1天+2天           
              3      14        49           --1天+2天+3天           
              4      18        67            .          
              5      30        97            .
               
          2:統計各班成績第一名的同學信息
              NAME   CLASS S                         
              ----- ----- ----------------------
              fda    1      80                     
              ffd    1      78                     
              dss    1      95                     
              cfe    2      74                     
              gds    2      92                     
              gf     3      99                     
              ddd    3      99                     
              adf    3      45                     
              asdf   3      55                     
              3dd    3      78              
             
              通過:   
              --
              select * from                                                                       
              (                                                                            
              select name,class,s,rank()over(partition by class order by s desc) mm from t2
              )                                                                            
              where mm=1
              --
              得到結果:
              NAME   CLASS S                       MM                                                                                        
              ----- ----- ---------------------- ----------------------
              dss    1      95                      1                      
              gds    2      92                      1                      
              gf     3      99                      1                      
              ddd    3      99                      1          
             
              注意:
              1.在求第一名成績的時候,不能用row_number(),因為如果同班有兩個并列第一,row_number()只返回一個結果          
              2.rank()和dense_rank()的區別是:
                --rank()是跳躍排序,有兩個第二名時接下來就是第四名
                --dense_rank()l是連續排序,有兩個第二名時仍然跟著第三名
               
               
          3.分類統計 (并顯示信息)
              A   B   C                      
              -- -- ----------------------
              m   a   2                      
              n   a   3                      
              m   a   2                      
              n   b   2                      
              n   b   1                      
              x   b   3                      
              x   b   2                      
              x   b   4                      
              h   b   3
             select a,c,sum(c)over(partition by a) from t2                
             得到結果:
             A   B   C        SUM(C)OVER(PARTITIONBYA)      
             -- -- ------- ------------------------
             h   b   3        3                        
             m   a   2        4                        
             m   a   2        4                        
             n   a   3        6                        
             n   b   2        6                        
             n   b   1        6                        
             x   b   3        9                        
             x   b   2        9                        
             x   b   4        9                        
            
             如果用sum,group by 則只能得到
             A   SUM(C)                            
             -- ----------------------
             h   3                      
             m   4                      
             n   6                      
             x   9                      
             無法得到B列值       
            
          =====

          select * from test

          數據:
          A B C
          1 1 1
          1 2 2
          1 3 3
          2 2 5
          3 4 6


          ---將B欄位值相同的對應的C 欄位值加總
          select a,b,c, SUM(C) OVER (PARTITION BY B) C_Sum
          from test

          A B C C_SUM
          1 1 1 1
          1 2 2 7
          2 2 5 7
          1 3 3 3
          3 4 6 6



          ---如果不需要已某個欄位的值分割,那就要用 null

          eg: 就是將C的欄位值summary 放在每行后面

          select a,b,c, SUM(C) OVER (PARTITION BY null) C_Sum
          from test

          A B C C_SUM
          1 1 1 17
          1 2 2 17
          1 3 3 17
          2 2 5 17
          3 4 6 17

           

          求個人工資占部門工資的百分比

          SQL> select * from salary;

          NAME DEPT SAL
          ---------- ---- -----
          a 10 2000
          b 10 3000
          c 10 5000
          d 20 4000

          SQL> select name,dept,sal,sal*100/sum(sal) over(partition by dept) percent from salary;

          NAME DEPT SAL PERCENT
          ---------- ---- ----- ----------
          a 10 2000 20
          b 10 3000 30
          c 10 5000 50
          d 20 4000 100

          二:開窗函數           
                開窗函數指定了分析函數工作的數據窗口大小,這個數據窗口大小可能會隨著行的變化而變化,舉例如下:
          1:     
             over(order by salary) 按照salary排序進行累計,order by是個默認的開窗函數
             over(partition by deptno)按照部門分區
          2:
            over(order by salary range between 5 preceding and 5 following)
             每行對應的數據窗口是之前行幅度值不超過5,之后行幅度值不超過5
             例如:對于以下列
               aa
               1
               2
               2
               2
               3
               4
               5
               6
               7
               9
             
             sum(aa)over(order by aa range between 2 preceding and 2 following)
             得出的結果是
                      AA                       SUM
                      ---------------------- -------------------------------------------------------
                      1                       10                                                      
                      2                       14                                                      
                      2                       14                                                      
                      2                       14                                                      
                      3                       18                                                      
                      4                       18                                                      
                      5                       22                                                      
                      6                       18                                                                
                      7                       22                                                                
                      9                       9                                                                 
                       
             就是說,對于aa=5的一行 ,sum為   5-1<=aa<=5+2 的和
             對于aa=2來說 ,sum=1+2+2+2+3+4=14     ;
             又如 對于aa=9 ,9-1<=aa<=9+2 只有9一個數,所以sum=9    ;
                        
          3:其它:
               over(order by salary rows between 2 preceding and 4 following)
                    每行對應的數據窗口是之前2行,之后4行
          4:下面三條語句等效:           
               over(order by salary rows between unbounded preceding and unbounded following)
                    每行對應的數據窗口是從第一行到最后一行,等效:
               over(order by salary range between unbounded preceding and unbounded following)
                     等效
               over(partition by null)
          posted @ 2007-11-26 10:54 brock 閱讀(494) | 評論 (0)編輯 收藏

          在JDK1.4中使用JAXP1.3
          由于JDK1.5以上已經自帶jaxp了,而jdk1.4以下版本需要自己添加jaxp庫文件。
           
          1。下載
          因為jwsdp-1.5中帶的jaxp是1.26版本,因此需要單獨重新下載jaxp
          https://jaxp.dev.java.net/files/documents/913/7831/JAXP_RI_20041025.class
           
          參考:
          https://jaxp.dev.java.net
          http://java.sun.com/xml/jaxp/index.jsp
           
          2.安裝:
          JAXP_RI_20041025.class所在的目錄下,進入命令行,
          運行:java -cp . JAXP_RI_20041025
          然后屏幕上列出所有解壓出來的文件名字。
          此時,在當前目錄下會有一個叫jaxp-1_3的目錄,里面有jaxp的jar文件和api文檔。
           
          3.jaxp需要用到的jar為(都在jaxp-1_3目錄下):
          dom.jar,jaxp-api.jar,sax.jar,xalan.jar,xercesImpl.jar
           
          4.接下來就可以根據自己需要來使用jaxp1.3了
           
          5.由于sun默認使用的解析器是經過其包裝后的(基于Xerces version 2.6.0 和 XSLTC version 2.5.2),比如:
          com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl(可查看javax.xml.parsers.SAXParserFactory 的源代碼),
          com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl(可查看javax.xml.transform.TransformerFactory 的源代碼).
          因此在需要使用其它解析器的時候,需要通過設置系統屬性值的方式,
          或者在$java.home/lib/jaxp.properties進行配置($java.home為System.getProperty("java.home")所得到的路徑,具體可以查看javax.xml.parsers.FactoryFinder源代碼中的 static Object find(String factoryId, String fallbackClassName) 方法)來選擇具體的解析器實現。
          jaxp.properties中支持以下屬性.
           
          示例文件如下(實際就是jaxp的默認值):
          javax.xml.transform.TransformerFactory=com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
          javax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl javax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
          javax.xml.datatype.DatatypeFactory=com.sun.org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl
           
          假如需要使用apache的解析器,那么如下操作 。
          a.下載http://www.apache.org/dist/xml/xerces-j/Xerces-J-bin.2.6.2.zip
          http://www.eu.apache.org/dist/xml/xalan-j/binaries/xalan-j_2_6_0-bin.zip
          (均為當前最新版本)
          b.解壓獲得相應的jar文件,放入classpath中。
          3.配置jaxp.properties為:
          javax.xml.transform.TransformerFactory=org.apache.xalan.xsltc.trax.TransformerFactoryImpl
          #也可以使用
          #javax.xml.transform.TransformerFactory=org.apache.xalan.processor.TransformerFactoryImpl
          javax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl
          javax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
          javax.xml.datatype.DatatypeFactory=org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl
           
           
           
           
           
          6.需要關于jaxp的調試信息,設置系統屬性jaxp.debug為1即可
             System.setProperty("jaxp.debug","1");
          或者運行時的命令為: java -Djaxp.debug=1 com.lizongbo.TestJAXP
           
           
           
          幾篇非常好的資料:
           
          JAXP 專述 Sun 的 Java API for XML 語法分析
          JAXP 再述 Sun 的 Java API for XML Parsing,1.1 版
          http://www-128.ibm.com/developerworks/cn/xml/jaxp1/index.html
           
          JAXP 1.3 的新特性,第 1 部分
          技術綜述,考察解析 API 的變化和新的驗證 API
          http://www-128.ibm.com/developerworks/cn/xml/x-jaxp13a.html
          JAXP 1.3 的新特性,第 2 部分
          XPath 功能、支持名稱空間的工具和其他改進
          http://www-128.ibm.com/developerworks/cn/xml/x-jaxp13b.html
          JAXP 全面介紹,第 1 部分
          XML 處理工具包使解析和驗證變得更容易
          http://www-128.ibm.com/developerworks/cn/xml/x-jaxp/index.html
           
          Factory模式和Abstract Factory模式
          http://www.netbei.com/Article/jsp/jsp6/200409/2771.html
           
          Java中關于XML的API一瞥
          http://www.matrix.org.cn/article/1073.html
           
           


          Trackback: http://tb.donews.net/TrackBack.aspx?PostId=418679

          posted @ 2007-10-31 14:51 brock 閱讀(297) | 評論 (0)編輯 收藏

           1select
           2 a.tsjbxx_djrq,
           3 b.sqxz_desc,
           4 a.TSJBXX_TSNR,
           5 a.TSJBXX_SSQX,
           6 c.wtxz_mc,
           7 decode(a.tsjbxx_Bjcsjg,'01','結案',
           8        '02','跟蹤',
           9        '03','改派',
          10        '04','續辦',
          11        '05','督辦',
          12        a.tsjbxx_Bjcsjg) tsjbxx_Bjcsjg
          13
          14/*
          15(CASE 
          16WHEN a.TSJBXX_BJCSJG='01' THEN '結案'
          17WHEN a.TSJBXX_BJCSJG='02' THEN '跟蹤'
          18WHEN a.TSJBXX_BJCSJG='03' THEN '改派'
          19ELSE a.tsjbxx_Bjcsjg
          20END
          21)
          22*/

          23
          24from tsgl_tsjbxx a ,code_sqxz b , code_wtxz c
          25
          26where a.Tsjbxx_Wgxzfl= b.sqxz_code(+)
          27       and  a.TSJBXX_WGWTFL=c.wtxz_id(+)



          ------------------------------------
          --select DISTINCT t.tsjbxx_blbm  from tsgl_tsjbxx t
          --select  t.tsjbxx_blbm  from tsgl_tsjbxx t group by tsjbxx_blbm
          --------------------------------------------
          posted @ 2007-10-30 12:07 brock 閱讀(155) | 評論 (0)編輯 收藏

           

          問?: 
          表:
          col1 col2 col3
          1.5 a
          1.5 b
          2.5 c
          2.5 d
          5.5 e
          5.5 f
          1.2 g
          1.2 h
          1.2 i
          1.1 j

          我想取得這樣的結果:
          1.5 a,b
          2.5 c,d
          1.1 J
          1.2 i
          5.5 e,f
          1.2 h

          也就是按col1、col2分組統計,將col3的值用“,”連接起來。

          其中col1 是 字符型 col2是數字型。這兩個字段的唯一值的個數是未知的

          不知該如何才能做到,請各位高手幫忙。


          答!: 
          1:
          id name
          1 aa
          2 bb
          3 cc
          4 dd
          1 ee
          1 xxx
          ID相同的行只顯示一條記錄并把相同ID的NAME加起來用,隔開
          怎么搞
          ???
          我需要的結果集是: 
          id name
          1 aa,ee,xxx
          2 bb
          3 cc
          4 dd
          ---------------------------------
          假設你的table 是 tmp_1;
          --------------------------------------------
          create table tmp_2 as select 
          * from tmp_1 where 1=2;
          insert into tmp_2 select distinct id,
          null from tmp_1;
          declare
          i number(
          4);
          cursor c_v is select 
          * from ttmp_1;
          begin 
          for v_n in c loop
          select count(
          *) into i from ttmp_2 b where b.name is not null and b.id=v_n.id;
          if i=0 then
          update ttmp_2 a set name 
          = v_n.name where a.id=v_n.id;
          else
          update ttmp_2 a set name 
          = name||','||v_n.name where a.id=v_n.id;
          end 
          if;
          end loop;
          end;
          /
          ------------------------------------
          或許以下的更有幫助

          給你看看duanzilin (尋)的文章吧,一個強貼,地址忘記了,還好有保存


          主  題: 原創+突發奇想+分享+散分-----關于分組后字段拼接的問題

          作  者: duanzilin (尋) 
          信 譽 值: 
          120 
          所屬論壇: Oracle 基礎和管理 
          問題點數: 
          200 
          回復次數: 
          29 
          發表時間: 
          2005-7-22 11:52:56 





          最近在論壇上,經常會看到關于分組后字段拼接的問題,
          大概是類似下列的情形:
          SQL
          > select no,q from test
          2 /

          NO Q
          ---------- ------------------------------
          001 n1
          001 n2
          001 n3
          001 n4
          001 n5
          002 m1
          003 t1
          003 t2
          003 t3
          003 t4
          003 t5
          003 t6

          12 rows selected

          最后要得到類似于如下的結果:
          001 n1;n2;n3;n4;n5
          002 m1
          003 t1;t2;t3;t4;t5;t6

          通常大家都認為這類問題無法用一句SQL解決,本來我也這么認為,可是今天無意中突然有了靈感,原來是可以這么做的:
          前幾天有人提到過sys_connect_by_path的用法,我想這里是不是也能用到這個方法,如果能做到的話,不用函數或存貯過程也可以做到了;要用到sys_connect_by_path,首先要自己構建樹型的結構,并且樹的每個分支都是單根的,例如1
          -2-3-4,不會存在1-21-〉3的情況;
          我是這么構建樹,很簡單的,看下面的結果就會知道了:
          SQL
          > select no,q,rn,lead(rn) over(partition by no order by rn) rn1
          2 from (select no,q,row_number() over(order by no,q desc) rn from test)
          3 /

          NO Q RN RN1
          ---------- ------------------------------ ---------- ----------
          001 n5 1 2
          001 n4 2 3
          001 n3 3 4
          001 n2 4 5
          001 n1 5 
          002 m1 6 
          003 t6 7 8
          003 t5 8 9
          003 t4 9 10
          003 t3 10 11
          003 t2 11 12
          003 t1 12 

          12 rows selected

          有了這個樹型的結構,接下來的事就好辦了,只要取出擁有全路徑的那個path,問題就解決了,先看no
          =001’的分組:
          select no,sys_connect_by_path(q,
          ';') result from 
          (select no,q,rn,lead(rn) over(partition by no order by rn) rn1 
          from (select no,q,row_number() over(order by no,q desc) rn from test)
          )
          start with no 
          = '001' and rn1 is null connect by rn1 = prior rn
          SQL
          > 
          6 /

          NO RESULT
          ---------- --------------------------------------------------------------------------------
          001 ;n1
          001 ;n1;n2
          001 ;n1;n2;n3
          001 ;n1;n2;n3;n4
          001 ;n1;n2;n3;n4;n5

          上面結果的最后1條就是我們要得結果了
          要得到每組的結果,可以下面這樣

          select t.
          *,
          (
          select max(sys_connect_by_path(q,
          ';')) result from 
          (select no,q,rn,lead(rn) over(partition by no order by rn) rn1 
          from (select no,q,row_number() over(order by no,q desc) rn from test)
          )
          start with no 
          = t.no and rn1 is null connect by rn1 = prior rn
          ) value
          from (select distinct no from test) t

          SQL
          > 
          10 /

          NO VALUE
          ---------- --------------------------------------------------------------------------------
          001 ;n1;n2;n3;n4;n5
          002 ;m1
          003 ;t1;t2;t3;t4;t5;t6

          對上面結果稍加處理就可以了,希望對大家有幫助:) 
          答!: 
          2:
          注意注意 

          sys_connect_by_path有長度限制,不能超過4K 
          posted @ 2007-09-13 10:14 brock 閱讀(556) | 評論 (0)編輯 收藏

          1問題: hibernate不用外鍵作查詢:
          1.1最終解辦法: 利用hibernate 的視圖功能
          Hibernate3增加了視圖功能

          1. 定義hbm

              <class name="Customer" table="customer">        
                  
          <id name="id" unsaved-value="0" column="id">
                      
          <generator class="hilo"/>
                  
          </id>        
                  
          <property name="name"  not-null="true"/>        
              
          </class>
              
              
          <class name="Supplier" table="supplier">        
                  
          <id name="id" unsaved-value="0" column="id">
                      
          <generator class="hilo"/>
                  
          </id>
                  
          <property name="name" not-null="true"/>            
              
          </class>
              
              
          <class name="All" mutable="false">    
                  <subselect>
                      select id, name from customer
                      union 
                      select id, name from supplier
                  
          </subselect>
                  
                  
          <synchronize table="customer"/>
                  
          <synchronize table="supplier"/>
                  
                  
          <id name="id" unsaved-value="0" column="id">
                      
          <generator class="hilo"/>
                  
          </id>        
                  
          <property name="name"/>        
              
          </class>


          2. 定義POJO

          pulic class Customer {
              
          public Integer id;
              
          public String name;
          }


          pulic 
          class Supplier {
              
          public Integer id;
              
          public String name;
          }


          pulic 
          class All {
              
          public Integer id;
              
          public String name;
          }


          3. 查詢

          List all = session.createQuery("from All").list();
          注意:黃色地區


          解決辦法二

          1.2 在數據表里 建視圖, 把視圖當表操作.

          解決辦法三
          1.3 設外鍵=沒說,,哈哈

          總結,不用外鍵.為了建表方便.  

          To Be Continued……



          posted @ 2007-09-04 11:02 brock 閱讀(315) | 評論 (0)編輯 收藏

          僅列出標題
          共15頁: First 上一頁 5 6 7 8 9 10 11 12 13 下一頁 Last 
          主站蜘蛛池模板: 贡觉县| 彭山县| 横山县| 开远市| 襄城县| 沭阳县| 铜鼓县| 浑源县| 大洼县| 北京市| 林甸县| 宁津县| 布拖县| 且末县| 武宣县| 乌恰县| 通州区| 靖州| 包头市| 双城市| 玛纳斯县| 府谷县| 光山县| 正镶白旗| 东方市| 南昌市| 民丰县| 上思县| 全南县| 东光县| 临夏市| 永新县| 武定县| 保德县| 麻江县| 宽城| 乌海市| 宜都市| 清镇市| 高陵县| 乌鲁木齐市|