tbwshc

          2013年9月17日 #

          Java調(diào)用SQL Server的存儲過程詳解

          1使用不帶參數(shù)的存儲過程

            1

            {call procedure-name}

            作為實(shí)例,在 SQL Server 2005 AdventureWorks 示例數(shù)據(jù)庫中創(chuàng)建以下存儲過程:

            CREATE PROCEDURE GetContactFormalNames

            AS BEGIN SELECT TOP 10 Title + ' ' + FirstName + ' ' + LastName AS FormalName

            FROM Person.Contact END

            此存儲過程返回單個結(jié)果集,其中包含一列數(shù)據(jù)(由 Person.Contact 表中前十個聯(lián)系人的稱呼、名稱和姓氏組成)。

            在下面的實(shí)例中,將向此函數(shù)傳遞 AdventureWorks 示例tb數(shù)據(jù)庫的打開連接,然后使用 executeQuery 方法調(diào)用 GetContactFormalNames 存儲過程。

            public static void executeSprocNoParams(Connection con)

            …{

            try …{

            Statement stmt = con.createStatement();

            ResultSet rs = stmt.executeQuery("{call dbo.GetContactFormalNames}");

            while (rs.next())

            …{

            System.out.println(rs.getString("FormalName"));

            }

            rs.close();

            stmt.close();

            }

            catch (Exception e)

            …{

            e.printStackTrace();

            }

            }

            2使用帶有輸入?yún)?shù)的存儲過程

            使用 JDBC 驅(qū)動程序調(diào)用帶參數(shù)的存儲過程時,必須結(jié)合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉(zhuǎn)義序列。帶有 IN 參數(shù)的 call 轉(zhuǎn)義序列的語法如下所示:

            {call procedure-name[([parameter][,[parameter]]…)]}http://jie.baijiale.94ibc.com

            構(gòu)造 call 轉(zhuǎn)義序列時,請使用 ?(問號)字符來指定 IN 參數(shù)。此字符充當(dāng)要傳遞給該存儲過程的參數(shù)值的占位符。可以使用 SQLServerPreparedStatement 類的 setter 方法之一為參數(shù)指定值。可使用的 setter 方法由 IN 參數(shù)的數(shù)據(jù)類型決定。

            向 setter 方法傳遞值時,不僅需要指定要在參數(shù)中使用的實(shí)際值,還必須指定參數(shù)在存儲過程中的序數(shù)位置。例如,如果存儲過程包含單個 IN 參數(shù),則其序數(shù)值為 1.如果存儲過程包含兩個參數(shù),則第一個序數(shù)值為 1,第二個序數(shù)值為 2.

            作為如何調(diào)用包含 IN 參數(shù)的存儲過程的實(shí)例,使用 SQL Server 2005 AdventureWorks 示例數(shù)據(jù)庫中的 uspGetEmployeeManagers 存儲過程。此存儲過程接受名為 EmployeeID 的單個輸入?yún)?shù)

          posted @ 2013-10-24 17:05 chen11-1 閱讀(639) | 評論 (0)編輯 收藏

          Java中生成文件的10項(xiàng)建議

          1. 記住 - "越少越好"并非總是如此(Keep in Mind – "Less is more" is not always better)。 – 高效率的代碼是件好事,但很多情況下,并非代碼行數(shù)越少效率就越高

            2. 不要把簡單事情復(fù)雜化(Do not complicate things)。 – 我曾經(jīng)這么做過,我相信你也一樣。開發(fā)者都傾向于采用復(fù)雜方式解決簡單問題。我們在一個只有5個用戶的系統(tǒng)中引入EJB,為一個并不需要框架的應(yīng)用實(shí)現(xiàn)一套框架,采用屬性文件、采用面向tb對象解決方案、使用線程,而這些根本用不著。為什么會這么做?一些人可能不知道有更好的解決方案,但另一些人可能故意這樣做來學(xué)習(xí)新知識,或僅僅是因?yàn)橛腥ぁδ切┎恢栏媒鉀Q方案的人,要多聽有經(jīng)驗(yàn)程序員的建議。對于那些純粹出于個人目的而將設(shè)計復(fù)雜化的人,我建議你要更加專業(yè)一點(diǎn)。
            3. 不要"硬編碼"(No hard coding please)。 – 由于時間緊迫,開發(fā)者總是會忘記或故意忽略這一條。然而另一種可能是,遵循這條戒律,我們就不會陷入"時間緊迫"的困境。定義一個static final 變量,增加一行代碼,又能花多長時間呢?

            4. 為代碼添加注釋(Add comments to your code)。 – 每個人都知道這一點(diǎn),但不是每個人都會這么做。你有多少次"忘記"添加注釋了?確實(shí),注釋不會為你的程序增加任何函數(shù)功能。但是,有多少次,看到2周前寫的代碼,你都記不起它是干什么的?你很幸運(yùn),那些未注釋的代碼是你自己寫的,你腦海中還會有殘存的印象。非常不幸,大多時候,代碼是別人寫的,并且那個人很可能已經(jīng)離開公司了。有句諺語說的好:"有來有往,互惠互利",因此程序員應(yīng)該體諒彼此(還有你自己),給你的代碼加上注釋。

           

          posted @ 2013-10-24 17:04 chen11-1 閱讀(327) | 評論 (0)編輯 收藏

          針對Java Excel API及詳細(xì)教程

          時在java開發(fā)中會操作excel表格,其實(shí)操作起來也特別簡單。這里把前期操作步驟說一下,本文會簡單的介紹一個開放源碼項(xiàng)目:Java Excel Api,使用它大家就可以方便的操作Excel文件了。

            首先下載好:Java Excel Api,這個文件我已經(jīng)和 JAVA+Excel+API詳細(xì)教程。pdf一并壓縮上傳了,感興趣的朋友可以下載!

            我這里用的開發(fā)平臺是Eclipse,這里我把操作簡單說一下:

            1, 建,立java項(xiàng)目,在這個項(xiàng)目在建立一個新的文件夾lib;

            2, 將jxl.jar,即Java Excel Ap,復(fù)制到lib

            3,然后右鍵點(diǎn)擊這個java項(xiàng)目,tb選擇Propertieshttp://jie.baijiale.ibc198.com

            4,在左側(cè)列表里選中Java Build Path ,右側(cè)選中Libraries

            5,點(diǎn)擊Add JARs

            6, 然后去選擇這個項(xiàng)目中l(wèi)ib文件夾中的jxl.jar,點(diǎn)擊確定

            成功后,項(xiàng)目中會多一個文件夾為:Referenced Libraries

            準(zhǔn)備工作完成后,就可以去操作excel了,

          posted @ 2013-10-24 17:02 chen11-1 閱讀(289) | 評論 (0)編輯 收藏

          框架Quart在Java中任務(wù)調(diào)度的使用

            Quartz框架是一個全功能、開源的任務(wù)調(diào)度服務(wù),可以集成幾乎任何的java應(yīng)用程序—從小的單片機(jī)系統(tǒng)到大型的電子商務(wù)系統(tǒng)。Quartz可以執(zhí)行上千上萬的任務(wù)調(diào)度。

            核心概念

            Quartz核心的概念:scheduler任務(wù)調(diào)度、Job任務(wù)、Trigger觸發(fā)器、JobDetail任務(wù)細(xì)節(jié)

            Job任務(wù):其實(shí)Job是接口,其中只有一個execute方法:

            package org.quartz;

            public abstract interface Job

            {

            public abstract void execute(JobExecutionContext paramJobExecutionContext)

            throws JobExecutionException;

            }

            我們開發(fā)者只要實(shí)現(xiàn)此接口,實(shí)現(xiàn)execute方法即可。把我們想做的事情,在execute中執(zhí)行即可。

            JobDetail:任務(wù)細(xì)節(jié),Quartz執(zhí)行Job時,需要新建個Job實(shí)例,但是不能直接操作Job類,所以通過JobDetail來獲取Job的名稱、描述信息。

            Trigger觸發(fā)器:執(zhí)行任務(wù)的規(guī)則;比如每天,每小時等。

            一般情況使用SimpleTrigger,和CronTrigger,這個觸發(fā)器實(shí)現(xiàn)了Trigger接口。

            對于復(fù)雜的時間表達(dá)式來說,比如每個月15日上午幾點(diǎn)幾分,使用CronTrigger

            對于簡單的時間來說,比如每天執(zhí)行幾次,使用SimpleTrigger

            scheduler任務(wù)調(diào)度:是最核心的概念,需要把JobDetail和Trigger注冊到scheduler中,才可以執(zhí)行。

            注意:

            不同的版本的jar包,具體的操作不太相同,但是tbw思路是相同的;比如1.8.6jar包中,JobDetail是個類,直接通過構(gòu)造方法與Job類關(guān)聯(lián)。SimpleTrigger和CornTrigger是類;在2.0.2jar包中,JobDetail是個接口,SimpleTrigger和CornTrigger是接口

            不同版本測試:

            1.8.6jar包:

            [html]

            package com.test;

            import java.util.Date;

            import org.quartz.Job;

            import org.quartz.JobExecutionContext;

            import org.quartz.JobExecutionException;

            /**

            * 需要執(zhí)行的任務(wù)

            * @author lhy

            *

            */

            public class MyJob implements Job {

            @Override

            //把要執(zhí)行的操作,寫在execute方法中

            public void execute(JobExecutionContext arg0) throws JobExecutionException {

            System.out.println("測試Quartz"+new Date());

            }

            }

            package com.test;

            import java.util.Date;

            import org.quartz.Job;

            import org.quartz.JobExecutionContext;

            import org.quartz.JobExecutionException;

            /**

            * 需要執(zhí)行的任務(wù)

            * @author lhy

            *

            */

            public class MyJob implements Job {

            @Override

            //把要執(zhí)行的操作,寫在execute方法中

            public void execute(JobExecutionContext arg0) throws JobExecutionException {

            System.out.println("測試Quartz"+new Date());

            }

            }

            使用SimpleTrigger觸發(fā)器

            [html]

            package com.test;

            import java.util.Date;

            import org.quartz.JobDetail;

            import org.quartz.Scheduler;

            import org.quartz.SchedulerException;

            import org.quartz.SchedulerFactory;

            import org.quartz.SimpleTrigger;

            import org.quartz.impl.StdSchedulerFactory;

            /**

            * 調(diào)用任務(wù)的類

            * @author lhy

            *

            */

            public class SchedulerTest {

            public static void main(String[] args) {

            //通過schedulerFactory獲取一個調(diào)度器

            SchedulerFactory schedulerfactory=new StdSchedulerFactory();

            Scheduler scheduler=null;

            try{

            // 通過schedulerFactory獲取一個調(diào)度器

            scheduler=schedulerfactory.getScheduler();

            // 創(chuàng)建jobDetail實(shí)例,綁定Job實(shí)現(xiàn)類

            // 指明job的名稱,所在組的名稱,以及綁定job類

            JobDetail jobDetail=new JobDetail("job1", "jgroup1", MyJob.class);

            // 定義調(diào)度觸發(fā)規(guī)則,比如每1秒運(yùn)行一次,共運(yùn)行8次

            SimpleTrigger simpleTrigger=new SimpleTrigger("simpleTrigger","triggerGroup");

            // 馬上啟動

            simpleTrigger.setStartTime(new Date());

            // 間隔時間

            simpleTrigger.setRepeatInterval(1000);

            // 運(yùn)行次數(shù)

            simpleTrigger.setRepeatCount(8);

            // 把作業(yè)和觸發(fā)器注冊到任務(wù)調(diào)度中

            scheduler.scheduleJob(jobDetail, simpleTrigger);

            // 啟動調(diào)度

            scheduler.start();

            }catch(SchedulerException e){

            e.printStackTrace();

            }

            }

            }

            package com.test;

            import java.util.Date;

            import org.quartz.JobDetail;

            import org.quartz.Scheduler;

            import org.quartz.SchedulerException;

            import org.quartz.SchedulerFactory;

            import org.quartz.SimpleTrigger;

            import org.quartz.impl.StdSchedulerFactory;

            /**

            * 調(diào)用任務(wù)的類

            * @author lhy

            *

            */

            public class SchedulerTest {

            public static void main(String[] args) {

            //通過schedulerFactory獲取一個調(diào)度器

            SchedulerFactory schedulerfactory=new StdSchedulerFactory();

            Scheduler scheduler=null;

            try{

            // 通過schedulerFactory獲取一個調(diào)度器

            scheduler=schedulerfactory.getScheduler();

            // 創(chuàng)建jobDetail實(shí)例,綁定Job實(shí)現(xiàn)類

            // 指明job的名稱,所在組的名稱,以及綁定job類
           JobDetail jobDetail=new JobDetail("job1", "jgroup1", MyJob.class);

            // 定義調(diào)度觸發(fā)規(guī)則,比如每1秒運(yùn)行一次,共運(yùn)行8次

            SimpleTrigger simpleTrigger=new SimpleTrigger("simpleTrigger","triggerGroup");

            // 馬上啟動

            simpleTrigger.setStartTime(new Date());

            // 間隔時間

            simpleTrigger.setRepeatInterval(1000);

            // 運(yùn)行次數(shù)

            simpleTrigger.setRepeatCount(8);

            // 把作業(yè)和觸發(fā)器注冊到任務(wù)調(diào)度中

            scheduler.scheduleJob(jobDetail, simpleTrigger);

            // 啟動調(diào)度

            scheduler.start();

            }catch(SchedulerException e){

            e.printStackTrace();

            }

            }

            } 若使用CornTrigger觸發(fā)器:

            [html]

            package com.test;

            import java.util.Date;

            import org.quartz.CronTrigger;

            import org.quartz.JobDetail;

            import org.quartz.Scheduler;

            import org.quartz.SchedulerException;

            import org.quartz.SchedulerFactory;

            import org.quartz.SimpleTrigger;

            import org.quartz.impl.StdSchedulerFactory;

            /**

            * 調(diào)用任務(wù)的類

            * @author lhy

            *

            */

            public class CronTriggerTest {

            public static void main(String[] args) {

            //通過schedulerFactory獲取一個調(diào)度器

            SchedulerFactory schedulerfactory=new StdSchedulerFactory();

            Scheduler scheduler=null;

            try{

            // 通過schedulerFactory獲取一個調(diào)度器

            scheduler=schedulerfactory.getScheduler();

            // 創(chuàng)建jobDetail實(shí)例,綁定Job實(shí)現(xiàn)類

            // 指明job的名稱,所在組的名稱,以及綁定job類

            JobDetail jobDetail=new JobDetail("job1", "jgroup1", MyJob.class);

            // 定義調(diào)度觸發(fā)規(guī)則,每天上午10:15執(zhí)行

            CronTrigger cornTrigger=new CronTrigger("cronTrigger","triggerGroup");

            // 執(zhí)行規(guī)則表達(dá)式

            cornTrigger.setCronExpression("0 15 10 * * ? *");

            // 把作業(yè)和觸發(fā)器注冊到任務(wù)調(diào)度中

            scheduler.scheduleJob(jobDetail, cornTrigger);

            // 啟動調(diào)度

            scheduler.start();

            }catch(Exception e){

            e.printStackTrace();

            }

            }

            }

            package com.test;

            import java.util.Date;

            import org.quartz.CronTrigger;

            import org.quartz.JobDetail;

            import org.quartz.Scheduler;

            import org.quartz.SchedulerException;

            import org.quartz.SchedulerFactory;

            import org.quartz.SimpleTrigger;

            import org.quartz.impl.StdSchedulerFactory;

            /**

            * 調(diào)用任務(wù)的類

            * @author lhy

            *

            */

            public class CronTriggerTest {

            public static void main(String[] args) {

            //通過schedulerFactory獲取一個調(diào)度器

            SchedulerFactory schedulerfactory=new StdSchedulerFactory();

            Scheduler scheduler=null;

            try{

            // 通過schedulerFactory獲取一個調(diào)度器

            scheduler=schedulerfactory.getScheduler();

            // 創(chuàng)建jobDetail實(shí)例,綁定Job實(shí)現(xiàn)類

            // 指明job的名稱,所在組的名稱,以及綁定job類

            JobDetail jobDetail=new JobDetail("job1", "jgroup1", MyJob.class);

            // 定義調(diào)度觸發(fā)規(guī)則,每天上午10:15執(zhí)行

            CronTrigger cornTrigger=new CronTrigger("cronTrigger","triggerGroup");

            // 執(zhí)行規(guī)則表達(dá)式

            cornTrigger.setCronExpression("0 15 10 * * ? *");

            // 把作業(yè)和觸發(fā)器注冊到任務(wù)調(diào)度中

            scheduler.scheduleJob(jobDetail, cornTrigger);

            // 啟動調(diào)度

            scheduler.start();

            }catch(Exception e){

            e.printStackTrace();

            }

            }

            }

            對于2.0.2jar包如下:

            其中的job類不變,主要是調(diào)度類如下:

            [html]

            package com.test;

            import java.util.Date;

            import org.quartz.CronScheduleBuilder;

            import org.quartz.JobBuilder;

            import org.quartz.JobDetail;

            import org.quartz.Scheduler;

            import org.quartz.SchedulerException;

            import org.quartz.SchedulerFactory;

            import org.quartz.SimpleScheduleBuilder;

            import org.quartz.Trigger;

            import org.quartz.TriggerBuilder;

            import org.quartz.impl.StdSchedulerFactory;

            /**

            * 調(diào)用任務(wù)的類

            * @author lhy

            *

            */

            public class SchedulerTest {

            public static void main(String[] args) {

            //通過schedulerFactory獲取一個調(diào)度器

            SchedulerFactory schedulerfactory=new StdSchedulerFactory();

            Scheduler scheduler=null;

            try{

            // 通過schedulerFactory獲取一個調(diào)度器

            scheduler=schedulerfactory.getScheduler();

            // 創(chuàng)建jobDetail實(shí)例,綁定Job實(shí)現(xiàn)類

            // 指明job的名稱,所在組的名稱,以及綁定job類

            JobDetail job=JobBuilder.newJob(MyJob.class).withIdentity("job1", "jgroup1").build();

            // 定義調(diào)度觸發(fā)規(guī)則

            // 使用simpleTrigger規(guī)則

            // Trigger trigger=TriggerBuilder.newTrigger().withIdentity("simpleTrigger", "triggerGroup")

            // .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(1).withRepeatCount(8))

            // .startNow().build();

            // 使用cornTrigger規(guī)則 每天10點(diǎn)42分

            Trigger trigger=TriggerBuilder.newTrigger().withIdentity("simpleTrigger", "triggerGroup")

            .withSchedule(CronScheduleBuilder.cronSchedule("0 42 10 * * ? *"))

            .startNow().build();

            // 把作業(yè)和觸發(fā)器注冊到任務(wù)調(diào)度中

            scheduler.scheduleJob(job, trigger);

            // 啟動調(diào)度

            scheduler.start();

            }catch(Exception e){

            e.printStackTrace();

            }

            }

            }

            package com.test;

            import java.util.Date;

            import org.quartz.CronScheduleBuilder;

            import org.quartz.JobBuilder;

            import org.quartz.JobDetail;

            import org.quartz.Scheduler;

            import org.quartz.SchedulerException;

            import org.quartz.SchedulerFactory;

            import org.quartz.SimpleScheduleBuilder;

            import org.quartz.Trigger;

            import org.quartz.TriggerBuilder;

            import org.quartz.impl.StdSchedulerFactory;

            /**

            * 調(diào)用任務(wù)的類

            * @author lhy

            *

            */

            public class SchedulerTest {

            public static void main(String[] args) {

            //通過schedulerFactory獲取一個調(diào)度器

            SchedulerFactory schedulerfactory=new StdSchedulerFactory();

            Scheduler scheduler=null;

            try{

            // 通過schedulerFactory獲取一個調(diào)度器

            scheduler=schedulerfactory.getScheduler();

            // 創(chuàng)建jobDetail實(shí)例,綁定Job實(shí)現(xiàn)類

            // 指明job的名稱,所在組的名稱,以及綁定job類

            JobDetail job=JobBuilder.newJob(MyJob.class).withIdentity("job1", "jgroup1").build();

            // 定義調(diào)度觸發(fā)規(guī)則

            // 使用simpleTrigger規(guī)則

            // Trigger trigger=TriggerBuilder.newTrigger().withIdentity("simpleTrigger", "triggerGroup")

            // .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(1).withRepeatCount(8))

            // .startNow().build();

            // 使用cornTrigger規(guī)則 每天10點(diǎn)42分

            Trigger trigger=TriggerBuilder.newTrigger().withIdentity("simpleTrigger", "triggerGroup")

            .withSchedule(CronScheduleBuilder.cronSchedule("0 42 10 * * ? *"))

            .startNow().build();

            // 把作業(yè)和觸發(fā)器注冊到任務(wù)調(diào)度中

            scheduler.scheduleJob(job, trigger);

            // 啟動調(diào)度

            scheduler.start();

            }catch(Exception e){

            e.printStackTrace();

            }

            }

            }

            上述demo下載:1.8版本demo下載

            2.0版本demo下載

            對于CornExpress講解如下:

            字段 允許值 允許的特殊字符

            秒 0-59 , - * /

            分 0-59 , - * /

            小時 0-23 , - * /

            日期 1-31 , - * ? / L W C

            月份 1-12 或者 JAN-DEC , - * /

            星期 1-7 或者 SUN-SAT , - * ? / L C #

            年(可選) 留空, 1970-2099 , - * /

            表達(dá)式 意義

            "0 0 12 * * ?" 每天中午12點(diǎn)觸發(fā)

            "0 15 10 ? * *" 每天上午10:15觸發(fā)

            "0 15 10 * * ?" 每天上午10:15觸發(fā)

            "0 15 10 * * ? *" 每天上午10:15觸發(fā)

            "0 15 10 * * ? 2005" 2005年的每天上午10:15觸發(fā)

            "0 * 14 * * ?" 在每天下午2點(diǎn)到下午2:59期間的每1分鐘觸發(fā)

            "0 0/5 14 * * ?" 在每天下午2點(diǎn)到下午2:55期間的每5分鐘觸發(fā)

            "0 0/5 14,18 * * ?" 在每天下午2點(diǎn)到2:55期間和下午6點(diǎn)到6:55期間的每5分鐘觸發(fā)

            "0 0-5 14 * * ?" 在每天下午2點(diǎn)到下午2:05期間的每1分鐘觸發(fā)

            "0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44觸發(fā)

            "0 15 10 ? * MON-FRI" 周一至周五的上午10:15觸發(fā)

            "0 15 10 15 * ?" 每月15日上午10:15觸發(fā)

            "0 15 10 L * ?" 每月最后一日的上午10:15觸發(fā)

            "0 15 10 ? * 6L" 每月的最后一個星期五上午10:15觸發(fā)

            "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一個星期五上午10:15觸發(fā)

            "0 15 10 ? * 6#3" 每月的第三個星期五上午10:15觸發(fā)

            特殊字符 意義

            * 表示所有值;

            ? 表示未說明的值,即不關(guān)心它為何值;

            - 表示一個指定的范圍;

            , 表示附加一個可能值;

            / 符號前表示開始時間,符號后表示每次遞增的值;

            L("last") ("last") "L" 用在day-of-month字段意思是 "這個月最后一天";用在 day-of-week字段, 它簡單意思是 "7" or "SAT"。 如果在day-of-week字段里和數(shù)字聯(lián)合使用,它的意思就是 "這個月的最后一個星期幾" – 例如: "6L" means "這個月的最后一個星期五". 當(dāng)我們用“L”時,不指明一個列表值或者范圍是很重要的,不然的話,我們會得到一些意想不到的結(jié)果。

            W("weekday") 只能用在day-of-month字段。用來描敘最接近指定天的工作日(周一到周五)。例如:在day-of-month字段用“15W”指“最接近這個月第15天的工作日”,即如果這個月第15天是周六,那么觸發(fā)器將會在這個月第14天即周五觸發(fā);如果這個月第15天是周日,那么觸發(fā)器將會在這個月第16天即周一觸發(fā);如果這個月第15天是周二,那么就在tbw觸發(fā)器這天觸發(fā)。注意一點(diǎn):這個用法只會在當(dāng)前月計算值,不會越過當(dāng)前月。“W”字符僅能在day-of-month指明一天,不能是一個范圍或列表。也可以用“LW”來指定這個月的最后一個工作日。

            # 只能用在day-of-week字段。用來指定這個月的第幾個周幾。例:在day-of-week字段用"6#3"指這個月第3個周五(6指周五,3指第3個)。如果指定的日期不存在,觸發(fā)器就不會觸發(fā)。

            C 指和calendar聯(lián)系后計算過的值。例:在day-of-month 字段用“5C”指在這個月第5天或之后包括calendar的第一天;在day-of-week字段用“1C”指在這周日或之后包括calendar的第一天

          posted @ 2013-09-17 15:15 chen11-1 閱讀(2028) | 評論 (0)編輯 收藏

          序列化在IO中讀寫對象的使用

              序列化就是一種用來處理對象流的機(jī)制,所謂對象流也就是將對象的內(nèi)容進(jìn)行流化。可以對流化后的對象進(jìn)行讀寫操作,也可將流化后的對象傳輸于網(wǎng)絡(luò)之間。序列化是為了解決在對對象流進(jìn)行讀寫操作時所引發(fā)的問題。

            序列化的實(shí)現(xiàn):將需要被序列化的類實(shí)現(xiàn)Serializable接口,然后使用一個輸出流(如:FileOutputStream)來構(gòu)造一個ObjectOutputStream(對象流)對象,接著,使用ObjectOutputStream對象的writeObject(Object obj)方法就可以將參數(shù)為obj的對象寫出(即保存其狀態(tài)),要恢復(fù)的話則用輸入流。
           寫對象和讀對象的時候一定要使用序列化:

            import java.io.*;

            class Product implements Serializable {

            private static final long serialVersionUID = 1L;

            private float price;

            private float tax;

            public Product(float price) {

            this.price = price;

            tax = (float)(price*0.20);

            }

            public String toString() {

            return "price:"+price+",tax:"+tax;

            }

            }

            public class CmdDemo {

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

            Product p1 = new Product(100);

            ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream

            ("d:\product.txt"));

            os.writeObject(p1);

            os.close();

            ObjectInputStream is = new ObjectInputStream(new FileInputStream

            ("d:\product.txt"));

            Product p2 = (Product) is.readObject();

            System.out.println(p2.toString());

            }

            }

          posted @ 2013-09-17 15:12 chen11-1 閱讀(279) | 評論 (0)編輯 收藏

          Java數(shù)組使用實(shí)用的技巧

            本文分享了關(guān)于Java數(shù)組最頂級的11大方法,幫助你解決工作流程問題,無論是運(yùn)用在團(tuán)隊(duì)環(huán)境或是在私人項(xiàng)目中,你都可以直接拿來用!

          0.  聲明一個數(shù)組(Declare an array)
           
          String[] aArray = new String[5];
          String[] bArray = {"a","b","c", "d", "e"};
          String[] cArray = new String[]{"a","b","c","d","e"};

          1.  在Java中輸出一個數(shù)組(Print an array in Java)
           
          int[] intArray = { 1, 2, 3, 4, 5 };
          String intArrayString = Arrays.toString(intArray);
           
          // print directly will print reference value
          System.out.println(intArray);
          // [I@7150bd4d
           
          System.out.println(intArrayString);
          // [1, 2, 3, 4, 5]

          2. 從數(shù)組中創(chuàng)建數(shù)組列表(Create an ArrayList from an array)
           
          String[] stringArray = { "a", "b", "c", "d", "e" };
          ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(stringArray));
          System.out.println(arrayList);
          // [a, b, c, d, e]

          3. 檢查愛淘寶數(shù)組中是否包含特定值(Check if an array contains a certain value)
           
          String[] stringArray = { "a", "b", "c", "d", "e" };
          boolean b = Arrays.asList(stringArray).contains("a");
          System.out.println(b);
          // true
           
          4. 連接兩個數(shù)組( Concatenate two arrays)
           
          int[] intArray = { 1, 2, 3, 4, 5 };
          int[] intArray2 = { 6, 7, 8, 9, 10 };
          // Apache Commons Lang library
          int[] combinedIntArray = ArrayUtils.addAll(intArray, intArray2);
          5. 聲明一個數(shù)組內(nèi)鏈(Declare an array inline )
           
          method(new String[]{"a", "b", "c", "d", "e"});
           
          6. 將數(shù)組元素加入到一個獨(dú)立的字符串中(Joins the elements of the provided array into a single String)

          // containing the provided list of elements
          // Apache common lang
          String j = StringUtils.join(new String[] { "a", "b", "c" }, ", ");
          System.out.println(j);
          // a, b, c
           
          7. 將數(shù)組列表轉(zhuǎn)換成一個數(shù)組 (Covnert an ArrayList to an array)
           
          String[] stringArray = { "a", "b", "c", "d", "e" };
          ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(stringArray));
          String[] stringArr = new String[arrayList.size()];
          arrayList.toArray(stringArr);
          for (String s : stringArr)
              System.out.println(s);
           
          8. 將數(shù)組轉(zhuǎn)換成一個集合(Convert an array to a set)
           
          Set<String> set = new HashSet<String>(Arrays.asList(stringArray));
          System.out.println(set);
          //[d, e, b, c, a]
           
          9. 反向數(shù)組(Reverse an array)
           
          int[] intArray = { 1, 2, 3, 4, 5 };
          ArrayUtils.reverse(intArray);
          System.out.println(Arrays.toString(intArray));
          //[5, 4, 3, 2, 1]
           
          10. 刪除數(shù)組元素(Remove element of an array)
           
          int[] intArray = { 1, 2, 3, 4, 5 };
          int[] removed = ArrayUtils.removeElement(intArray, 3);
          //create a new array
          System.out.println(Arrays.toString(removed));
           
          One more – convert int to byte array
           
          byte[] bytes = ByteBuffer.allocate(4).putInt(8).array();
           
          for (byte t : bytes) {
             System.out.format("0x%x ", t);
          }

          posted @ 2013-09-17 15:08 chen11-1 閱讀(267) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 莱西市| 长葛市| 江达县| 蒙城县| 夏邑县| 玛多县| 凌源市| 德庆县| 始兴县| 聂拉木县| 出国| 满洲里市| 垦利县| 二连浩特市| 宁明县| 松溪县| 柏乡县| 邮箱| 潮安县| 麻城市| 福清市| 禄劝| 株洲县| 河曲县| 屏东县| 安顺市| 金湖县| 改则县| 东乌珠穆沁旗| 陆河县| 伊通| 青田县| 中牟县| 藁城市| 仙居县| 诸暨市| 石城县| 玉山县| 巴东县| 顺昌县| 鄂托克前旗|