每天進步一點點
          每天進步一點點

          2006年4月25日

              只有注冊用戶登錄后才能閱讀該文。閱讀全文
          posted @ 2008-01-16 19:06 每天進步一點點 閱讀(89) | 評論 (0)編輯 收藏
           

          在java中DecimalFormat 是表示格式的,例如

          double avprice="28234.2534";
          java.text.DecimalFormat df =new java.text.DecimalFormat("#.00");
          String aveprice=df.format(avprice);

          這種寫法就是整數保留不變,后面保留2位小數,不足則補0

          在oracle里有時需要查詢結果就保持格式

          to_char(col_name,'99999D99')

          這表示整數保持5位,小數2位,如果把9改成0,就是強制補0

          posted @ 2006-08-23 13:54 每天進步一點點 閱讀(5212) | 評論 (1)編輯 收藏
           
          package Test;
          import java.sql.*;
          /**
          ?* <p>Title: </p>
          ?*
          ?* <p>Description: </p>
          ?*
          ?* <p>Copyright: Copyright (c) 2006</p>
          ?*
          ?* <p>Company: </p>
          ?*
          ?* @author not attributable
          ?* @version 1.0
          ?*/
          public class TestConnect {
          ??? public TestConnect() {
          ??? }
          ??? static Connection con = null;
          ??? public static void main(String args[]) {
          ????? try {
          ??????? Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
          ??????? //String url="jdbc:odbc:Driver={Microsoft Access Driver(*.mdb)};DBQ=D://demo.mdb";
          ??????? String url="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=D://demo.mdb";
          ??????? //String url = "jdbc:odbc:Access";
          ??????? con = DriverManager.getConnection(url,"","");
          ??????? Statement stmt = con.createStatement();
          ??????? String sql = "select * from base";
          ??????? ResultSet rs = stmt.executeQuery(sql);
          ??????? while (rs.next()) {
          ????????? System.out.println("name= " + rs.getString(1));
          ??????? }
          ??????? rs.close();
          ??????? stmt.close();
          ??????? con.close();
          ??????? //JakartaBasicDataSource.closeBasicDataSourceConnection();
          ????? }
          ????? catch (Exception e) {
          ??????? e.printStackTrace();
          ??????? System.out.println("now you have not ActiveConnection..........break!!");
          ????? }
          ? }
          }
          posted @ 2006-08-23 13:50 每天進步一點點 閱讀(694) | 評論 (0)編輯 收藏
           

          select current_timestamp from dual
          select sysdate from dual
          select to_date('2005-08-19 12:59:59','yyyy-mm-dd hh24:mi:ss') datevalue from
          dual;
          select to_char(sysdate,'yyyymmdd') from dual;

          sqlserver的有用的日期函數- -
          作者: 日期: 2005-4-12 15:36:05 訪問次數:出處:
          ?顯示選項: 自動滾屏[左鍵停止]
          1.一個月第一天的
          SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)

          2.本周的星期一
          SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)

          3.一年的第一天
          SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)

          4.季度的第一天
          SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)

          5.當天的半夜
          SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)

          6.上個月的最后一天
          SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))

          7.去年的最后一天
          SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))

          8.本月的最后一天
          SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))

          9.本年的最后一天
          SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))

          10.本月的第一個星期一
          select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)

          1.用一條語句得出某日期所在月份的最大天數?

          SELECT DAY(DATEADD(dd, -DAY('2004-02-13'), DATEADD(mm, 1, '2004-02-13'))) AS 'Day Number'

          ?

          在oracle中有很多關于日期的函數,如:
          1、add_months()用于從一個日期值增加或減少一些月份
          date_value:=add_months(date_value,number_of_months)
          例:
          SQL> select add_months(sysdate,12) "Next Year" from dual;
          ?
          Next Year
          ----------
          13-11月-04
          ?
          SQL> select add_months(sysdate,112) "Last Year" from dual;
          ?
          Last Year
          ----------
          13-3月 -13
          ?
          SQL>?
          ?
          2、current_date()返回當前會放時區中的當前日期
          date_value:=current_date
          SQL> column sessiontimezone for a15
          SQL> select sessiontimezone,current_date from dual;
          ?
          SESSIONTIMEZONE CURRENT_DA
          --------------- ----------
          +08:00????????? 13-11月-03
          ?
          SQL> alter session set time_zone='-11:00'
          ?? 2? /
          ?
          會話已更改。
          ?
          SQL> select sessiontimezone,current_timestamp from dual;
          ?
          SESSIONTIMEZONE CURRENT_TIMESTAMP
          --------------- ------------------------------------
          -11:00????????? 12-11月-03 04.59.13.668000 下午 -11:
          ???????????????? 00
          ?
          SQL>?
          ?
          3、current_timestamp()以timestamp with time zone數據類型返回當前會放時區中的當前日期
          timestamp_with_time_zone_value:=current_timestamp([timestamp_precision])
          SQL> column sessiontimezone for a15
          SQL> column current_timestamp format a36
          SQL> select sessiontimezone,current_timestamp from dual;
          ?
          SESSIONTIMEZONE CURRENT_TIMESTAMP
          --------------- ------------------------------------
          +08:00????????? 13-11月-03 11.56.28.160000 上午 +08:
          ???????????????? 00
          ?
          SQL> alter session set time_zone='-11:00'
          ?? 2? /
          ?
          會話已更改。
          ?
          SQL> select sessiontimezone,current_timestamp from dual;
          ?
          SESSIONTIMEZONE CURRENT_TIMESTAMP
          --------------- ------------------------------------
          -11:00????????? 12-11月-03 04.58.00.243000 下午 -11:
          ???????????????? 00
          ?
          SQL>?
          ?
          4、dbtimezone()返回時區
          varchar_value:=dbtimezone
          SQL> select dbtimezone from dual;
          ?
          DBTIME
          ------
          -07:00
          ?
          SQL>?
          ?
          5、extract()找出日期或間隔值的字段值
          date_value:=extract(date_field from [datetime_value|interval_value])
          SQL> select extract(month from sysdate) "This Month" from dual;
          ?
          This Month
          ----------
          ???????? 11
          ?
          SQL> select extract(year from add_months(sysdate,36)) "3 Years Out" from dual;
          ?
          3 Years Out
          -----------
          ??????? 2006
          ?
          SQL>?
          ?
          6、last_day()返回包含了日期參數的月份的最后一天的日期
          date_value:=last_day(date_value)
          SQL> select last_day(date'2000-02-01') "Leap Yr?" from dual;
          ?
          Leap Yr?
          ----------
          29-2月 -00
          ?
          SQL> select last_day(sysdate) "Last day of this month" from dual;
          ?
          Last day o
          ----------
          30-11月-03
          ?
          SQL>?
          ?
          7、localtimestamp()返回會話中的日期和時間
          timestamp_value:=localtimestamp
          SQL> column localtimestamp format a28
          SQL> select localtimestamp from dual;
          ?
          LOCALTIMESTAMP
          ----------------------------
          13-11月-03 12.09.15.433000
          下午
          ?
          SQL> select localtimestamp,current_timestamp from dual;
          ?
          LOCALTIMESTAMP?????????????? CURRENT_TIMESTAMP
          ---------------------------- ------------------------------------
          13-11月-03 12.09.31.006000?? 13-11月-03 12.09.31.006000 下午 +08:
          下午???????????????????????? 00
          ?
          SQL> alter session set time_zone='-11:00';
          ?
          會話已更改。
          ?
          SQL> select localtimestamp,to_char(sysdate,'DD-MM-YYYY HH:MI:SS AM') "SYSDATE" from dual;
          ?
          LOCALTIMESTAMP?????????????? SYSDATE
          ---------------------------- ------------------------
          12-11月-03 05.11.31.259000?? 13-11-2003 12:11:31 下午
          下午
          ?
          SQL>?
          ?
          8、months_between()判斷兩個日期之間的月份數量
          number_value:=months_between(date_value,date_value)
          SQL> select months_between(sysdate,date'1971-05-18') from dual;
          ?
          MONTHS_BETWEEN(SYSDATE,DATE'1971-05-18')
          ----------------------------------------
          ?????????????????????????????? 389.855143
          ?
          SQL> select months_between(sysdate,date'2001-01-01') from dual;
          ?
          MONTHS_BETWEEN(SYSDATE,DATE'2001-01-01')
          ----------------------------------------
          ?????????????????????????????? 34.4035409
          ?
          SQL>?
          ?
          9、next_day()給定一個日期值,返回由第二個參數指出的日子第一次出現在的日期值(應返回相應日子的名稱字符串)


          Oracle的日期函數
          風逝空靈 發表于 2005-6-21 9:28:46


          相信很多人都有過統計某些數據的經歷,比如,要統計財務的情況,可能要按每年,每季度,每月,甚至每個星期來分別統計。那在oracle中應該怎么來寫sql語句呢,這個時候Oracle的日期函數會給我們很多幫助。

          ?常用日期型函數


          1。Sysdate 當前日期和時間


          SQL> Select sysdate from dual;

          SYSDATE
          ----------
          21-6月 -05


          2。Last_day 本月最后一天


          SQL> Select last_day(sysdate) from dual;

          LAST_DAY(S
          ----------
          30-6月 -05


          3。Add_months(d,n) 當前日期d后推n個月


          SQL> Select add_months(sysdate,2) from dual;

          ADD_MONTHS
          ----------
          21-8月 -05

          4。Months_between(f,s) 日期f和s間相差月數


          SQL> select months_between(sysdate,to_date('2005-11-12','yyyy-mm-dd'))from dual;


          MONTHS_BETWEEN(SYSDATE,TO_DATE('2005-11-12','YYYY-MM-DD'))
          ----------------------------------------------------------
          ??????????????????????????????????????????????? -4.6966741


          5。NEXT_DAY(d, day_of_week)
          返回由"day_of_week"命名的,在變量"d"指定的日期之后的第一個工作日的日期。參數"day_of_week"必須為該星期中的某一天。

          SQL> SELECT next_day(to_date('20050620','YYYYMMDD'),1) FROM dual;

          NEXT_DAY(T
          ----------
          26-6月 -05


          6。current_date()返回當前會話時區中的當前日期


          SQL> select current_date from dual;

          CURRENT_DA
          ----------
          21-6月 -05


          7。current_timestamp()以timestamp with time zone數據類型返回當前會話時區中的當前日期


          SQL> select current_timestamp from dual;

          CURRENT_TIMESTAMP
          ---------------------------------------------------------------------------
          21-6月 -05 10.13.08.220589 上午 +08:00

          8。dbtimezone()返回時區


          SQL> select dbtimezone from dual;

          DBTIME
          ------
          -08:00

          9。extract()找出日期或間隔值的字段值

          SQL> select extract(month from sysdate) "This Month" from dual;

          This Month
          ----------
          ???????? 6


          SQL> select extract(year from add_months(sysdate,36)) " Years" from dual;

          ???? Years
          ----------
          ????? 2008

          10。localtimestamp()返回會話中的日期和時間


          SQL> select localtimestamp from dual;

          LOCALTIMESTAMP
          ---------------------------------------------------------------------------
          21-6月 -05 10.18.15.855652 上午

          常用日期數據格式(該段為摘抄)

          Y或YY或YYY 年的最后一位,兩位或三位 Select to_char(sysdate,’YYY’) from dual; 002表示2002年
          SYEAR或YEAR SYEAR使公元前的年份前加一負號 Select to_char(sysdate,’SYEAR’) from dual; -1112表示公元前111 2年
          Q 季度,1~3月為第一季度 Select to_char(sysdate,’Q’) from dual; 2表示第二季度①
          MM 月份數 Select to_char(sysdate,’MM’) from dual; 12表示12月
          RM 月份的羅馬表示 Select to_char(sysdate,’RM’) from dual; IV表示4月
          Month 用9個字符長度表示的月份名 Select to_char(sysdate,’Month’) from dual; May后跟6個空格表示5月
          WW 當年第幾周 Select to_char(sysdate,’WW’) from dual; 24表示2002年6月13日為第24周
          W 本月第幾周 Select to_char(sysdate,’W’) from dual; 2002年10月1日為第1周
          DDD 當年第幾, 1月1日為001,2月1日為032 Select to_char(sysdate,’DDD’) from dual; 363 2002年1 2月2 9日為第363天
          DD 當月第幾天 Select to_char(sysdate,’DD’) from dual; 04 10月4日為第4天
          D 周內第幾天 Select to_char(sysdate,’D’) from dual; 5 2002年3月14日為星期一
          DY 周內第幾天縮寫 Select to_char(sysdate,’DY’) from dual; SUN 2002年3月24日為星期天
          HH或HH12 12進制小時數 Select to_char(sysdate,’HH’) from dual; 02 午夜2點過8分為02
          HH24 24小時制 Select to_char(sysdate,’HH24’) from dual; 14 下午2點08分為14
          MI 分鐘數(0~59) Select to_char(sysdate,’MI’) from dual; 17下午4點17分
          SS 秒數(0~59) Select to_char(sysdate,’SS’) from dual; 22 11點3分22秒
          提示注意不要將MM格式用于分鐘(分鐘應該使用MI)。MM是用于月份的格式,將它用于分鐘也能工作,但結果是錯誤的。


          現在給出一些實踐后的用法:

          1。上月末天:


          SQL> select to_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') LastDay from
          dual;

          LASTDAY
          ----------
          2005-05-31

          2。上月今天


          SQL> select to_char(add_months(sysdate,-1),'yyyy-MM-dd') PreToday from dual;


          PRETODAY
          ----------
          2005-05-21

          3.上月首天

          SQL> select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') firstDay from dual;

          FIRSTDAY
          ----------
          2005-05-01

          4.按照每周進行統計


          SQL> select to_char(sysdate,'ww') from dual group by to_char(sysdate,'ww');

          TO
          --
          25

          5。按照每月進行統計


          SQL> select to_char(sysdate,'mm') from dual group by to_char(sysdate,'mm');

          TO
          --
          06

          6。按照每季度進行統計


          SQL> select to_char(sysdate,'q') from dual group by to_char(sysdate,'q');

          T
          -
          2

          7。按照每年進行統計


          SQL> select to_char(sysdate,'yyyy') from dual group by to_char(sysdate,'yyyy');

          TO_C
          ----
          2005

          到此結束。

          ?
          閱讀全文(180) | 回復(1) | 引用通告(0) | 編輯
          ?
          ?
          回復:Oracle的日期函數
          smilepig(游客)發表評論于2005-7-25 13:36:49

          ?

          SQL> select to_char(sysdate,'DAY','NLS_DATE_LANGUAGE=''SIMPLIFIED CHINESE''') fr
          om dual;

          TO_CHA
          ------
          星期一
          ?

          posted @ 2006-08-02 22:51 每天進步一點點 閱讀(2868) | 評論 (0)編輯 收藏
           

          SQLServer和Oracle是大家經常用到的數據庫,在此感謝作者總結出這些常用函數以供大家參考。

          數學函數:
            1.絕對值
            S:select abs(-1) value
            O:select abs(-1) value from dual

            2.取整(大)
            S:select ceiling(-1.001) value
            O:select ceil(-1.001) value from dual

            3.取整(?。?
            S:select floor(-1.001) value
            O:select floor(-1.001) value from dual

            4.取整(截取)
            S:select cast(-1.002 as int) value
            O:select trunc(-1.002) value from dual

            5.四舍五入
            S:select round(1.23456,4) value 1.23460
            O:select round(1.23456,4) value from dual 1.2346

            6.e為底的冪
            S:select Exp(1) value 2.7182818284590451
            O:select Exp(1) value from dual 2.71828182

            7.取e為底的對數
            S:select log(2.7182818284590451) value 1
            O:select ln(2.7182818284590451) value from dual; 1

            8.取10為底對數
            S:select log10(10) value 1
            O:select log(10,10) value from dual; 1

            9.取平方
            S:select SQUARE(4) value 16
            O:select power(4,2) value from dual 16

            10.取平方根
            S:select SQRT(4) value 2
            O:select SQRT(4) value from dual 2

            11.求任意數為底的冪
            S:select power(3,4) value 81
            O:select power(3,4) value from dual 81

            12.取隨機數
            S:select rand() value
            O:select sys.dbms_random.value(0,1) value from dual;

            13.取符號
            S:select sign(-8) value -1
            O:select sign(-8) value from dual -1

            14.圓周率
            S:SELECT PI() value 3.1415926535897931
            O:不知道

            15.sin,cos,tan 參數都以弧度為單位
            例如:select sin(PI()/2) value 得到1(SQLServer)

            16.Asin,Acos,Atan,Atan2 返回弧度

            17.弧度角度互換(SQLServer,Oracle不知道)
            DEGREES:弧度-〉角度
            RADIANS:角度-〉弧度
          數值間比較:
            18. 求集合最大值
            S:select max(value) value from
            (select 1 value
            union
            select -2 value
            union
            select 4 value
            union
            select 3 value)a

            O:select greatest(1,-2,4,3) value from dual

            19. 求集合最小值
            S:select min(value) value from
            (select 1 value
            union
            select -2 value
            union
            select 4 value
            union
            select 3 value)a

            O:select least(1,-2,4,3) value from dual

            20.如何處理null值(F2中的null以10代替)
            S:select F1,IsNull(F2,10) value from Tbl
            O:select F1,nvl(F2,10) value from Tbl

            21.求字符序號
            S:select ascii('a') value
            O:select ascii('a') value from dual

            22.從序號求字符
            S:select char(97) value
            O:select chr(97) value from dual

            23.連接
            S:select '11'+'22'+'33' value
            O:select CONCAT('11','22')  33 value from dual

            23.子串位置 --返回3
            S:select CHARINDEX('s','sdsq',2) value
            O:select INSTR('sdsq','s',2) value from dual

            23.模糊子串的位置 --返回2,參數去掉中間%則返回7
            S:select patindex('%d%q%','sdsfasdqe') value
            O:oracle沒發現,但是instr可以通過第四個參數控制出現次數
            select INSTR('sdsfasdqe','sd',1,2) value from dual 返回6

            24.求子串
            S:select substring('abcd',2,2) value
            O:select substr('abcd',2,2) value from dual

            25.子串代替 返回aijklmnef
            S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value
            O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual

            26.子串全部替換
            S:沒發現
            O:select Translate('fasdbfasegas','fa','我' ) value from dual

            27.長度
            S:len,datalength
            O:length

            28.大小寫轉換 lower,upper

            29.單詞首字母大寫
            S:沒發現
            O:select INITCAP('abcd dsaf df') value from dual

            30.左補空格(LPAD的第一個參數為空格則同space函數)
            S:select space(10)+'abcd' value
            O:select LPAD('abcd',14) value from dual

            31.右補空格(RPAD的第一個參數為空格則同space函數)
            S:select 'abcd'+space(10) value
            O:select RPAD('abcd',14) value from dual

            32.刪除空格
            S:ltrim,rtrim
            O:ltrim,rtrim,trim

            33. 重復字符串
            S:select REPLICATE('abcd',2) value
            O:沒發現

            34.發音相似性比較(這兩個單詞返回值一樣,發音相同)
            S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')
            O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual
            SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比較soundex的差
            返回0-4,4為同音,1最高
          日期函數:
            35.系統時間
            S:select getdate() value
            O:select sysdate value from dual

            36.前后幾日
            直接與整數相加減

            37.求日期
            S:select convert(char(10),getdate(),20) value
            O:select trunc(sysdate) value from dual
            select to_char(sysdate,'yyyy-mm-dd') value from dual

            38.求時間
            S:select convert(char(8),getdate(),108) value
            O:select to_char(sysdate,'hh24:mm:ss') value from dual

          39.取日期時間的其他部分
            S:DATEPART 和 DATENAME 函數 (第一個參數決定)
            O:to_char函數 第二個參數決定

            參數---------------------------------下表需要補充
            year yy, yyyy
            quarter qq, q (季度)
            month mm, m (m O無效)
            dayofyear dy, y (O表星期)
            day dd, d (d O無效)
            week wk, ww (wk O無效)
            weekday dw (O不清楚)
            Hour hh,hh12,hh24 (hh12,hh24 S無效)
            minute mi, n (n O無效)
            second ss, s (s O無效)
            millisecond ms (O無效)
            ----------------------------------------------

            40.當月最后一天
            S:不知道
            O:select LAST_DAY(sysdate) value from dual

            41.本星期的某一天(比如星期日)
            S:不知道
            O:SELECT Next_day(sysdate,7) vaule FROM DUAL;

            42.字符串轉時間
            S:可以直接轉或者select cast('2004-09-08'as datetime) value
            O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;

            43.求兩日期某一部分的差(比如秒)
            S:select datediff(ss,getdate(),getdate()+12.3) value
            O:直接用兩個日期相減(比如d1-d2=12.3)
            SELECT (d1-d2)*24*60*60 vaule FROM DUAL;

            44.根據差值求新的日期(比如分鐘)
            S:select dateadd(mi,8,getdate()) value
            O:SELECT sysdate+8/60/24 vaule FROM DUAL;

            45.求不同時區時間
            S:不知道
            O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;

            -----時區參數,北京在東8區應該是Ydt-------
            AST ADT 大西洋標準時間
            BST BDT 白令海標準時間
            CST CDT 中部標準時間
            EST EDT 東部標準時間
            GMT 格林尼治標準時間
            HST HDT 阿拉斯加?夏威夷標準時間
            MST MDT 山區標準時間
            NST 紐芬蘭標準時間
            PST PDT 太平洋標準時間
            YST YDT YUKON標準時間

          posted @ 2006-08-02 22:46 每天進步一點點 閱讀(256) | 評論 (0)編輯 收藏
           
          package Test;
          import java.sql.*;
          /**
          ?* <p>Title: </p>
          ?*
          ?* <p>Description: </p>
          ?*
          ?* <p>Copyright: Copyright (c) 2006</p>
          ?*
          ?* <p>Company: </p>
          ?*
          ?* @author not attributable
          ?* @version 1.0
          ?*/
          public class TestConnect {
          ??? public TestConnect() {
          ??? }
          ??? static Connection con = null;
          ??? public static void main(String args[]) {
          ????? try {
          ??????? Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
          ??????? //String url="jdbc:odbc:Driver={Microsoft Access Driver(*.mdb)};DBQ=D://demo.mdb";
          ??????? String url="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=D://demo.mdb";
          ??????? //String url = "jdbc:odbc:Access";
          ??????? con = DriverManager.getConnection(url,"","");
          ??????? Statement stmt = con.createStatement();
          ??????? String sql = "select * from base";
          ??????? ResultSet rs = stmt.executeQuery(sql);
          ??????? while (rs.next()) {
          ????????? System.out.println("name= " + rs.getString(1));
          ??????? }
          ??????? rs.close();
          ??????? stmt.close();
          ??????? con.close();
          ??????? //JakartaBasicDataSource.closeBasicDataSourceConnection();
          ????? }
          ????? catch (Exception e) {
          ??????? e.printStackTrace();
          ??????? System.out.println("now you have not ActiveConnection..........break!!");
          ????? }
          ? }
          }
          posted @ 2006-07-31 17:26 每天進步一點點 閱讀(680) | 評論 (0)編輯 收藏
           

          java.text.DecimalFormat df =new java.text.DecimalFormat("#.00");
          String aveprice=df.format(avprice);

          這種寫法就是整數保留不變,后面保留2位小數,不足則補0

          在oracle里有時需要查詢結果就保持格式

          to_char(col_name,'99999D99')

          這表示整數保持5位,小數2位,如果把9改成0,就是強制補0

          posted @ 2006-06-27 14:01 每天進步一點點 閱讀(308) | 評論 (0)編輯 收藏
           

          最近幾天項目剛上線,這幾天估計不會有太多的事情。我也想學點東西,剛好利用這個時間學習一下JMS,現在就從基礎開始學習JMS,以下為網上資料轉載:
          一. JMS簡介
          1. JMS基本概念
          JMS(Java Message Service)是訪問企業消息系統的標準API,它便于消息系
          統中的Java應用程序進行消息交換,并且通過提供標準的產生、發送、接收消息的接口簡化企業應用的開發。

          2. JMS基本功能
          JMS是用于和面向消息的中間件相互通信的應用程序接口。它既支持點對點(point-to-point)的域,又支持發布/訂閱(publish/subscribe)類型的域,并且提供對下列類型的支持:經認可的消息傳遞,事務型消息的傳遞,一致性消息和具有持久性的訂閱者支持。JMS還提供了另一種方式來對您的應用與舊的后臺系統相集成。
          3. WebLogic JMS Server介紹
          WebLogic Server8.1符合JAVA規范,并通過Sun Microsystems J2EE 1.3認
          證.作為WebLogic的一部分,當然WebLogic JMS Server也完全遵從JMS規范,還支持集群,并可以應用于實際企業系統.下圖是WebLogic JMS Server體系結構.圖中可以看到WebLogic JMS Server主要組件有: WebLogic JMS servers(用于消息通信),Java客戶端,JNDI(用于域名查找), 后備存儲(用于持久消息存儲,基于文件或者JDBC數據庫).

          二. WebLogic JMS特性
          1. 消息通信模型
          JMS 支持兩種消息通信模型:點到點(point-to-point)(PTP)模型和發布/訂閱(Pub/Sub)模型。除了下列不同之外,這兩種消息通信模型非常地相似:
          PTP 模型規定了一個消息只能有一個接收者;Pub/Sub 模型允許一個消息可以有多個接收者。
          2. 消息組成
          消息傳遞系統的中心就是消息。
          一條 Message 分為三個組成部分:
          頭(header)是個標準字段集,客戶機和供應商都用它來標識和路由消息。
          屬性(property)支持把可選頭字段添加到消息。如果您的應用程序需要不使用標準頭字段對消息編目和分類,您就可以添加一個屬性到消息以實現這個編目和分類。提供 set<Type>Property(...) 和 get<Type>Property(...) 方法以設置和獲取各種 Java 類型的屬性,包括 Object。JMS 定義了一個供應商選擇提供的標準屬性集。
          消息的主體(body)包含要發送給接收應用程序的內容。每個消息接口特定于它所支持的內容類型。
          JMS 為不同類型的內容提供了它們各自的消息類型,但是所有消息都派生自 Message 接口。
          StreamMessage:包含 Java 基本數值流,用標準流操作來順序的填充和讀取。
          MapMessage:包含一組名/值對;名稱為 string 類型,而值為 Java 的基本類型。
          TextMessage:包含一個 String。
          ObjectMessage:包含一個 Serializable Java 對象;能使用 JDK 的集合類。
          BytesMessage:包含未解釋字節流: 編碼主體以匹配現存的消息格式。
          XMLMessage: 包含XML內容。擴展TextMessage,XMLMessage 類型的使用,使得消息過濾非常便利。
          3. 消息確認模式
          非事務性會話中,應用程序創建的會話有5 種確認模式,而在事務性會話中,確認模式被忽略。
          五種確認模式說明:
          AUTO_ACKNOWLEDGE:自動確認模式。一旦接收方應用程序的方法調用從處理消息處返回,會話對象就會確認消息的接收。
          CLIENT_ACKNOWLEDGE:客戶端確認模式。會話對象依賴于應用程序對被接收的消息調用一個acknowledge()方法。一旦這個方法被調用,會話會確認最后一次確認之后所有接收到的消息。這種模式允許應用程序以一個調用來接收,處理并確認一批消息。注意:在管理控制臺中,如果連接工廠的Acknowledge Policy(確認方針)屬性被設置為"Previous"(提前),但是你希望為一個給定的會話確認所有接收到的消息,那么就用最后一條消息來調用acknowledge()方法。
          DUPS_OK_ACKNOWLEDGE:允許副本的確認模式。一旦接收方應用程序的方法調用從處理消息處返回,會話對象就會確認消息的接收;而且允許重復確認。在需要考慮資源使用時,這種模式非常有效。注意:如果你的應用程序無法處理重復的消息的話,你應該避免使用這種模式。如果發送消息的初始化嘗試失敗,那么重復的消息可以被重新發送。
          NO_ACKNOWLEDGE:不確認模式。不確認收到的消息是需要的。消息發送給一個NO_ACKNOWLEDGE 會話后,它們會被WebLogic 服務器立即刪除。在這種模式下,將無法重新獲得已接收的消息,而且可能導致下面的結果:1. 消息可能丟失;和(或者)另一種情況:2. 如果發送消息的初始化嘗試失敗,會出現重復消息被發送的情況。
          MULTICAST_NO_ACKNOWLEDGE:IP組播下的不確認模式,同樣無需確認。發送給一個MULTICAST_NO_ACKNOWLEDGE會話的消息, 會共享之前所述的NO_ACKNOWLEDGE 確認模式一樣的特征。這種模式支持希望通過IP 組播方式進行消息通信的應用程序,而且無需依賴會話確認提供的服務質量。注意:如果你的應用程序無法處理消息的丟失或者重復,那么你應該避免使用這種模式。如果發送消息的初始化嘗試失敗的話,重復的消息可能會被再次發送。
          注:在上表的5 種確認模式中,AUTO_ACKNOWLEDGE ,DUPS_OK_ACKNOWLEDGE 和
          CLIENT_ACKNOWLEDGE 是JMS 規范定義的,NO_ACKNOWLEDGE 和MULTICAST_NO_ACKNOWLEDGE是WebLogic JMS 提供的。
          三. 配置JMS
          1. 創建連接工廠
          (1) 啟動WebLogic Server8.1,登錄控制臺,選中JMS Connection Factories節點,點擊右邊的" Configure a new JMS Connection Factory...";

          (2) 填寫連接工廠的名稱SendJMSFactory和JNDI名稱SendJMSFactory,點擊"Create";

          (3) 勾上"myserver",將SendJMSFactory應用到myserver;

          2. 定義后備存儲
          (1) 選中JMS Stores節點,點擊右邊的" Configure a new JMS Connection Factory...";

          (2) 填寫文件后備存儲的名稱SendFileStore和目錄Directionary E:\BEA\user_projects\domains\mydomain\sendfilestore,點擊"Create".

          3. 創建JMS服務器
          (1) 選中JMS Servers節點,點擊右邊的" Configure a new JMSServer...";

          (2) 填寫JMS服務器的名稱SendJMSServer和Paging Store設為" SendFileStore",點擊"Create";

          (3) Target選中"myserver",將SendJMSServer應用到myserver.

          4. 創建消息隊列
          (1) 展開"SendJMSServer"節點,點擊" Configure a new JMS Queue...";

          (2) 填寫消息隊列的名稱SendJMSQueue和JNDI名稱SendJMSQueue,點擊"Create";

          四. JMS應用程序
          一個 JMS 應用程序由下列元素組成:
          JMS 客戶機。 用 JMS API 發送和接收消息的 Java 程序。
          非 JMS(Non-JMS)客戶機。 認識到這一點很重要 - 舊的程序經常成為整個 JMS 應用程序的一部分,而且它們的包含應該在設計時預先考慮。
          消息。 在 JMS 和非 JMS 客戶機之間交換的消息的格式和內容是 JMS 應用程序設計所必須考慮的部分。
          JMS 供應商。供應商必須提供特定于其 MOM 產品的具體的實現。
          受管對象。 消息傳遞系統供應商的管理員創建了一個對象,它獨立于供應商專有的技術。包括連接工廠ConnectionFactory和目的Destination。
          一種典型的 JMS 程序需要經過下列步驟才能開始消息產生和使用:
          通過 JNDI 查找 ConnectionFactory。
          通過 JNDI 查找一個或多個 Destination。
          用 ConnectionFactory 創建一個 Connection。
          用 Connection 創建一個或多個 Session。
          用 Session 和 Destination 創建所需的 MessageProducer 和 MessageConsumer。
          啟動 Connection。
          下面利用上面配置的JMS資源演示點對點消息發送和接收的過程。
          五. 設計消息發送端
          1. 使用的JMS資源
          服務器URL: t3://localhost:80
          連接工廠: SendJMSFactory
          隊列: SendJMSQueue
          2. 設計步驟
          初始化JNDI Tree
          Hashtable env = new Hashtable();
          env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
          env.put(Context.PROVIDER_URL, PROVIDER_URL);
          return new InitialContext(env);
          lookup ConnectionFactory
          qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);
          lookup Destination
          queue = (Queue) ctx.lookup(queueName);
          用 ConnectionFactory 創建Connection
          qcon = qconFactory.createQueueConnection();
          用 Connection 創建一個Session
          qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
          用 Session 和 Destination 創建MessageProducer
          qsender = qsession.createSender(queue);
          啟動 Connection。
          qcon.start();
          發送消息
          msg = qsession.createTextMessage();
          msg.setText(message);
          qsender.send(msg);
          3. 源代碼
          package jmssample;

          import java.util.Hashtable;
          import javax.jms.*;
          import javax.naming.Context;
          import javax.naming.InitialContext;
          import javax.naming.NamingException;
          import java.io.BufferedReader;
          import java.io.IOException;
          import java.io.InputStreamReader;

          /** This example shows how to establish a connection
          * and send messages to the JMS queue. The classes in this
          * package operate on the same JMS queue. Run the classes together to
          * witness messages being sent and received, and to browse the queue
          * for messages. The class is used to send messages to the queue.
          *
          * @author Copyright (c) 1999-2003 by BEA Systems, Inc. All Rights Reserved.
          */
          public class QueueSend
          {
          // Defines the JNDI context factory.
          public final static String JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";

          // Defines the JNDI provider url.
          public final static String PROVIDER_URL=" t3://localhost:80";

          // Defines the JMS connection factory for the queue.
          public final static String JMS_FACTORY="SendJMSFactory";

          // Defines the queue.
          public final static String QUEUE="SendJMSQueue";


          private QueueConnectionFactory qconFactory;
          private QueueConnection qcon;
          private QueueSession qsession;
          private QueueSender qsender;
          private Queue queue;
          private TextMessage msg;

          /**
          * Creates all the necessary objects for sending
          * messages to a JMS queue.
          *
          * @param ctx JNDI initial context
          * @param queueName name of queue
          * @exception NamingException if operation cannot be performed
          * @exception JMSException if JMS fails to initialize due to internal error
          */
          public void init(Context ctx, String queueName)
          throws NamingException, JMSException
          {
          qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);
          qcon = qconFactory.createQueueConnection();
          qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
          queue = (Queue) ctx.lookup(queueName);
          qsender = qsession.createSender(queue);
          msg = qsession.createTextMessage();
          qcon.start();
          }

          /**
          * Sends a message to a JMS queue.
          *
          * @param message message to be sent
          * @exception JMSException if JMS fails to send message due to internal error
          */
          public void send(String message) throws JMSException {
          msg.setText(message);
          qsender.send(msg);
          }

          /**
          * Closes JMS objects.
          * @exception JMSException if JMS fails to close objects due to internal error
          */
          public void close() throws JMSException {
          qsender.close();
          qsession.close();
          qcon.close();
          }
          /** main() method.
          *
          * @param args WebLogic Server URL
          * @exception Exception if operation fails
          */
          public static void main(String[] args) throws Exception {
          InitialContext ic = getInitialContext();
          QueueSend qs = new QueueSend();
          qs.init(ic, QUEUE);
          readAndSend(qs);
          qs.close();
          }

          private static void readAndSend(QueueSend qs)
          throws IOException, JMSException
          {
          BufferedReader msgStream = new BufferedReader(new InputStreamReader(System.in));
          String line=null;
          boolean quitNow = false;
          do {
          System.out.print("Enter message (\"quit\" to quit): ");
          line = msgStream.readLine();
          if (line != null && line.trim().length() != 0) {
          qs.send(line);
          System.out.println("JMS Message Sent: "+line+"\n");
          quitNow = line.equalsIgnoreCase("quit");
          }
          } while (! quitNow);

          }

          private static InitialContext getInitialContext()
          throws NamingException
          {
          Hashtable env = new Hashtable();
          env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
          env.put(Context.PROVIDER_URL, PROVIDER_URL);
          return new InitialContext(env);
          }

          }

          六. 設計消息接收端
          1. 使用的JMS資源
          服務器URL: t3://localhost:80
          連接工廠: SendJMSFactory
          隊列: SendJMSQueue
          2. 設計步驟
          初始化JNDI Tree
          Hashtable env = new Hashtable();
          env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
          env.put(Context.PROVIDER_URL, PROVIDER_URL);
          return new InitialContext(env);
          lookup ConnectionFactory
          qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);
          lookup Destination
          queue = (Queue) ctx.lookup(queueName);
          用 ConnectionFactory 創建Connection
          qcon = qconFactory.createQueueConnection();
          用 Connection 創建一個Session
          qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
          用 Session 和 Destination 創建MessageConsumer
          qreceiver = qsession.createReceiver(queue);
          設置監聽
          qreceiver.setMessageListener(this);
          啟動 Connection
          qcon.start();
          3. 源代碼
          package jmssample;

          import java.util.Hashtable;
          import javax.jms.*;
          import javax.naming.Context;
          import javax.naming.InitialContext;
          import javax.naming.NamingException;
          import java.util.Hashtable;
          import javax.jms.*;
          import javax.naming.Context;
          import javax.naming.InitialContext;
          import javax.naming.NamingException;

          /**
          * This example shows how to establish a connection to
          * and receive messages from a JMS queue. The classes in this
          * package operate on the same JMS queue. Run the classes together to
          * witness messages being sent and received, and to browse the queue
          * for messages. This class is used to receive and remove messages
          * from the queue.
          *
          * @author Copyright (c) 1999-2003 by BEA Systems, Inc. All Rights Reserved.
          */
          public class QueueReceive implements MessageListener
          {
          // Defines the JNDI context factory.
          public final static String JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";

          // Defines the JNDI provider url.
          public final static String PROVIDER_URL=" t3://localhost:80";

          // Defines the JMS connection factory for the queue.
          public final static String JMS_FACTORY="SendJMSFactory";

          // Defines the queue.
          public final static String QUEUE="SendJMSQueue";

          private QueueConnectionFactory qconFactory;
          private QueueConnection qcon;
          private QueueSession qsession;
          private QueueReceiver qreceiver;
          private Queue queue;
          private boolean quit = false;

          /**
          * Message listener interface.
          * @param msg message
          */
          public void onMessage(Message msg)
          {
          try {
          String msgText;
          if (msg instanceof TextMessage) {
          msgText = ((TextMessage)msg).getText();
          } else {
          msgText = msg.toString();
          }

          System.out.println("Message Received: "+ msgText );

          if (msgText.equalsIgnoreCase("quit")) {
          synchronized(this) {
          quit = true;
          this.notifyAll(); // Notify main thread to quit
          }
          }
          } catch (JMSException jmse) {
          jmse.printStackTrace();
          }
          }

          /**
          * Creates all the necessary objects for receiving
          * messages from a JMS queue.
          *
          * @param ctx JNDI initial context
          * @param queueName name of queue
          * @exception NamingException if operation cannot be performed
          * @exception JMSException if JMS fails to initialize due to internal error
          */
          public void init(Context ctx, String queueName)
          throws NamingException, JMSException
          {
          qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);
          qcon = qconFactory.createQueueConnection();
          qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
          queue = (Queue) ctx.lookup(queueName);
          qreceiver = qsession.createReceiver(queue);
          qreceiver.setMessageListener(this);
          qcon.start();
          }

          /**
          * Closes JMS objects.
          * @exception JMSException if JMS fails to close objects due to internal error
          */
          public void close()throws JMSException
          {
          qreceiver.close();
          qsession.close();
          qcon.close();
          }
          /**
          * main() method.
          *
          * @param args WebLogic Server URL
          * @exception Exception if execution fails
          */

          public static void main(String[] args) throws Exception {

          InitialContext ic = getInitialContext();
          QueueReceive qr = new QueueReceive();
          qr.init(ic, QUEUE);

          System.out.println("JMS Ready To Receive Messages (To quit, send a \"quit\" message).");

          // Wait until a "quit" message has been received.
          synchronized(qr) {
          while (! qr.quit) {
          try {
          qr.wait();
          } catch (InterruptedException ie) {}
          }
          }
          qr.close();
          }
          private static InitialContext getInitialContext()
          throws NamingException
          {
          Hashtable env = new Hashtable();
          env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
          env.put(Context.PROVIDER_URL, PROVIDER_URL);
          return new InitialContext(env);
          }
          }
          七. 測試消息發送和接收
          1. 設置WebLogic Classpath;

          2. 轉到發送接收程序目錄編譯文件;

          3. 執行接受程序;
          4. 打開另一窗口,執行發送程序;
          5. 輸入發送消息"quit",接收程序結束.

          posted @ 2006-05-31 23:25 每天進步一點點 閱讀(868) | 評論 (0)編輯 收藏
           
          今天心情郁悶到了極點,看著自己來深圳也一年了收獲在什么地方呢?不解!是不是我現在的思維方式真的不對,或許我真要換一種方式活著.現在對未來真的是一片茫然,對自己的前途真的沒有什么好的規劃.難道就真的這樣慢慢死去嗎?這樣每天活著我感覺靈魂都在死去.這樣每天如行尸走肉一樣在世上殘喘,難道有意義嗎?曾經的誓言,曾經的理想,曾經的抱負,曾經的......難道都將隨著這每天模式般的生活而飛灰湮滅嗎?
          眼前的路在哪里......真的很渺茫!每天這樣只有生存的意義,而沒有生活的意義.
          posted @ 2006-05-06 14:03 每天進步一點點 閱讀(238) | 評論 (0)編輯 收藏
           
          今天又暈了一天,工作量太大了,做了一天但是離進度還很遠,我想明天早上6點就去做
          posted @ 2006-04-25 20:21 每天進步一點點 閱讀(237) | 評論 (0)編輯 收藏
           
          主站蜘蛛池模板: 都兰县| 桦南县| 松阳县| 泸州市| 韶山市| 万宁市| 道真| 黄梅县| 博乐市| 巴彦淖尔市| 武邑县| 盖州市| 林州市| 五河县| 建宁县| 平阳县| 钟祥市| 克山县| 原平市| 吴桥县| 乌鲁木齐市| 克什克腾旗| 准格尔旗| 晋州市| 祥云县| 乌兰浩特市| 柳林县| 罗田县| 大城县| 洛宁县| 水富县| 定远县| 仪陇县| 凤城市| 彭泽县| 南阳市| 宜君县| 克拉玛依市| 上虞市| 安达市| 武城县|