??xml version="1.0" encoding="utf-8" standalone="yes"?>超碰在线免费看,久久精品无码一区二区三区,日韩www.http://www.aygfsteel.com/michaelcao/zh-cnTue, 17 Jun 2025 13:21:15 GMTTue, 17 Jun 2025 13:21:15 GMT60利用U程池上传大文g(?http://www.aygfsteel.com/michaelcao/archive/2009/03/21/261173.html依然Fantasy依然FantasySat, 21 Mar 2009 02:40:00 GMThttp://www.aygfsteel.com/michaelcao/archive/2009/03/21/261173.htmlhttp://www.aygfsteel.com/michaelcao/comments/261173.htmlhttp://www.aygfsteel.com/michaelcao/archive/2009/03/21/261173.html#Feedback0http://www.aygfsteel.com/michaelcao/comments/commentRss/261173.htmlhttp://www.aygfsteel.com/michaelcao/services/trackbacks/261173.html(文章本h原创Q若转蝲h明出?

下面看一下一些具体的实现Q先看一下Sender接口的commitDataҎ的MySql实现Q即SenderMySqlImpc:


    public void commitData(String path, String file) {
        ......
        Connection connect = null;
        try {
          //Ҏ配置由Helper来确定是否用q接?q只调用getConnection()卛_
          connect = Helper.getConnection();
            connect.setAutoCommit(false);
            FileInputStream fis = new FileInputStream(path + file);
          
//insert语句,有三个参数分别ؓid,image,filename字段?/strong>
           ps = connect.prepareStatement(sql.toString());
           ps.setString(1, UUID.randomUUID().toString());
         //图片文件流?用jdbc直接写到数据?
          ps.setBinaryStream(2, fis, fis.available());
            ps.setString(3, file);
            ps.executeUpdate();
            connect.commit();
            count++;
             Logger.writeLog("已处理文件数Q?+count+"Q时_"+new java.util.Date());

        } catch (Exception e) {
         ........
    }

    很简单吧Q其实就是用Stream来做Q另外在|上可以扑ֈ有关Oracle上传blob的实玎ͼ一般都是先insert一条记录,blob字段用empty_blob()函数插入一个空数据Q然后再取出q个blob字段Q最后按字节写入blobQ具体参考SenderOracleImpcd。个人感觉还是在mysql的这个效率高些ƈ且看h单了很多?/p>

    然后来看看用线E池的ProcessMultic:


public class ProcessMulti implements Process{
    
private String path;
    
private Vector<String> files = new Vector<String>();
    
private Properties prop;

    ProcessMulti() {
        prop 
= ConfigMgr.getProperties();  //取config.properties中配|信?br />         this.path = prop.getProperty("path");
        
this.files = Helper.getFiles(prop.getProperty("filetype"), this.path);
    }

    
public void doProcess() {
//正如前面两篇所?q里是线E池构徏?传入相关参数
        BlobSenderThreadPool tpe 
= new BlobSenderThreadPool(Integer
                .valueOf(prop.getProperty(
"corePoolSize")), Integer
                .valueOf(prop.getProperty(
"maxPoolSize")), Integer.valueOf(prop
                .getProperty(
"keepAliveTime")), TimeUnit.SECONDS,
                
new ArrayBlockingQueue<Runnable>(Integer.valueOf(prop
                        .getProperty(
"maxPoolSize"))),
                
new BlobSenderThreadPool.DiscardPolicy(), files.size());

        Logger.writeLogForce(
"开始处?img src="http://www.aygfsteel.com/Images/dot.gif" alt="" />." + new java.util.Date());
        
for (int i = 0; i < this.files.size(); i++) {
            //向线E池提交要处理的d,U程池根据其配置q行处理
            //Helper.getSender()会根据配|取得支持mysql或是oracel的写入方?/strong>
            tpe.execute(
new Runner(path, files.get(i), Helper.getSender()));
            Logger.writeLog(
"已提交第" + (int)(i+1)  + "个文?/span>" + "Q时间ؓQ?/span>"
                    
+ new java.util.Date());
        }
    //可以在这里写一个打印输?实际上程序很快就执行完上面的for,q行到这?但是处理q没有完?
       //ȝ序好像职业经理h,他的工作是分配dl下?自已完成工作了,但下属们q要接着忙活呵呵...

       System.out.println("d已分?..");
    }
    //U程池类
    
class BlobSenderThreadPool extends ThreadPoolExecutor {
        
volatile int planTask;//计划d,卌划要写的文g?br />
        
public BlobSenderThreadPool(int corePoolSize, int maximumPoolSize,
                
long keepAliveTime, TimeUnit unit,
                BlockingQueue
<Runnable> workQueue,
                RejectedExecutionHandler handler, 
int planTask) {
            
super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);
            
this.planTask = planTask;
        }

        @Override
        //当某个线E处理完时会调用此方?/strong>
        
protected void afterExecute(Runnable r, Throwable t) {
            Logger.writeLog(
"当前已完成Q务数Q?/span>" + (int)(this.getCompletedTaskCount()+1)
                    
+ "计划d敎ͼ" + planTask);
           //若已处理完Q务和计划的Q务数相同说明所有线E已完成处理,l止U程池处?br />
      if ((this.getCompletedTaskCount()+1)== planTask)
                
this.terminated();
            
super.afterExecute(r, t);
        }

        @Override
        
protected void terminated() {
            Logger.writeLogForce(
"所有Q务已完成 ,处理l束旉===>>" + new java.util.Date());
            System.exit(
0);
        }

    }

//要用线E进行处?c要实现Runable接口
    
class Runner implements Runnable {
        String file;
        String path;
        Sender sender;

        Runner(String path, String file, Sender sender) {
            
this.file = file;
            
this.path = path;
            
this.sender = sender;
        }
//Runer的实例会被传入线E池,U程被运行时会调用runҎ
        
public void run() {
            sender.commitData(path, file);
        }

    }


依然Fantasy 2009-03-21 10:40 发表评论
]]>
利用U程池上传大文g(?http://www.aygfsteel.com/michaelcao/archive/2009/03/21/261167.html依然Fantasy依然FantasySat, 21 Mar 2009 02:25:00 GMThttp://www.aygfsteel.com/michaelcao/archive/2009/03/21/261167.htmlhttp://www.aygfsteel.com/michaelcao/comments/261167.htmlhttp://www.aygfsteel.com/michaelcao/archive/2009/03/21/261167.html#Feedback0http://www.aygfsteel.com/michaelcao/comments/commentRss/261167.htmlhttp://www.aygfsteel.com/michaelcao/services/trackbacks/261167.html(文章本h原创Q若转蝲h明出?

  在实际当中的情况是系l数据库中需要上传大量照片到数据库中Q数据量比较大,且不能在界面中通过操作逐个上传Q要扚w自动q行。其实v来也比较单直接利用线E池照片数据读取成再存入BLOB字段卛_。但是在实现后些功能后又q入了一些改造,实现了线E池、单U程、是否用用q接池、不同数据库{不同的配置Q这样在不同配置下可以观察到E序性能的不同。ƈ且经q设计切换这些配|不需要修改程序?/p>


使用DbAccess接口的getConnect()取得数据库连接,DbImp和DbPoolingImp实现了不使用q接池和使用q接池的两个版本。Sender接口的commitData()用来把BLOB数据写到数据库中Q因Z同数据库可能写法有点不同所以这里SenderMySqlImp和SenderOracleImp分别是Mysql和Oracle的实现。Process接口的doProcess()是开始进行处理的ҎQ无论是单线E还是多U程。因此ProcessMulti和ProcessSingle是分别用线E池以及单线E处理的cRConfigMgr用于取得config.properties文g内配|信息,Logger是日志类QHelper中汇集了一些共用的静态方法。最后DataSender是主E序的类Q)



依然Fantasy 2009-03-21 10:25 发表评论
]]>
利用U程池上传大文g(一)http://www.aygfsteel.com/michaelcao/archive/2009/03/19/260913.html依然Fantasy依然FantasyThu, 19 Mar 2009 14:26:00 GMThttp://www.aygfsteel.com/michaelcao/archive/2009/03/19/260913.htmlhttp://www.aygfsteel.com/michaelcao/comments/260913.htmlhttp://www.aygfsteel.com/michaelcao/archive/2009/03/19/260913.html#Feedback0http://www.aygfsteel.com/michaelcao/comments/commentRss/260913.htmlhttp://www.aygfsteel.com/michaelcao/services/trackbacks/260913.html(文章本h原创Q若转蝲h明出?

   在JDK1.5提供了一个线E池ThreadPoolExecutorQ可以处理用h交过来的U程。如果把要处理的d比作盖一个大|那么每一个徏{工人就相当于一个线E,那么q个ThreadPoolExecutor好像包工头Q它来控制盖q个大楼需要多个工hQ何时招q新工hQ何时辞退已经长时间没有事做的工hQ等{此cM务。也是说用L序不断提交新的线E,ThreadPoolExecutor执行提交U程的同时会控制目前d同时执行的线E数Q销毁已执行完闲|的U程{控制行为,保留最闲|线E数Qƈ且可以配|不同的处理{略?/p>

   Z么要使用U程池呢Q这与数据库q接池的原理有点总Q线E的创徏是需要成本的Q包括服务器CPU和内存资源,׃多线E是q行q行Q程序运行过E中可能有的U程已经完成自n处理dQ处于闲|状态,如果在这U情况下再不断创建新d是在浪Ҏ务器资源Q此时应该尽量用先前创建的好的q且是处理闲|状态的U程来处理新dQ而线E池可以有效的Ҏq行自动化管理,当然q个理是可以由用户配置的?/p>

ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
RejectedExecutionHandler handler)

q是U程池的构徏器,用户E序通过q个构徏器传参数QcorePoolSize是线E池中核心线E数Q运行的U程C能少于这个核心线E数Q否则就新徏U程。maximumPoolSize是充许最大的U程数。keepAliveTime讄除核心线E外其它U程的空闲时_过q个旉U程p动终止。unit是指的keepAliveTime的时间单位。BlockingQueue接口按生产则消费者算法设计的一个线E池内部处理U程队列的接口,有三U实现SynchronousQueue、LinkedBlockingQueue和ArrayBlockingQueueQ在实际q行E序时可以根据这三种实现得到不同的性能Q比如有的实现可能在有新d来时不新建线E,而是其加入{待队列Q等有线E运行完时再分配l其使用。具体实现还是参看它们的JDK文档吧,q里站在使用的角度它们是可以调整q行性能的开兟뀂当最大线E和工作队列定w都达到最大值时Q再提交l线E池CQ务就会被拒绝Q此时线E池会调用RejectedExecutionHandler 接口q行处理Q具体实现有四种{略。我们只需要选用其中一U在构徏ThreadPoolExecutor时传入即可。具体四U实现还是参看JDK文吧?a >关于ThreadPoolExecutor的JDK文。至此控制线E池q作的几个参数都从构建器中传入了?/p>

依然Fantasy 2009-03-19 22:26 发表评论
]]>
Oracle中返回结果集的存储过E?/title><link>http://www.aygfsteel.com/michaelcao/archive/2009/01/13/251189.html</link><dc:creator>依然Fantasy</dc:creator><author>依然Fantasy</author><pubDate>Tue, 13 Jan 2009 13:55:00 GMT</pubDate><guid>http://www.aygfsteel.com/michaelcao/archive/2009/01/13/251189.html</guid><wfw:comment>http://www.aygfsteel.com/michaelcao/comments/251189.html</wfw:comment><comments>http://www.aygfsteel.com/michaelcao/archive/2009/01/13/251189.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/michaelcao/comments/commentRss/251189.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/michaelcao/services/trackbacks/251189.html</trackback:ping><description><![CDATA[<p>google了一不错的例子Q加了点注解Q这Lh更方便了Q)</p> <p>Oracle不像SQLServer那样在存储过E中用Select可以返回结果集Q而是通过Out型的参数q行l果集返回的。实际上是利用REF CURSOR</p> <p><strong>--procedureq回记录集:</strong></p> <p>----------------------声明一个Package-------------- <br /> CREATE OR REPLACE PACKAGE pkg_test <br /> AS <br /> TYPE <span style="color: rgb(0, 0, 255);">myrctype</span> IS REF CURSOR; <br /> <br /> PROCEDURE get (p_id NUMBER, <span style="color: rgb(0, 0, 255);">p_rc OUT myrctype</span>); --Package中声明名为get 的Procedure(只有接口没内?</p> <p>END pkg_test;</p> <p>--------------------------------------------------------</p> <p><br /> -----------------声明Package BodyQ即上面Package中的内容Q包括Procedure get--------------------- <br /> CREATE OR REPLACE PACKAGE BODY pkg_test <br /> AS <br /> PROCEDURE get (p_id NUMBER, <span style="color: rgb(0, 0, 255);">p_rc OUT myrctype</span>) <br /> IS <br /> sqlstr VARCHAR2 (500); <br /> BEGIN <br /> IF p_id = 0 THEN <br /> OPEN p_rc FOR <br /> SELECT ID, NAME, sex, address, postcode, birthday <br /> FROM student; <br /> ELSE <br /> sqlstr := <br /> 'select id,name,sex,address,postcode,birthday <br /> from student where id=<span style="color: rgb(0, 0, 255);">:w_id</span>'; --w_id是个参数Q?/p> <p><span style="color: rgb(0, 0, 255);">--以下 p_rc是个</span><span style="color: rgb(0, 0, 0);">REF CURSOR</span><span style="color: rgb(0, 0, 255);">游标cdQ而且是OUT型参敎ͼ卛_q回一个记录集了。USING p_id是替换上面SQL?w_id值拉:)</span> <br /> <span style="color: rgb(0, 0, 255);">OPEN p_rc FOR sqlstr USING p_id; </span></p> <p>END IF; <br /> END get; <br /> END pkg_test; <br /> <br /> <br /> <strong>--functionq回记录集的例子Q原理和上面相同Q而是用function的return值来q回记录集?/strong></p> <p>函数q回记录? <br /> 建立带ref cursor定义的包和包体及函数Q? <br /> CREATE OR REPLACE <br /> package pkg_test as <br /> /* 定义ref cursorcd <br /> 不加returncdQؓq型,允许动态sql查询Q? <br /> 否则为强cdQ无法用动态sql查询; <br /> */ <br /> type myrctype is ref cursor; <br /> function get(intID number) return myrctype; <br /> end pkg_test; <br /> /</p> <p>CREATE OR REPLACE <br /> package body pkg_test as <br /> --函数? <br /> function get(intID number) return myrctype is <br /> rc myrctype; --定义ref cursor变量 <br /> sqlstr varchar2(500); <br /> begin <br /> if intID=0 then <br /> --静态测试,直接用select语句直接q回l果 <br /> open rc for select id,name,sex,address,postcode,birthday from student; <br /> else <br /> --动态sql赋|?w_id来申明该变量从外部获? <br /> sqlstr := 'select id,name,sex,address,postcode,birthday from student where id=:w_id'; <br /> --动态测试,用sqlstr字符串返回结果,用using关键词传递参? <br /> open rc for sqlstr using intid; <br /> end if;</p> <p>return rc; <br /> end get;</p> <p>end pkg_test;</p> <img src ="http://www.aygfsteel.com/michaelcao/aggbug/251189.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/michaelcao/" target="_blank">依然Fantasy</a> 2009-01-13 21:55 <a href="http://www.aygfsteel.com/michaelcao/archive/2009/01/13/251189.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在ORACLE存储q程中创Z时表http://www.aygfsteel.com/michaelcao/archive/2009/01/13/251185.html依然Fantasy依然FantasyTue, 13 Jan 2009 13:23:00 GMThttp://www.aygfsteel.com/michaelcao/archive/2009/01/13/251185.htmlhttp://www.aygfsteel.com/michaelcao/comments/251185.htmlhttp://www.aygfsteel.com/michaelcao/archive/2009/01/13/251185.html#Feedback0http://www.aygfsteel.com/michaelcao/comments/commentRss/251185.htmlhttp://www.aygfsteel.com/michaelcao/services/trackbacks/251185.html在ORACLE存储q程中创Z时表

存储q程里不能直接用DDL语句Q所以只能用动态SQL语句来执?/span>

--ON COMMIT DELETE ROWS 说明临时表是事务指定Q每ơ提交后ORACLE截断表Q删除全部行Q?
--ON COMMIT PRESERVE ROWS 说明临时表是会话指定Q当中断会话时ORACLE截断表?/p>


CREATE OR REPLACE PROCEDURE temptest
(p_searchDate IN DATE)
IS
v_count INT;
str varchar2(300);
BEGIN
v_count := 0;
str:='drop table SETT_DAILYTEST';
execute immediate str;
str:='CREATE GLOBAL TEMPORARY TABLE SETT_DAILYTEST (
NACCOUNTID NUMBER not null,
NSUBACCOUNTID NUMBER not null)
ON COMMIT PRESERVE ROWS';
execute immediate str; ----使用动态SQL语句来执?/span>
str:='insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance)';
execute immediate str;
END temptest;

上面建立一个时表的存储过E?/p>

下面是执行一些操?向时表写数据?/p>

CREATE OR REPLACE PROCEDURE PR_DAILYCHECK
(
p_Date IN DATE,
p_Office IN INTEGER,
p_Currency IN INTEGER,
P_Check IN INTEGER,
p_countNum OUT INTEGER)
IS
v_count INT;
BEGIN
v_count := 0;
IF p_Date IS NULL THEN
dbms_output.put_line('日期不能为空');
ELSE
IF P_Check = 1 THEN
insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance
where dtdate = p_Date);

select
count(sd.naccountid) into v_count
from sett_subaccount ss,sett_account sa,sett_dailytest sd
where sd.naccountid = sa.id and sd.nsubaccountid = ss.id and sa.id = ss.naccountid
AND sa.nofficeid = p_Office AND sa.ncurrencyid = p_Currency
and rownum < 2;
COMMIT;
p_countNum := v_count;
dbms_output.put_line(p_countNum);
END IF;
IF P_Check = 2 THEN
insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance
where dtdate = p_Date);

select
count(sd.naccountid) into v_count
from sett_cfsubaccount ss,sett_account sa,sett_dailytest sd
where sd.naccountid = sa.id and sd.nsubaccountid = ss.id and sa.id = ss.naccountid
AND sa.nofficeid = p_Office AND sa.ncurrencyid = p_Currency
and rownum < 2;
COMMIT;
p_countNum := v_count;
dbms_output.put_line(p_countNum);
END IF;
END IF;
END PR_DAILYCHECK;



依然Fantasy 2009-01-13 21:23 发表评论
]]>
Oracle:PL/SQL 中如何用Arrayhttp://www.aygfsteel.com/michaelcao/archive/2009/01/13/251183.html依然Fantasy依然FantasyTue, 13 Jan 2009 13:07:00 GMThttp://www.aygfsteel.com/michaelcao/archive/2009/01/13/251183.htmlhttp://www.aygfsteel.com/michaelcao/comments/251183.htmlhttp://www.aygfsteel.com/michaelcao/archive/2009/01/13/251183.html#Feedback0http://www.aygfsteel.com/michaelcao/comments/commentRss/251183.htmlhttp://www.aygfsteel.com/michaelcao/services/trackbacks/251183.htmlOracle本n没数l的概念Q但是通过Oracle的Collections和Recordscd可以模仿出单l数l和多维数组?/p>

请参?lt;<Oracle PL/SQL Programming>> Chapter 11、Chapter 12?/p>


---------------------- 单维数组 ------------------------
DECLARE
TYPE emp_ssn_array IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; ----注:声明一个Collection

best_employees emp_ssn_array;
worst_employees emp_ssn_array;

BEGIN
best_employees(1) := '123456';
best_employees(2) := '888888';

worst_employees(1) := '222222';
worst_employees(2) := '666666';

FOR i IN 1..best_employees.count LOOP
DBMS_OUTPUT.PUT_LINE('i='|| i || ', best_employees= ' ||best_employees(i)
|| ', worst_employees= ' ||worst_employees(i));
END LOOP;

END;



---------------------- 多维数组 ------------------------

DECLARE

TYPE emp_type IS RECORD ---------注:声明一个Recordcd emp_type
( emp_id employee_table.emp_id%TYPE,           ----Recordcd中的成员...
emp_name employee_table.emp_name%TYPE,
emp_gender employee_table.emp_gender%TYPE );

TYPE emp_type_array IS TABLE OF ----注:声明一个Collectioncd emp_type_array Q其中元素ؓemp_typecd
emp_type INDEX BY BINARY_INTEGER;

emp_rec_array emp_type_array;
emp_rec emp_type;

BEGIN
emp_rec.emp_id := 300000000;
emp_rec.emp_name := 'Barbara';
emp_rec.emp_gender := 'Female';

emp_rec_array(1) := emp_rec;

emp_rec.emp_id := 300000008;
emp_rec.emp_name := 'Rick';
emp_rec.emp_gender := 'Male';

emp_rec_array(2) := emp_rec;

FOR i IN 1..emp_rec_array.count LOOP
DBMS_OUTPUT.PUT_LINE('i='||i
||', emp_id ='||emp_rec_array(i).emp_id
||', emp_name ='||emp_rec_array(i).emp_name
||', emp_gender = '||emp_rec_array(i).emp_gender);
END LOOP;

END;
-------------- Result --------------
i=1, emp_id =300000000, emp_name =Barbara, emp_gender = Female
i=2, emp_id =300000008, emp_name =Rick, emp_gender = Male



依然Fantasy 2009-01-13 21:07 发表评论
]]>
Oracle PL/SQL使用%TYPE?ROWTYPEhttp://www.aygfsteel.com/michaelcao/archive/2009/01/07/250212.html依然Fantasy依然FantasyWed, 07 Jan 2009 00:38:00 GMThttp://www.aygfsteel.com/michaelcao/archive/2009/01/07/250212.htmlhttp://www.aygfsteel.com/michaelcao/comments/250212.htmlhttp://www.aygfsteel.com/michaelcao/archive/2009/01/07/250212.html#Feedback2http://www.aygfsteel.com/michaelcao/comments/commentRss/250212.htmlhttp://www.aygfsteel.com/michaelcao/services/trackbacks/250212.htmlOracle PL/SQL中如何?TYPE?ROWTYPE (转蝲)
1. 使用%TYPE
在许多情况下QPL/SQL变量可以用来存储在数据库表中的数据。在q种情况下,变量应该拥有与表列相同的cd。例如,students表的first_name列的cd为VARCHAR2(20),我们可以按照下述方式声明一个变量:
DECLARE
v_FirstName VARCHAR2(20);
但是如果first_name列的定义改变了会发生什么(比如说表改变了,first_name现在的类型变为VARCHAR2(25)Q?那就会导致所有用这个列的PL/SQL代码都必进行修攏V如果你有很多的PL/SQL代码Q这U处理可能是十分耗时和容易出错的?
q时Q你可以使用"%TYPE"属性而不是将变量cd性编码?
例如Q?
DECLARE
v_FirstName students.first_name%TYPE;
通过使用%TYPE,v_FirstName变量同students表的first_name列的cd相同Q可以理解ؓ两者邦定v来)?
每次匿名块或命名块运行该语句块以及编译存储对象(q程?zmkey style="border-bottom: 2px dotted rgb(255, 108, 0); font-weight: bold; float: none; cursor: pointer; margin-right: 3px;" class="zoomino-searchword">函数、包、对象类?zmkey style="border-bottom: 2px dotted rgb(255, 108, 0); font-weight: bold; float: none; cursor: pointer; margin-right: 3px;" class="zoomino-searchword">触发?/zmkey>Q时Q就会确定该cd?
使用%TYPE是非常好的编E风|因ؓ它得PL/SQL更加灉|Q更加适应?zmkey style="border-bottom: 2px dotted rgb(255, 108, 0); font-weight: bold; float: none; cursor: pointer; margin-right: 3px;" class="zoomino-searchword">Ҏ据库定义的更新?
2. 使用%ROWTYPE
2.1 PL/SQL记录
PL/SQL记录cdcM于C语言中的l构Q是一U复合类型,是用?zmkey style="border-bottom: 2px dotted rgb(255, 108, 0); font-weight: bold; float: none; cursor: pointer; margin-right: 3px;" class="zoomino-searchword">自定?/zmkey>的?
记录提供了一U处理独立的但又作ؓ一个整体单元相关的变量的机制。请看:
DECLARE
v_StudentID NUMBER(5);
v_FirstName VARCHAR2(20);
v_LastName VARCHAR2(20);
q?个变量在逻辑上是怺兌的,因ؓ他们指向students表中不同?zmkey style="border-bottom: 2px dotted rgb(255, 108, 0); font-weight: bold; float: none; cursor: pointer; margin-right: 3px;" class="zoomino-searchword">字段。如果ؓq些变量声明一个记录类型,那么他们之间的关pd十分明显Q可作ؓ一个单元进行处理?
DECLARE
/*Define a record type to hold common student informationi*/
TYPE t_StudentRecord IS RECORD(
StudentID NUMBER(5),
FirstName VARCHAR2(20),
LastName VARCHAR2(20);
/*Declare a variable of this type.*/
v_StudentInfo t_StudentRecord;
2.2 记录赋?
可以用SELECT语句向记录赋|q将会从数据库中索数据ƈ该数据存储到记录中。注意的是,记录中字D应该和查询l果列表中的字段相匹配?
SELECT studentID,firstName,lastName
into v_StudentInfo
from students where studentID=32;
2.3 使用%ROWTYPE
在PL/SQL中将一个记录声明ؓh相同cd的数据库行的作法是很常见的。PL/SQL提供?ROWTYPEq算W?/zmkey>Q得这L操作更ؓ方便?
例如Q?
DECLARE
v_RoomRecord rooms%ROWTYPE;
定义一个记录,该记录中的字D将与rooms表中的列相对应?/p>

依然Fantasy 2009-01-07 08:38 发表评论
]]>
重回NOKIA怀?/title><link>http://www.aygfsteel.com/michaelcao/archive/2008/10/13/234121.html</link><dc:creator>依然Fantasy</dc:creator><author>依然Fantasy</author><pubDate>Mon, 13 Oct 2008 14:59:00 GMT</pubDate><guid>http://www.aygfsteel.com/michaelcao/archive/2008/10/13/234121.html</guid><wfw:comment>http://www.aygfsteel.com/michaelcao/comments/234121.html</wfw:comment><comments>http://www.aygfsteel.com/michaelcao/archive/2008/10/13/234121.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/michaelcao/comments/commentRss/234121.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/michaelcao/services/trackbacks/234121.html</trackback:ping><description><![CDATA[<p>  ?手机不幸被盗Q可恶的偷Q偷我的手机你就断手断脚吧。明天准备联pȝ爱和Ud客服看是否能通过手机串码把手机屏蔽,据说从技术角度讲是可以行的通的Q问题就是这U事手机q营商愿不愿意给做了?a >英国已经有这U服务可以被盗手机不能再被使用</a>Q不知道特色中国啥时能有q种真正特色的服务呢?/p> <p>       我的索爱W810听音乐音质超好,入耛_x也很,感觉比专业的族MP3q高一{?主要族带的x太烂,而且族韌风格有点?特别配上自带x后听音乐塑料感极?。w810韌风格基本上就是SONY早年CDWalkMan那种日系风格Q加上入耛_x低音很强。另外FM攉功能也很不错Q信号很好,q个我也是和族的MP3Ҏq的Q同L境下FM攉信号也强一些,相对׃信号弱造成的背景噪韛_一?加上声音渲染修饰的好,不会有由于信号不好造成的刺耛_。W810的拍照功能也不错Q拍的照片,特别是白天光U好Ӟ拍出来的照片基本上可以冒充数码相机的了。MQ用了一q_感觉W810最大缺点就是短信有定w限制Q我基本上半个月得清一回收件箱。个为w810作ؓ手机来用是比不上NOKIA的好用,但是随n听、拍照功能的很好,估计索爱的Wpd基本也都是这栗哎可惜现在q个怽都没留下..怀念呀.....</p> <blockquote> <p><a href="http://www.aygfsteel.com/images/blogjava_net/michaelcao/WindowsLiveWriter/NOKIA_1339A/w810_2.jpg"><img style="border: 0px none ;" alt="w810" src="http://www.aygfsteel.com/images/blogjava_net/michaelcao/WindowsLiveWriter/NOKIA_1339A/w810_thumb.jpg" border="0" height="184" width="244" /></a> </p> <p>w810</p> </blockquote> <p>  qx忙没旉逛商店,?到滨江道溜达了一圈,据卖手机的服务员_天语手机销量已l能和NOKIA有的一gQ想想一q多前还是名不见l传Q世界变化快呀。由于之前在淘宝上看qhgQ所以无论哪ƾ手机门店里的h格基本上没法接受了。现在消费观念已不同从前?有可能被全球l济危机吓得呵呵?Q基本上2000元以上的手机׃看了Q找了几ƾ什么烦?a >M600i</a>?a >880i</a>以及夏新<a >E78</a>...最后还是回发现q麻不买个NOKIA机的呢,我在W810前就是用的NOKIA6630呀Q当时感觉智能机很强大很DIY。最后发现淘宝上N72行货h已经掉到1300左右(刚出时得有三四千?Q还l开发票和全国联保,OMG|是它了..... </p> <p>  没想到那?a >卖家</a>别看信用g高,东西相对便宜Q服务态度到是好Q基本上是送了?GB卡,周日拍周一晚上收到货了,一看包装写着是空q?..东西也不错,开后机器没有M问题Q还有正规发。有的信用g高的卖家估计是想薄利多销招揽客户吧,不像有的几个L者是大皇冠的卖家Q买个东西好像还不是很热情的样子Q也有可能是客户多忙不过来了?/p> <p>       说说N72Q基实和我在w810之前用过?630没啥太多区别Q都是NOKIA S60pȝQ就是外形小了一点,薄了一点点Q内存大了些Q这回是1GB存储卡、摄像头?30万变?00?多了FM攉功能Q操作系l版本新了些。我基本上当它是新版6630用,呵呵?/p> <p>  值得一提的是,NOKIA的x一般音质像地摊货,q回的也一P打开包装原配的x扔C一边,我用NOKIA的AD-15转换?一UNOKIA专用x转接?外加功率攑֤功能的小东西)接上我的v塞耳PX200Q呵呵~~音质超爽,几乎已超了W810的音质,但是另一U风g像是日系随n听低韛_L那种。但是很奇怪如果接SonyE888韌׃怎么圎ͼ费解?.。自此以后又可以下蝲S60各种应用软g、游戏、MP3播放软g....重回NOKIA的智能DIY世界......也许哪天花几百搞个蓝牙GPS定位器,装个地图软gQ就可以实现手机GPS定位了?/p> <p>       <a href="http://www.aygfsteel.com/images/blogjava_net/michaelcao/WindowsLiveWriter/NOKIA_1339A/n72_4.jpg"><img style="border: 0px none ;" alt="n72" src="http://www.aygfsteel.com/images/blogjava_net/michaelcao/WindowsLiveWriter/NOKIA_1339A/n72_thumb_1.jpg" border="0" height="197" width="244" /></a> <a href="http://www.aygfsteel.com/images/blogjava_net/michaelcao/WindowsLiveWriter/NOKIA_1339A/6630_2.jpg"><img style="border: 0px none ;" alt="6630" src="http://www.aygfsteel.com/images/blogjava_net/michaelcao/WindowsLiveWriter/NOKIA_1339A/6630_thumb.jpg" border="0" height="197" width="244" /></a> </p> <p>      n72                                                          6630</p> <img src ="http://www.aygfsteel.com/michaelcao/aggbug/234121.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/michaelcao/" target="_blank">依然Fantasy</a> 2008-10-13 22:59 <a href="http://www.aygfsteel.com/michaelcao/archive/2008/10/13/234121.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开始研I其实已l新了很久的"新架?http://www.aygfsteel.com/michaelcao/archive/2007/03/13/103570.html依然Fantasy依然FantasyTue, 13 Mar 2007 08:09:00 GMThttp://www.aygfsteel.com/michaelcao/archive/2007/03/13/103570.htmlhttp://www.aygfsteel.com/michaelcao/comments/103570.htmlhttp://www.aygfsteel.com/michaelcao/archive/2007/03/13/103570.html#Feedback3http://www.aygfsteel.com/michaelcao/comments/commentRss/103570.htmlhttp://www.aygfsteel.com/michaelcao/services/trackbacks/103570.html  用一个已不写E序的朋友的话说Q现在Java世界里真是让人眼q݋乱,不仅对于新手Q就是q去熟悉Servlet、JSPQEJB的programmerQ估计要完全搞明白现在的‘新生态架构’也不是很容易。从N多年前的‘一ơ编译到处运行’到后来的EJBQ再到现在的Spring、Hibernate、Webwork、JSF{诸多表现层、数据层Q以及支持MVC、AOP的框Ӟ再加上JDK1.5后加入的泛型{新功能Q如果是一直以Servlet,JSP、JDBC或是EJB开发的话,现在H然接触到这些东西真是要学习一阵了。最q在看《越狱》,惌v一个ƈ不恰当的比喻Q好g个服?0q的老家伙,有一天终于刑满释放,l果出来后却发现外面的世界早已不是他所想的那样了。。?br />
  q好我们对于q些变化早有准备Q最快的学习Ҏ莫过于直接针对一个系l进行源码分析、学习、剥d其中用到的技术方面,然后试用于我们自已的项目或产品中去。用google、baidu很快把焦点定位在了一个开源的|上C֌http://www.laoer.com/ 卛_乙社区,我们兛_的是技术架构,它用的是Struts+Spring+HibernateQstruts1.x版本虽然比vJSF、Tapestry、Webwork以及Webwork和Struts合ƈ的Struts2.xQstrtus1.xq不是很先进Q但q套源码的成熟度和这个架构的使用率一定很高,N多项目都在用q种架构Q况?者结合其中必有玄机,q是有的学了Q)
  
  _看了一下这套系l的架构以及源码Q大U理了一下思\Q打根据源码中用到的技术,按几个方面去研究Q围l社区系l中的应用,再写几篇文章当是一U成果吧?br />        主要有以下几斚wQ?br />  Struts与Spring集成应用
         Hibernate与Spring的集成应?br />        OSCache的应?q里主要用于~存POJO)
        Intecepterx截器的应?br />        Ajax的应用以及Prototype
        。。。?/p>

       



依然Fantasy 2007-03-13 16:09 发表评论
]]>
վ֩ģ壺 ɳ| ʡ| Դ| ʡ| ӽ| ݸ| ͨ| | ǰ| ƽ| | ͨ| Զ| | | | | | ¡| | Ϻ| | | | | | | | Դ| | | ƽ| ˹| կ| ͬ| ȫ| ޽| | | | |