java.sql.ResultSet absolute造成out of memory

java.sql.ResultSet 使用absolute方法可以移動ResultSet的指標到想要的筆數,
當 JDBC跟資料庫要資料時,會回傳一個ResultSet,但不是把所有查詢的結果均回傳至Web Server端,
而是只給前面幾筆資料,可以利用ResultSet的方法setFetchSize來設定一次回傳的筆數,
(一次傳的多,等待的時間就比較長,傳的太少,要一直跟資料庫要ResultSet.next()也會比較慢)
當ResultSet向下移動碰觸或是快要碰觸到目前回傳的筆數時,會自動再跟資料庫要設定好的筆數,
而把目前筆數以上的資料全都暫存在記憶體裡。
以上是ResulSet的基本原理,當一次查詢的量夠大時,而利用absolute來移動到想要的Row時,
就有可能發生out of memory的問題,
舉個列子:

好用的封裝軟體CreateInstall Free

如果使用VisualStudio Express 2008開發軟體的話,想要發佈給其它人使用,這倒是個麻煩,
可以利用內建的OneClick方式封裝,或是利用功能強大的InstallShield Express來做,不過InstallShield並非免費,
CreateInstall Free是一套免費的封裝Install的軟體,沒有註冊的狀況下,在安裝時下方有會提示CreateInstall Free字樣,
它不但可以把程式整個封裝進入一個setup.exe的執行檔,還可以對內容進行壓縮、放入startup目錄,
對付一些簡單的程式的封裝是個很好的選擇,不過它也不是完全沒有缺點,
像是沒法子自動檢查是否存在Framework .net 等。

C# Thread應用

Java的Thread是利用繼承Thread或是實作Runable來實現的,而C#確是不一樣的,
C#利用一個new System.Threading.Thread物件,建構時傳入想要在執行緒裡動作的事件,
啟動方法跟Java一樣,利用Start()來開始這個執行序,
System.Threading.Thread t = new System.Threading.Thread(要執行的Function名稱);

啟動方式
t.Start();

那如果有參數要傳入呢?
可以撰寫一個Class,先建構及設定好需要的參數,再把這個class實作的物件及方法傳入實作的System.Threading.Thread物件裡
就可以啦
Object x = new Object();
System.Threading.Thread t = new System.Threading.Thread(x.方法);

這裡有一個範例可以參考一下
先建立一個Class,名叫thread1
利用無窮迴圈讓內容一直跑,再利用Sleep(毫秒)來使其停一秒再執行。

Serializable序列化Socket傳送範例

在socket傳送過程中,
利用ObjectInputStream及ObjectOutputStream傳接送資料
先定義一個Object,
而Object必需implements java.io.Serializable介面
Serializable可以參考Serializable序列化

Serializable序列化

Java的Serializable序列化是個很好用的東西,平常可能很少會遇到使用,
Serializable大概來說就是把Java Object變成序列,可以傳輸到其它Java的應用上,
最好的例子就是ServerSocket應用,大部份的二個不同的Service要相互利用socket溝通,
最簡單的方式就是傳送文字指令、xml、編碼過的資訊,而在Java裡提供了一個很好用的機制,
當二邊Socket Service均使用Java開發時,則可在二邊放置相同的class Object(含有相同的package路徑),
再利用java.io.ObjectInputStream及java.io.ObjectOutputStream來傳送及接到,
可以設計一個Java Bean,在client接設定屬性後傳送給Server,在由Server接收後,
直接取用Bean的值,底下提供一個Java Bean implements Serializable的範列

Thread應用-Java SocketServer

Thread的應用,最好的例子就是SocketServer,
Thread簡介可以參考Java Thread簡介
Apache Tomcat用最簡單的方式看,它也是個SocketServer,服務http要求及回覆,
底下有一個簡單的例子,可以建立一個SocketServer,等待Connection的連入
概念是建立一個port Waiting,有人連入後,則再回到Waiting
順便說明implement java.lang.Runnable的用法

public class SocketServer implements java.lang.Runnable {   private int port;   private java.net.ServerSocket ss; [...]

Java執行Store Procedure預儲程序

利用JDBC取得Connection後,可以利用以下幾種方式來執行資料庫的Store Procedure
1.沒參數
CallableStatement cs;  try {    // 設定 CallableStatement    cs = connection.prepareCall("{call myproc}");    // 執行 CallableStatement    cs.execute();  } catch (SQLException e) {  } 
 

2.有IN參數

自動取號AutoEnCode-Oracle Stored Procedures

在Oracle裡並沒有像MySql那樣子有自動編號的功能,
如果需要產生不重覆的編號,這時就需要自己動手來做了,
大概的方法有二,不過概念基本上是相同的,
想法,利用一個Table存放編號資料,例如檔頭及碼長及取號的來源(那一個Table)
每次需要取號時則跟此Table要資訊,並把碼長+1存放回去,順便回傳碼長+1
可以利用程式來編寫或是直接在Oracle上寫Sotre Procedures或function
比較建議在Oracle上直接撰寫sp,這樣子不管是其它的SP或是Server上的程式二者均可使用,
不需要另外再行撰寫

Java Thread簡介

Thread跟process是有點像又不太像的東西,
一樣是可以同時(?)進行多件事件的方式,但在行為上確不太一樣,
process可以想像是一個cpu,多process可以想成是多個cpu
不同的事件可以經由不同的process做處理,
Thread是在process上以時間做為分格來執行多種事件的方式,
Thread快速在不同事件中切換(同一時間只會執行一個Thread),讓使用者看似同時進行著,
也就是說在同一個時間點上Thread只會有一個,而process可能會有多個,
善用Thread會讓程式更加靈活,不過也可能會因為規畫不當,而讓Thread 暴掉,
底下先用一個簡單的例子說明,二個Thread各自執行的結果:

[javascript]滑鼠移動評分

這個javascript就是一般看到mouse移動到第顆星就會顯示幾分,減少單板的radio choice
構想
在每一個img裡,偷偷給定一個attribute 當做index 的值(判斷mouseover是在那一個img裡)
設定img的mouseover動作,當設定的attribute跟for loop的index小於時,可定另一種圖
否則就回覆成原始的圖
source大概如下