部落客廣告聯播

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的處境應該會越來越尷尬吧!

2007年12月24日 星期一