部落客廣告聯播

2008年12月15日 星期一

JAVA列印PDF , TXT

為了要用Java PDF, 搜尋到了下面文章, 配合PDFRender API, 但不管怎樣執行就是有錯誤

http://www.juixe.com/techknow/index.php/2008/01/17/print-a-pdf-document-in-java/


最後找到了 由java配合cmd.exe和Acrobat reader叫用方式呼叫列印, 缺點是要裝reader,但優點是reader能開的pdf就一定都能印, 請參考:

Java调用cmd的静默打印PDF方法 Java silent print PDF by calling Windows cmd




1. public static boolean printPdf(String pdfPath){
2. try{
3. Runtime.getRuntime().exec("cmd.exe /C start acrord32 /P /h " + pdfPath);
4. return true;
5. }catch(Exception e){
6. e.printStackTrace();
7. return false;
8. }
9. }

類似的狀況 , 我們可以配合notepad.exe列印文字檔
只要把上面的exec()內容換為
cmd.exe /C start notepad /p d:\123.txt

2008年10月24日 星期五

WebSphere 6.1 內配置的Connection Pool DataSource取得的連線 resultSet closed錯誤....

經由WebSphere 6.1 內配置的Connection Pool DataSource取得的連線 , 在某些狀況查詢回來的ResultSet在操作時會發生 :

com.ibm.db2.jcc.c.SqlException: [ibm][db2][jcc][10120][10898] 作業無效:result set 已關閉。 (result set closed)

錯誤訊息, 這些錯誤在Tomcat內使用tomcat自帶的Connection pool DataSource並不會發生。

解決方法: 使用WAS管理主控台, 設置該DataSource的參數 resultSetHoldability 為 1

(詳細設定步驟 請參考網頁:

http://gocom.primeton.com/blog_24523.htm?PHPSESSID=8...

並以「result set closed」為關鍵字搜尋該頁面)

2008年10月13日 星期一

[JavaScript] email地址驗證


(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(obj.email.value))


地址格式正確回傳回true,否則回傳false

2008年10月9日 星期四

Websphere 6.1.0無法安裝兩個以上War檔

在websphere 6.1的管理主控台, 安裝新應用程式, 要上第二個WAR檔時,最後出現找不到META-INF/Application.xml之類的錯誤訊息。
Ant task呼叫安裝, 也是失敗。
反覆尋找才知道要裝上6.1.0.19 fix pack問題就解決了~~

2008年8月14日 星期四

Eclipse 匯出WAR透過Websphere主控台程式安裝到WAS會有文件丟失問題

Eclipse 匯出WAR透過Websphere主控台程式,
安裝到WAS, WAS在解開時會有文件丟失問題。

此乃該Eclipse專案為CVS專案, 其WAR檔可能會有內含 「.#」開頭的垃圾檔案。
只要刪除WAR檔中的這些垃圾檔案, 即可正常deploy至Websphere。

詳細可參考:
解决webspherewar包部署后丢失文件的问题

2008年8月7日 星期四

RowSet分頁與MS SQL Server2005的問題

使用CachedRowSet的setPageSize()之後, 作execute動作竟然會錯誤 -->
com.microsoft.sqlserver.jdbc.SQLServerException: 不支援此資料指標類型/並行的組合。(The cursor type/concurrency combination is not supported.)

上網查了一下, 大概得到的答案是MS SQL Server 2005不支援 (TYPE_SCROLL_INSENSITIVE + CONCUR_UPDATABLE)組合。
納悶的是我明明已經將CachedRowSet物件設為 ( TYPE_SCROLL_INSENSITIVE , CONCUR_READ_ONLY)組合, 為何在setPageSize後會出現錯誤呢??

RowSet RI現行版本是non-Open Source的(在OPEN JDK7中才有公開原始碼), 所以Debug時真的不好抓出問題點。

通過些反編工具檢查原始碼, 才發現在CachedRowSetReader類別readData方法中有一段:

.......
if (cachedrowset.getPageSize() == 0) {
cachedrowset.populate(resultset);
} else {
preparedstatement = connection.prepareStatement(
cachedrowset.getCommand(), ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
..........


既然如此, 也就是說要解決此問題的話, 我們要建立自己的CachedRowSetReader和Provider類別並在實體化CachedRowSet物件時指定Provider。
另外建立一繼承CachedRowSetImpl物件override傳hashtable建構子在其內要生成SQLWarning及RowSetWarning給自己的成員,才不會照成NullPointException

2008年7月30日 星期三

[Javascript] parseInt("08")問題

使用Javascript轉換型態有個很有趣的問題
parseInt("01") ~ parseInt("07") 都正常
但parseInt("08") parseInt("09")結果都為零

原因可參考http://blog.xuite.net/n3785/tech/12824014

解決方法:
parseInt("08",10);
Number("08");

2008年7月22日 星期二

[JavaScript]使用CSS Expression達成table奇行偶行顏色變換

使用CSS Expression達成table奇行偶行顏色變換,


<style type="text/css">
tr{
table:expression(this.style.background=(rowIndex%2==1)?'orange':'red')
}
</style>

很可惜的CSS Expression只在IE適用..........

2008年7月20日 星期日

2008年6月16日 星期一

eclipse中設定utf-8編碼的java檔匯出java doc

如果你的.java是utf-8編碼的, 使用java doc產生文件時會出錯, 要加參數,
簡言之, 如下圖:

2008年6月7日 星期六

tomcat DBCP 與 MySQL

故事是這樣的:
我的程式直接使用MySQL connector/J JDBC Driver連接資料庫操作都很正常 ,
但透過Tomcat配置的data source(DBCP)取得connection來對資料庫操作 ,
總是不定時的會出現 'No operation allowed after connection closed' 錯誤訊息,
意思是connection已經被關閉掉了,
也換了最新的JDBC Driver, 也換過Tomcat 版本,怎麼試結果都一樣,還是錯,
查了許久也作了trace, 這connection並不是我的程式關掉的,
同時還將程式移到了websphere 並使用websphere中的connection pool, 結果是不會發生這樣的錯誤的。
那麼剩下的兩個可能便是:

  1. DBCP程式關掉的
  2. MySQL server端關掉的

OK, 網上拜神(Google), 搜到許多的線索, 有人說connection url要有autoReconnect=true選項,但這僅適用於連線時間超過八小時者。bug database有類似問提,但早就已經修正好了。 也有人說要改MySQL server的my.ini (my.cnf) ,恩...改了可是還是錯。

OK...上面都是廢言....
解決方案是在 tomcat server.xml中的<context>其內的<resource>標籤(設定DataSource用的)要多一個 屬性 validationQuery="select 1" , 之後便不會再三不五時拿到被關掉的connection了,測底解決。

----------------------------------------------------------------------------------------------

為何如此能解決呢??
我猜想大概是多了validationQuery後, DBCP在做相關資料庫操作時,
若該connection沒被客戶端程式(也就是我的程式)手動關閉connection ,也沒被DBCP關閉connection ,
會先用validationQuery的sql檢查, 是否連線被MySQL server端中斷了 ,如果是就自動再從MySQL server取得一個新的connection。
以上僅是小弟猜測, 因為對DBCP內部運作並不是很熟悉 ,所以如有人能回答請不吝提供正確答案...

-------------------------------------------------------------------------------------------

但... 問題來了....
如果以上我的猜測是正確的..... 那麼DBCP自動從MySQL server再次取得新的connection , 那麼也就代表了我之前被MySQL server端無端close掉的connection若是transaction的(autoCommit=false)不就無端的被中斷掉了,而且我也不會得知..... +.+ \\\
,這樣實在太太太不合理的.....................

所以說呢無端斷線問題暫時解決, 但關於transaction的疑問, 不知有哪位先進可以回答呢??

2008年6月2日 星期一

Sun RowSet bug on JDK 1.4

一直都用rowset很爽, 但今天在JDK 1.4上跑new CachedRowSetImpl()時都是發生NullPointerException, 一開始還以為是DataSource沒設好, 搞了一大圈才知道是rowSet和JDK的版本相容問題,(我使用的rowset版本是最新的jdbc_rowset_tiger-1_0_1-mrel-ri)
解決方法:
把rowset.jar中的 com\sun\rowset\RowSetResourceBundle.properties 拷貝兩份出來,一份改名為RowSetResourceBundle_TW.properties,另一份改名為RowSetResourceBundle_zh-TW.properties,再加到jar檔中同個目錄中.
OK, 最後重啟AP Server,問題解決了.


(對了,最後要感謝提供這個解決方法的好心人)
參考來源:
http://thinkbase.net/w/main/Wiki?2006-04-01+rowset+%E5%8F%82%E8%80%83%E5%AE%9E%E7%8E%B0+jdbc_rowset_tiger-1_0_1-mrel-ri.zip+%E7%9A%84+bug

2008年5月28日 星期三

Websphere 建立 MySQL DataSource 的步驟

Websphere 建立 MySQL DataSource 的步驟

後記:
若在第第四步測試時通過,但顯示有一個警告,打開SystemOut.log中顯示的是「DataSource 類別 com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource 沒有 'factory' 內容」則可把在第三步驟自訂內容加入的 factory( java.lang.String ) property項目刪除,就不會再出現警告了............

撰寫 web service client stub時的錯誤

若出現
java.lang.ClassCastException: com.sun.xml.internal.messaging.saaj.soap.ver1_1.Message1_1Impl cannot be cast to com.sun.xml.messaging.saaj.soap.MessageImpl
訊息,可能是因為JDK是1.6太新,
則需要下載最新版的SAAJ API,
https://saaj.dev.java.net/

2008年5月25日 星期日

如何在Eclipse3.3中發布專案到local Websphere 6.1 AP Server

如何在Eclipse3.3中發布專案到local Websphere 6.1 AP Server

即使網路上的消息是eclipse預計在2007Q3新增對Websphere AP server 6.1的支援 , 但直到現在在Eclipse中新增server時websphere都還是只有6.0可選擇。

經過Google神廟九十叩一百八十拜的努力後, 發現了下列連結文章:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=160220
https://bugs.eclipse.org/bugs/attachment.cgi?id=95764&action=diff

這裡將使用eclipse 3.3(2007Q4版,eclipse-jee-europa-winter-win32)作修改, 使之能支援publish 至WAS 6.1。

1. 首先打開 [eclipse目錄] \plugins\org.eclipse.jst.server.websphere.core_1.0.201.v20070608 目錄。
2. 將plugin.xml , plugin.properties, webspherecore.jar 三個檔案覆蓋到 該目錄中。(建議覆蓋前原本的三個檔案先作備份)
3. 將websphere.6.1.serverdef 放到該目錄下serverdef目錄, 將websphere.6.1.xml放到該目錄下serverdef \ scripts 目錄。
4. 開啟eclipse。
5.點選功能選單 window – preference , 點選 Server—installed Runtimes項目,如下圖:

6. 按下Add.. 按鈕 , 展開IBM項目, 你就會看到IBM WhebSphere V6.1
(
如果沒看到IBM Websphere V6.1項目,而你確定你相關檔案都已經放了,那麼請關閉eclipse , 使用指令 eclipse –clean 來開啟就可以看到了)
7. 按下Next> , IBM WebSphere Installation Directory填入你安裝websphere 6.1的目錄路徑,注意路徑中不可有空白,如果有包含空白字元路徑,可使用dos 8.3的方式填入,像我這就填入 C:/progra~1/IBM/WebSphere/AppServer
,
先不要按Finish,我們要設一下JRE,按下installed JRE preferences
8. 這邊我們要選擇Websphere內帶的JRE避免編譯出來的class版本與serverjdk版本不符而發生錯誤
9. 按下Add..按鈕, 如下圖,JRE name可自己取,JRE home Directory 則填入websphere內帶JDK的目錄路徑 , 這邊我是填C:\Program Files\IBM\WebSphere\AppServer\java , 按下 OK 再按一次oK
10. 回到了new server runtime視窗,JRE選擇我們剛新增的JRE,如下圖:
11. 切換到Java EE perspective ,點選 server View, 按下右鍵點選New—server

12. Server type一樣選IBM WebSphere V6.1,下面的 server runtime選我們剛新增好的IBM WebSphere V6.1 ,Next..
13. 接下來在 server profile directory填入你的server profile目錄, 我這是填入c:/progra~1/IBM/WebSphere/AppServer/profiles/AppSrv01 , 按下finish
14. 接著就可以在server view中看到我們新增的server, 在其上按下右鍵選Add and Remove projects,
將你的Ear專案加入後 , 就可以做publish的動作了 , publis成功的話你會在console perspective看到如下訊息:

Buildfile: C:\Users\Dolph\Desktop\eclipse\plugins\org.eclipse.jst.server.websphere.core_1.0.201.v20070608\serverdef\scripts\websphere.6.1.xml

deploy.j2ee.ear:

[jar] Building jar: C:\Users\Dolph\Desktop\eclipse\ws\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\xxxxEAR.ear

[wsadmin] WASX7209I: 已利用 SOAP 連接器來連接 PCNode01 節點中的 "server1" 程序;程序類型是:UnManagedProcess

[wsadmin] ADMA5017I: 已開始解除安裝 xxxxEAR

[wsadmin] ADMA5104I: 已順利更新 WebSphere:cell=xx-PCNode01Cell,node=xx-PCNode01 的伺服器索引項目。

[wsadmin] ADMA5102I: 已順利從配置儲存庫中刪除xxxxEAR的配置資料。

[wsadmin] ADMA5011I: xxxxEAR應用程式的 temp 目錄清理完成。

[wsadmin] ADMA5106I: 已順利解除安裝應用程式 xxxxEAR

[wsadmin] WASX7209I: 已利用 SOAP 連接器來連接 xx-PCNode01 節點中的 "server1" 程序;程序類型是:UnManagedProcess

[wsadmin] ADMA5016I: 已開始安裝 xxxxEAR

[wsadmin] ADMA5058I: 用部署目標的版本來驗證應用程式和模組版本。

[wsadmin] ADMA5018I: 正在執行 EJBDeploy 指令來處理企業保存檔 (EAR) C:\Users\Dolph\AppData\Local\Temp\app7121.ear

[wsadmin] Starting workbench.

........more

最後, 經過測試可正常發佈EAR project ,沒辦法直接發佈dynamic web project, 所以記得新增enterprise application project把相關的dynamic web project加入成web module後再發佈…………………….

15.
對了, 還有件重要的事, 記得把專案內容Java Compiler中的compiler compliance level設為5.0(因為websphere內帶使用的JDK1.5版的), 否則就算成功拋上server, 程式run 時還是會出錯喔。

16. 另外, 除了上列設定外, 在專案內容的Java Build Path中也要記得將IBM Websphere v6.1 server runtime加入libraries頁中喔, 不然也會導致編譯錯誤的問題喔。

2008年5月23日 星期五

讓JSP container把.js當成JSP處理

在web.xml中加入:

<jsp-config>

<jsp-property-group>
<description>Treat .js(Dynamic JS) as JSP file</description>
<display-name>JS</display-name>
<url-pattern>*.js</url-pattern>
<el-ignored>false</el-ignored>
<page-encoding>utf-8</page-encoding>
<scripting-invalid>false</scripting-invalid>
<is-xml>false</is-xml>
</jsp-property-group>

</jsp-config>

2008年5月13日 星期二

JDBC SQL Type與Java Type Mapping

請參閱

Websphere Application Server Toolkit 6.1.1

Websphere Application Server Toolkit 6.1.1 在vista上跑, 頻頻當掉, 且build後沒有class檔。
(疑其內帶JVM與Vista相容性不高)....

救命囉.........


後記:
原來要6.1.1.2才支援Vista(參照IBM),偏偏我用的是6.1.1

後後記:
更新了fix 6後 , 還是沒有編出class檔(吶悶0,0), 後來發現原來我的workspace若在 c:\users下面的話才會有這問題 , 一定又是Vista的UAC或檔案保護甚麼鳥的的傑作, 氣死我了 ,浪費這麼多時間.........

再後記:
疑...........又不行了.......真怪............
發現原來在AST中使用dynamic web project如果source的package level超過三層,就會照成邊不出class的問題 , 這應該是APT的Bug吧............
算了........... 放棄......... Uninstalling Websphere AST.................

2008年5月12日 星期一

Request encoding與 Filter與中文亂碼

故事是這樣的,我的web-app中有兩個filter
  1. CharEncodingFilter - 針對所有request作request.setCharacterEncodin("utf-8");動作,避免亂碼
  2. SessionCheckFilter - 檢查session是否timeout,並做些附加動作

然而亂碼所有設置照理講我都做了,卻還是看到亂碼??

這到底怎麼回事呢??

答案是針對同個request只要做過getParameter( )後,即使再作setCharacterEncoding( )動作, 後續再getParameter( ) 還是會使用舊的encoding取出parameter而得到亂碼 , 所以說若要避免亂碼則setCharacterEncoding要在所有getParameter動作前呼叫!

然而在我的情況下作debug發現我的sessionCheckFilter在charEncodingFilter之前執行,而我的sessionCheckFilter剛好有做getParameter動作 , 所以當然即使我的charEncodingFilter有執行,但怎樣取都是亂碼的啦!!

而Filter執行的順序是基於何呢??

經過嘗試答案是 在web.xml中的先後擺放順序,也就是說對應CharEncodingFilter的要放在前面才對!! ( 這是在tomcat上測試結果,在其他實做如何,如果有人知道請告訴我)

照理說setCharacterEncoding( )在getParameter( )後無效的話,應該丟個Exception出來, 這樣設計也才讓人知道說 問題出在哪, 然而實際上就是沒有, 這....

2008年5月7日 星期三

Tomcat Get亂碼

使用Get出去的資料在下一頁接收會變亂碼:
1. 在程式中先將中文parameter value使用(url+utf8) encoder編碼
2. 在tomcat 的server.xml,
<connector debug="”0″" port="”8080″" maxthreads="”150″" minsparethreads="”25″" maxsparethreads="”75″" enablelookups="”false”" redirectport="”8443″" acceptcount="”100″" connectiontimeout="”20000″" disableuploadtimeout="”true”" uriencoding="utf-8" />

2008年5月4日 星期日

Spam Blog

真是好笑!沒想到Blogger的機器人也真笨(笨到家了) , 我禮拜六開了個新的blog - DB著魔錄 ,想說以後和資料庫相關的文章都放到那, 申請了還沒時間貼文, 沒想到禮拜日Blogger就給了我封信, 說 喔喔....你這blog高度可能是垃圾blog ,(臉青了,我嘴巴都還沒張開你就說我啞吧)......

機器人就是.....

2008年5月1日 星期四

關於CustomTag的TEI

在開發JSP custom tag 時,要將tag中的data放到pageContext中以利JSP頁面撈用,
通常都是在Tag中用pageContext.setAttribute("varName",var),
此外還要讓JSP知道有哪些變數可用,有兩種方法:

  1. 在.tld裡面該Tag區段中宣告元素及其內容
  2. 另外寫個TEI class (Tag Extra Info) ,然後在.tld檔中使用元素指明class位置

其中使用2的方法有時算是比較複雜的狀況下非得用到。

然而在TEI clas的getVariableInfo方法中, 我們使用TagDatao(這是這個method傳入的參數)的getAttribute或getAttributeString兩個方法時, 記得我們的tag的attribute內容必須是靜態的,也就是說不能是runtime決定的變數內容。

原因在於TEI class是在translation time(也就是JSP轉servlet)時就叫用的。

2008年4月16日 星期三

Websphere 6.1文檔

Websphere 6.1文檔連結:
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp

各版支援Spec版本:
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.base.doc/info/aes/ae/rovr_specs.html

websphere與vista UAC

Websphere裝好後,若有開Vista的UAC(User Account Control),在程式及功能表中的 啟動伺服器 與 停止伺服器兩項要按右鍵 選 以系統管理員權限執行 。
甚麼鳥UAC的....
對了 ,也因為這樣,websphere建立的windows服務是沒法成功啟用停止的,就把它停用吧,要開時從開始功能表去執行.....

在Vista上安裝Websphere

OK,工作上需求,不然我還是喜歡用Tomcat.

雖然同事常說:「xxx單位那套系統,用鳥鳥的Tomcat就可以跑了」言語中常是看不起Tomcat。
唉!!台灣人就這樣,不用錢都是最爛的。
其實,也可從中得知如果只跑Web-APP用市面上大廠的ApServer來跑,也只是用牛刀殺螞蟻,浪費拉~~

如果單以大廠ApServer的WebApp功能直接和Tomcat比,Tomcat其實還算是很讚的....
算了,看官們自己比比看........

回歸正題,Websphere AP Server V6.1版及其之後才有支援Vista,如果是V6.0或更早版本的話,
那.... 還是不要裝Vista吧....(當然不會有人拿Vista跑production,大部分都是寫程式的人才會在Vista安裝WAS,像我)

OK,Websphere從6.1.0.9開始支援Vista,但像我是6.1.0.0版,這時就要到:
http://www-1.ibm.com/support/docview.wss?rs=180&uid=swg21259542
去下載幾個xml檔案,覆蓋到特定的目錄(頁面上有寫,英文不好,那別問我,找字典吧) 大都是放在各產品目錄下的was.primary.pak目錄下,蓋好後再進行安裝,對了,安裝前還有要清一些log檔案,頁面上也有寫位置。恩... 就這樣...

2008年4月5日 星期六

如何讀取/WEB-INF和/WEB-INF/classes中的檔案

1. (適用/WEB-INF目錄下,及其所有子目錄下的檔案)
    File f=new File(application.getRealPath("/WEB-INF/123.txt"));

2. (適用/WEB-INF/classes目錄下檔案)
    this.getClass().getClassLoader().getResourceAsStream("123.txt");

2008年3月15日 星期六

Quartz使用JDBCDatasoruceTX使用tomcat datasource設置檔範例

Quartz使用JDBCDatasoruceTX使用tomcat datasource設置檔範例
[quartz.properties]


# Default Properties file for use by StdSchedulerFactory
# to create a Quartz Scheduler Instance, if a different
# properties file is not explicitly specified.
#

org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

org.quartz.jobStore.misfireThreshold = 60000

# org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.CloudscapeDelegate
org.quartz.jobstore.dataSource = MailerJ
org.quartz.jobStore.useProperties = true
org.quartz.dataSource.MailerJ.jndiURL = java:comp/env/jdbc/JMailer
org.quartz.jobStore.dataSource = MailerJ

2008年3月10日 星期一

CachedRowSet .. 'populate before calling' 錯誤訊息

故事是這樣的....


使用
CachedRowSet crs=new CachedRowSetImpl();
crs.setPageSize(2);
crs.populate(resultSetObj);
while(crs.nextPage())
{
while(crs.next())
{ //... do something here }
}
竟然出現"'populate before calling' "錯誤訊息,貓的咧,一時間還撒某帳...

原來...
若是使用populate來塞資料給RowSet是無法使用分頁功能的,
原因在於換到下頁時,RowSet無法像是用setCommand去再做一次查詢....

所以說,最好的解決方法就是改用
crs.executeQuery(conn); //conn是自己先前先取得的Connection物件

2008年3月5日 星期三

2008年2月18日 星期一

JDBC insert CLOB欄位

1. 若為String可轉為StringReader物件...

String s="String content字串";
StringReader sr=new StringReader(s);


3. prepare statement

Connection con = ds.getConnection();
String sql="insert testTable(colClob) values (?) ";
PreparedStatement pstmt=con.prepareStatement(sql);

2. 將該Reader寫入暫存檔

tmp=File.createTempFile("tmpInsertClob_", null);
BufferedWriter writer=new BufferedWriter(new FileWriter(tmp));
BufferedReader reader=new BufferedReader((Reader)insertVals.get(i));

//StringWriter用來計算字數用
StringWriter strW=new StringWriter();
int contentLength=0;
int data=0;
while((data=reader.read())!=-1)
{
writer.write(data);
strW.write(data);
}
strW.close();
contentLength=strW.toString().length();
strW=null;
writer.close();
reader.close();
BufferedReader reader2=new BufferedReader(new FileReader(tmp));

pstmt.setCharacterStream(i+1,reader2,contentLength);



3. 執行

pstmt.executeUpdate();


4.關閉來源串流

reader2.close();

2008年2月3日 星期日

Apache AXIS 簡介

Web Service可以像Java Object般來封裝與發佈,就靠AXIS了,以下是小弟參考官方安裝文件所製作的入門簡介簡報:

2008年1月29日 星期二

javascript實用技巧:動態建立<select><option>下拉選單

//取得<select>物件
var sel=document.getElementById('selProductNum') ;

//clear all
var len=sel.options.length;
for(var j=0;j<len;j++)
{ sel.options[0] = null; }

//add option
var prodNumArr=prodNums.split(",");
for(var i=0;i<prodNumArr.length;i++)
{ sel.options[i+1]=new Option(prodNumArr[i],prodNumArr[i]); }

// set which one option is selected
sel.options.selectedIndex=1;

2008年1月16日 星期三

併! 併! 併!

呵呵 今天ITHome最吸引我的兩則新聞
昇陽10億美金買下開放源碼資料庫MySQL
甲骨文85億美元現金買下BEA

科技界大吃小時有所聞,併入也不會是壞事!
但想想JAVA DB、和OC4J的處境應該會越來越尷尬吧!