??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美蜜桃一区二区三区,yourporn在线观看中文站,亚洲天天综合 http://www.aygfsteel.com/michaelcao/zh-cn Tue, 17 Jun 2025 18:33:59 GMT Tue, 17 Jun 2025 18:33:59 GMT 60 利用U程池上传大文g(? http://www.aygfsteel.com/michaelcao/archive/2009/03/21/261173.html依然Fantasy 依然Fantasy Sat, 21 Mar 2009 02:40:00 GMT http://www.aygfsteel.com/michaelcao/archive/2009/03/21/261173.html http://www.aygfsteel.com/michaelcao/comments/261173.html http://www.aygfsteel.com/michaelcao/archive/2009/03/21/261173.html#Feedback 0 http://www.aygfsteel.com/michaelcao/comments/commentRss/261173.html http://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);
}
}
]]>利用U程池上传大文g(? http://www.aygfsteel.com/michaelcao/archive/2009/03/21/261167.html依然Fantasy 依然Fantasy Sat, 21 Mar 2009 02:25:00 GMT http://www.aygfsteel.com/michaelcao/archive/2009/03/21/261167.html http://www.aygfsteel.com/michaelcao/comments/261167.html http://www.aygfsteel.com/michaelcao/archive/2009/03/21/261167.html#Feedback 0 http://www.aygfsteel.com/michaelcao/comments/commentRss/261167.html http://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)
]]> 利用U程池上传大文g(一) http://www.aygfsteel.com/michaelcao/archive/2009/03/19/260913.html依然Fantasy 依然Fantasy Thu, 19 Mar 2009 14:26:00 GMT http://www.aygfsteel.com/michaelcao/archive/2009/03/19/260913.html http://www.aygfsteel.com/michaelcao/comments/260913.html http://www.aygfsteel.com/michaelcao/archive/2009/03/19/260913.html#Feedback 0 http://www.aygfsteel.com/michaelcao/comments/commentRss/260913.html http://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>
]]> Oracle中返回结果集的存储过E?/title> http://www.aygfsteel.com/michaelcao/archive/2009/01/13/251189.html依然Fantasy 依然Fantasy Tue, 13 Jan 2009 13:55:00 GMT http://www.aygfsteel.com/michaelcao/archive/2009/01/13/251189.html http://www.aygfsteel.com/michaelcao/comments/251189.html http://www.aygfsteel.com/michaelcao/archive/2009/01/13/251189.html#Feedback 0 http://www.aygfsteel.com/michaelcao/comments/commentRss/251189.html http://www.aygfsteel.com/michaelcao/services/trackbacks/251189.html google了一不错的例子Q加了点注解Q这Lh更方便了Q)
Oracle不像SQLServer那样在存储过E中用Select可以返回结果集Q而是通过Out型的参数q行l果集返回的。实际上是利用REF CURSOR
--procedureq回记录集:
----------------------声明一个Package--------------
CREATE OR REPLACE PACKAGE pkg_test
AS
TYPE myrctype IS REF CURSOR;
PROCEDURE get (p_id NUMBER, p_rc OUT myrctype ); --Package中声明名为get 的Procedure(只有接口没内?
END pkg_test;
--------------------------------------------------------
-----------------声明Package BodyQ即上面Package中的内容Q包括Procedure get---------------------
CREATE OR REPLACE PACKAGE BODY pkg_test
AS
PROCEDURE get (p_id NUMBER, p_rc OUT myrctype )
IS
sqlstr VARCHAR2 (500);
BEGIN
IF p_id = 0 THEN
OPEN p_rc FOR
SELECT ID, NAME, sex, address, postcode, birthday
FROM student;
ELSE
sqlstr :=
'select id,name,sex,address,postcode,birthday
from student where id=:w_id '; --w_id是个参数Q?/p>
--以下 p_rc是个 REF CURSOR 游标cdQ而且是OUT型参敎ͼ卛_q回一个记录集了。USING p_id是替换上面SQL?w_id值拉:)
OPEN p_rc FOR sqlstr USING p_id;
END IF;
END get;
END pkg_test;
--functionq回记录集的例子Q原理和上面相同Q而是用function的return值来q回记录集?/strong>
函数q回记录?
建立带ref cursor定义的包和包体及函数Q?
CREATE OR REPLACE
package pkg_test as
/* 定义ref cursorcd
不加returncdQؓq型,允许动态sql查询Q?
否则为强cdQ无法用动态sql查询;
*/
type myrctype is ref cursor;
function get(intID number) return myrctype;
end pkg_test;
/
CREATE OR REPLACE
package body pkg_test as
--函数?
function get(intID number) return myrctype is
rc myrctype; --定义ref cursor变量
sqlstr varchar2(500);
begin
if intID=0 then
--静态测试,直接用select语句直接q回l果
open rc for select id,name,sex,address,postcode,birthday from student;
else
--动态sql赋|?w_id来申明该变量从外部获?
sqlstr := 'select id,name,sex,address,postcode,birthday from student where id=:w_id';
--动态测试,用sqlstr字符串返回结果,用using关键词传递参?
open rc for sqlstr using intid;
end if;
return rc;
end get;
end pkg_test;
]]> 在ORACLE存储q程中创Z时表 http://www.aygfsteel.com/michaelcao/archive/2009/01/13/251185.html依然Fantasy 依然Fantasy Tue, 13 Jan 2009 13:23:00 GMT http://www.aygfsteel.com/michaelcao/archive/2009/01/13/251185.html http://www.aygfsteel.com/michaelcao/comments/251185.html http://www.aygfsteel.com/michaelcao/archive/2009/01/13/251185.html#Feedback 0 http://www.aygfsteel.com/michaelcao/comments/commentRss/251185.html http://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;
]]> Oracle:PL/SQL 中如何用Array http://www.aygfsteel.com/michaelcao/archive/2009/01/13/251183.html依然Fantasy 依然Fantasy Tue, 13 Jan 2009 13:07:00 GMT http://www.aygfsteel.com/michaelcao/archive/2009/01/13/251183.html http://www.aygfsteel.com/michaelcao/comments/251183.html http://www.aygfsteel.com/michaelcao/archive/2009/01/13/251183.html#Feedback 0 http://www.aygfsteel.com/michaelcao/comments/commentRss/251183.html http://www.aygfsteel.com/michaelcao/services/trackbacks/251183.html Oracle本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
]]> Oracle PL/SQL使用%TYPE?ROWTYPE http://www.aygfsteel.com/michaelcao/archive/2009/01/07/250212.html依然Fantasy 依然Fantasy Wed, 07 Jan 2009 00:38:00 GMT http://www.aygfsteel.com/michaelcao/archive/2009/01/07/250212.html http://www.aygfsteel.com/michaelcao/comments/250212.html http://www.aygfsteel.com/michaelcao/archive/2009/01/07/250212.html#Feedback 2 http://www.aygfsteel.com/michaelcao/comments/commentRss/250212.html http://www.aygfsteel.com/michaelcao/services/trackbacks/250212.html Oracle 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>
]]> 重回NOKIA怀?/title> http://www.aygfsteel.com/michaelcao/archive/2008/10/13/234121.html依然Fantasy 依然Fantasy Mon, 13 Oct 2008 14:59:00 GMT http://www.aygfsteel.com/michaelcao/archive/2008/10/13/234121.html http://www.aygfsteel.com/michaelcao/comments/234121.html http://www.aygfsteel.com/michaelcao/archive/2008/10/13/234121.html#Feedback 0 http://www.aygfsteel.com/michaelcao/comments/commentRss/234121.html http://www.aygfsteel.com/michaelcao/services/trackbacks/234121.html ?手机不幸被盗Q可恶的偷Q偷我的手机你就断手断脚吧。明天准备联pȝ爱和Ud客服看是否能通过手机串码把手机屏蔽,据说从技术角度讲是可以行的通的Q问题就是这U事手机q营商愿不愿意给做了?a >英国已经有这U服务可以被盗手机不能再被使用Q不知道特色中国啥时能有q种真正特色的服务呢?/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个怽都没留下..怀念呀.....
w810
qx忙没旉逛商店,?到滨江道溜达了一圈,据卖手机的服务员_天语手机销量已l能和NOKIA有的一gQ想想一q多前还是名不见l传Q世界变化快呀。由于之前在淘宝上看qhgQ所以无论哪ƾ手机门店里的h格基本上没法接受了。现在消费观念已不同从前?有可能被全球l济危机吓得呵呵?Q基本上2000元以上的手机׃看了Q找了几ƾ什么烦?a >M600i?a >880i以及夏新E78 ...最后还是回发现q麻不买个NOKIA机的呢,我在W810前就是用的NOKIA6630呀Q当时感觉智能机很强大很DIY。最后发现淘宝上N72行货h已经掉到1300左右(刚出时得有三四千?Q还l开发票和全国联保,OMG|是它了.....
没想到那?a >卖家别看信用g高,东西相对便宜Q服务态度到是好Q基本上是送了?GB卡,周日拍周一晚上收到货了,一看包装写着是空q?..东西也不错,开后机器没有M问题Q还有正规发。有的信用g高的卖家估计是想薄利多销招揽客户吧,不像有的几个L者是大皇冠的卖家Q买个东西好像还不是很热情的样子Q也有可能是客户多忙不过来了?/p>
说说N72Q基实和我在w810之前用过?630没啥太多区别Q都是NOKIA S60pȝQ就是外形小了一点,薄了一点点Q内存大了些Q这回是1GB存储卡、摄像头?30万变?00?多了FM攉功能Q操作系l版本新了些。我基本上当它是新版6630用,呵呵?/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>
n72 6630
]]> 开始研I其实已l新了很久的"新架? http://www.aygfsteel.com/michaelcao/archive/2007/03/13/103570.html依然Fantasy 依然Fantasy Tue, 13 Mar 2007 08:09:00 GMT http://www.aygfsteel.com/michaelcao/archive/2007/03/13/103570.html http://www.aygfsteel.com/michaelcao/comments/103570.html http://www.aygfsteel.com/michaelcao/archive/2007/03/13/103570.html#Feedback 3 http://www.aygfsteel.com/michaelcao/comments/commentRss/103570.html http://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很快把焦点定位在了一个开源的|上Chttp://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>
]]>
վ֩ģ壺
ͬ |
|
|
|
|
̨ |
|
ͷ |
|
|
|
|
|
ƽ |
̫ |
߱ |
|
Ĭ |
ƽ |
|
|
̨ |
ɽ |
ߴ |
Ϫ |
䴨 |
|
ɽ |
ͬ |
Զ |
ɽ |
ָ |
Ƥɽ |
|
|
ͺ |
|
˾ |
|
|
|