${pageContext.request.contextPath}
部落客廣告聯播
2008年4月15日 星期二
SimpleTagSupport中取得ServletRequest物件
HttpServletRequest req = (HttpServletRequest)((PageContext)this.getJspContext()).getRequest();
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");
File f=new File(application.getRealPath("/WEB-INF/123.txt"));
2. (適用/WEB-INF/classes目錄下檔案)
this.getClass().getClassLoader().getResourceAsStream("123.txt");
2008年3月31日 星期一
2008年3月29日 星期六
2008年3月16日 星期日
2008年3月15日 星期六
Quartz使用JDBCDatasoruceTX使用tomcat datasource設置檔範例
Quartz使用JDBCDatasoruceTX使用tomcat datasource設置檔範例
[quartz.properties]
[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物件
使用
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物件...
3. prepare statement
2. 將該Reader寫入暫存檔
3. 執行
4.關閉來源串流
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月11日 星期一
2008年2月4日 星期一
2008年2月3日 星期日
2008年1月30日 星期三
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;
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的處境應該會越來越尷尬吧!
昇陽10億美金買下開放源碼資料庫MySQL
甲骨文85億美元現金買下BEA
科技界大吃小時有所聞,併入也不會是壞事!
但想想JAVA DB、和OC4J的處境應該會越來越尷尬吧!
2007年12月24日 星期一
SimpleTagSupport中取得HttpServletRequest方法
HttpServletRequest req = (HttpServletRequest)((PageContext)this.getJspContext()).getRequest();
2007年11月28日 星期三
訂閱:
文章 (Atom)