WordPress 插件——CoolCode
因爲天天與代碼打交道,寫這個java技術博客少不了要個代碼高亮,Google搜了下,wordpress代碼高亮顯示的插件挺多的,費了沒多大勁發現這個CoolCode反響挺不錯,免費的,不拿白不拿。^_^
使用的語法是:
<coolcode>
代碼
</coolcode>
如果要加亮具體的語言,可以用 lang 屬性來指定:
<coolcode lang=”程序設計語言”>
代碼
</coolcode>
如果不需要行號,可以使用 linenum 屬性來指定:
<coolcode lang=”程序設計語言” linenum=”off”>
代碼
</coolcode>
如果希望可以直接以文件下載代碼,可以使用 download 屬性來指定:
<coolcode lang=”程序設計語言” download=”文件名.擴展名”>
代碼
</coolcode>
這三個屬性可以組合使用,互不影響。
目前支持的程序設計語言有:
actionscriptcppcssdiffdtdhtmljavajavascriptmysqlperlphppythonrubysqlxml
夜已深,睡去也~
凌晨一點的黑夜 寂靜
貌似心底又涌出了那久違的感覺。來不及回味,倒下睡覺!
Struts1.2 學習筆記
Struts1.2
1.1 Struts內部機制
MVC模式
MVC(Model模型,View視圖,Controller控制器)
模型:
用於表示業務數據,調用業務邏輯,由系統狀態Bean ActionForm和商業邏輯的JavaBean來構建
視圖:
由JSP和Struts提供的自定義標籤來實現
控制器:
負責控制流程,由ActionServlet負責讀取struts-config.xml,並使用ActionMapping來查找對應的Action
1.2 添加Struts開發環境
1.2.1 使用MyEclipse添加
MyEclipse->add struts capabilities
Struts支持的包列表:
l antlr.jar
l commons-beanutils.jar
l commons-digester.jar
l commons-fileupload.jar
l commons-logging.jar
l commons-validator.jar
l jakarta-oro.jar
l struts.jar
1.2.2 Struts配置文件列表:
在\WebRoot\WEB-INF下添加了下列配置文件
l struts-config.xml
l struts-config.mex
l struts-html.tld
l struts-bean.tld
l struts-logic.tld
l struts-tiles.tld
l struts-nested.tld
1.2.3 手動添加
1、 添加Struts的jar支持包(8個)
…\WebRoot\WEB-INF\lib目錄下
2、 添加Struts的tld標籤文件(5個)
…\WebRoot\WEB-INF目錄下
3、 添加Struts的核心配置文件Struts-config.xml
…\WebRoot\WEB-INF目錄下
4、 在web.xml中添加Struts的ActionServlet配置
…\WebRoot\WEB-INF目錄下
1.2.4 配置Struts日誌組件
1、 添加日誌組件包
Log4j-1.2.12.jar、commons-logging.jar,複製這兩個文件到項目\WebRoot\WEB-INF\lib目錄下即可。
2、 添加日誌配置文件
commons-logging.properties(放入項目\WebRoot\WEB-INF目錄下)
log4j.properties (放入項目web-inf/class目錄下)
3、 修改commons-logging.properties調用log4j
在默認情況下commons-logging.properties中會配置使用SimpleLog,要配置使用Log4j,只需註釋掉SimpleLog行,添加log4j即可
##set Log as Log4J
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
## set Log as SimpleLog
#org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
4、 Log4j配置文件log4j.properties
## LOGGERS ##
#define a logger
log4j.rootLogger=INFO,console,file
## APPENDERS ##
# define an appender named console, which is set to be a ConsoleAppender
log4j.appender.console=org.apache.log4j.ConsoleAppender
# define an appender named file, which is set to be a RollingFileAppender
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=../logs/jdbc_bk.log
#set the log’s size
log4j.appender.file.MaxFileSize=1000KB
log4j.appender.file.MaxBackupIndex=20
## LAYOUTS ##
# assign a SimpleLayout to console appender
log4j.appender.console.layout=org.apache.log4j.SimpleLayout
# assign a PatternLayout to file appender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}] %m%n
注:
log4j.properties文件需要放到web-inf/class目錄下面,在eclipse裏面放到src目錄下面,會自動拷貝到class目錄下面去。否則在tomcat啓動的時候,會出現以下警告,且日誌不會輸出。
log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax).
log4j:WARN Please initialize the log4j system properly.
1.3 工作流程
1、 輸入表單頁面
如:
<form action=”test.do” method=”post”>
<input type=”text” name=”str1″>
<input type=”text” name=”str2″>
<input type=”submit”>
</form>
2、 ActionServlet接收用戶請求(Request)
在Web.xml中定義
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
… …
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
表示Struts能夠接收*.do的請求
3、 ActionMapping映射Action
通過struts-config.xml中的<action-mappings>來對應Action類
<action-mappings>
<action path=”/test” name=”testForm” scope=”request”
type=”com.demo.struts.forms.TestAction” input=”/input.jsp”>
<forward name=”success” path=”/success.jsp”></forward>
<forward name=”failure” path=”/error.jsp”></forward>
</action>
</action-mappings>
此處的test對應test.do
4、 ActionMapping映射ActionForm
通過struts-config.xml中的<form-beans>來對應ActionForm類
<form-beans>
<form-bean name=”testForm” type=”com.demo.struts.forms.TestForm”></form-bean>
</form-beans>
此處name=”testForm”,對應<action-mappings>中的name=”testForm”
5、 ActionForward轉發
Action處理完後返回ActionForward對象,對應<action-mappings>中轉發的URL
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
ActionErrors errors=new ActionErrors();
TestForm testForm = (TestForm) form;
ActionForward forward =new ActionForward();
try{
String str1=testForm.getStr1();
String str2=testForm.getStr2();
}catch(Exception e){}
if(!errors.isEmpty()){
forward=mapping.findForward(“failure”);
}else{
forward=mapping.findForward(“success”);
}
return forward;
}
此處的failure,success分別對應:<action-mappings>中的forward
1.4 Struts配置文件詳解
1.4.1 配置ActionForm:<form-beans>元素
1.4.2 配置映射關係:<action-mappings>
1.4.3 其他
1.4.4 分離Struts配置文件
1.5 ActionForm Bean開發技術
1.5.1 使用默認表單ActionForm
org.apache.struts.action.ActionForm
表示HTTP窗體中的數據,可以將其看做是模型和視圖的中介
1.5.2 使用動態表單DynaActionForm
org.apache.struts.action.DynaActionForm
1.5.3 使用自動校驗表單
org.apache.struts.validator.DynaValidatorForm
其中validator.xml和validator-rules.xml分別表示驗證定義和驗證規則的內容
1.6 Action組件開發技術
org.apache.struts.action.*
1.6.1 使用默認的Action
注:視圖級的驗證工作放在ActionForm來完成,比如輸入不能爲空、E-Mail格式是否正確等;而與具體業務相關的驗證則放入Action中,這樣就可以獲得最大ActionForm重用性的可能。在執行業務邏輯的JavaBean中不要引用任何與Web應用相關的對象,比如HttpServletRequest、HttpServletResponse等對象,而應該將其轉換爲普通的Java對象
1.6.2 可直接轉發的ForwardAction
1.6.3 可包含文件的IncludeAction
1.6.4 可自動分發的DispatchAction
通常,如果繼承默認的Action類,只能完成一種業務操作。如果要完成一組業務操作,例如對用戶進行update、insert、delete操作,則需要建立多個操作類,分別來接收響應。但DispatchAction來實現函數的分發。它的作用就是實現按業務實體劃分類。
1、<action>中添加一個parameter
<action path=”/test” parameter=”method” name=”testForm” scope=”request”
type=”com.demo.struts.forms.TestAction” input=”/input.jsp”>
…
</action>
在<form>請求地址中傳遞了參數”method=test”
<form action=”test.do?method=test” method=”post”>
…
</form>
在Action類中新建參數值對應的函數
public ActionForward test(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
…
return forward;
}
1.6.5 可進行多個提交的LookupDispatchAction
1.6.6 可實現交換的SwitchAction
1.7 使用Struts標籤進行頁面國際化
1.7.1 軟件國際化與本地化
I18N:Internationalization的縮寫,意即在i和n之間有18個字母,本意是指軟件的“國際化”。支持多種語言,但同一時間只能是英文和一種選定的語言,例如英文+中文。
L10N:Localization。本意是軟件的“本地化”。支持2種語言,英文和另外一種語言(例如中文)
M17N:Multilingualization。本意指軟件的“多語言庫”,用以實現各國語言間的代碼移植。可以在同一時間支持多種語言,例如你可以在一個頁面裏看到中文、英文、德文等。
1.7.2 軟件本地化的設置方法
1、 用戶在軟件操作界面中選擇需要顯示的語言來顯示該軟件。
2、 軟件根據操作系統的語言設置,自動顯示默認的操作語言。
爲IE添加英語和中文顯示的列表,工具->Internet選項->語言。
1.7.3 軟件編碼
1、 ASCII(單字節)
編碼字符集:ISO-8859-1
英文DOS
2、 ANSI編碼(雙字節)
GB2312、BIG5等,中文DOS、中文/日文Windows95/98
3、 Unicode編碼
UTF-8、UTF-16、UTF-32,WindowsNT/2K/XP、linux
1.7.4 Java對國際化的支持
1、 Locale類
Java.util.Locale類是最重要的Java I18N類
1) 通過構造函數創建Locale對象
如:
Locale chLocale=new Locale(“zh”,”CN”);//中國中文
第一個參數是語言代碼,語言代碼由兩個小寫字母組成,遵從ISO-639規範。
第二個參數是國家代碼,由兩大寫字母組成,遵從ISO-3166規範。
使用默認定義的Locale對象
Locale locale1=Locale.JAPAN;
Locale locale2=new Locale(“ja”,”JP”);
取得操作系統的默認Locale對象
Locale defaultLocale=Locale.getDefault();
在Web應用中訪問客戶端的Locale對象
調用HttpServletRequest對象的以下兩個方法來取得包含Web客戶的Locale信息
Public java.util.Locale getLocale();
Public java.util.Enumeration getLocales();
ResourceBundle類
Java.util.ResourceBundle類提供存放和管理與Locale相關的資源的功能。這些資源包括文本域、按鈕的Label、狀態信息、圖片名、錯誤信息和網頁標題等。
1.7.5 Struts對國際化的支持
1、 創建Struts的ResourceBundle資源文件
2、 訪問Resource Bundle資源文件
3、 在Struts應用中訪問Resource Budle的方法
4、 在Struts應用中訪問Resource Budle的組件。
1.7.6 Struts頁面國際化的過程
1、 定義Struts的資源文件
在strust-config.xml中通過<message-resources>定義
<message-resources parameter=”com.demo.struts.ApplicationResources” />
2、 創建Struts的資源文件
我們應該在包com.demo.struts.resources中創建UTF-8資源文件,這裏的資源文件會被編譯到/WEB-INF/classes/com.demo.struts.resources下。每一個資源文件是“鍵=值”對的集合。
資源文件的格式爲:默認資源文件名_國別_語言.properties。其中每個文件都是通過%JAVA_HOME%/bin/native2ascii.exe工具轉換而來。
如:
//ApplicationResources.properties;默認資源文件,通常裏面的內容是英文的
Label.name=USERNAME;
Lable.password=PASSWORD;
//ApplicationResources_zh_CN.bak;默認資源文件,通常裏面的內容是英文的
//它需要工具將其中的內容處理成UTF-8
Label.name=用戶名;
Lable.password=密 碼;
上面的中文資源文件中寫的是中文,還需要用如下的命令專爲UTF-8編碼的資源文件。
native2ascii -encoding utf-8 ApplicationResources_temp.properties ApplicationResources_zh_CN.properties
3、 定義JSP頁面的字符集合
<%@ page contentType=”text/html;charset=UTF-8″%>
4、 在JSP頁面獲取資源文件裏面的內容
<table width=”200″ border=”1″>
<tr>
<td align=”right”><bean:message key=”label.username”></td>
</tr>
<tr>
<td align=”right”><bean:message key=”label.password”></td>
</tr>
</table>
在這個頁面顯示的時候,如果客戶的IE的語言集合是zh_CN的話,就會顯示:
用戶名:
密 碼:
如果客戶的IE的語言是en的話,就會顯示:
USERNAME:
PASSWORD:
1.7.7 Struts HTML標籤
使用Struts HTML標籤需要通過以下配置
1、 在web.xml中註冊標籤庫
2、 確信將struts-html.tld文件複製到WEB-INF目錄中。
3、 在運用標籤庫的每個JSP頁面中,插入下面的<taglib>指示符
1.7.7.1 用於生成基本的HTML元素的標籤
1、 <html:html>標籤
用於生成HTML的<html>元素
2、 <html:base>
3、 <html:link>
4、 <html:rewrite>
1.7.7.2 用於生成HTML表單的標籤
1、 <html:form>
2、 數據輸入標籤
<html:text>
<html:password>
<html:hidden>
<html:textarea>
<html:radio>
<html:checkbox>
<html:select>
<html:option>
3、 提交按鈕標籤
<html:submit>
<html:cancel>
<html:reset>
<html:button>
<html:image>
1.7.7.3 用於顯示錯誤或正常消息的標籤
<html:errors>:用於顯示錯誤消息
<html:messages>:用於顯示正常消息
1.7.8 Struts Bean標籤
1.7.8.1 用於訪問HTTP請求信息或JSP隱含對象
1、 <bean:cookie>
2、 <bean:header>
3、 <bean:parameter>
4、 <bean:page>
1.7.8.2 用於訪問Web應用資源
1、 <bean:message>:用於顯示ResourceBundle 中的消息。
用來從指定的locale中取回國際化的消息並輸出。這個過程可以傳遞5個以內的參數。Message標籤有兩種指定message key的方式,一是通過key屬性直接指定;二是通過name和property屬性間接的指定,其中message key是在message resources文件中定義的。
如:
<bean:message key=”login.page.title”>
2、 <bean:resource>
3、 <bean:struts>
4、 <bean:include>
1.7.8.3 用於定義或輸出JavaBean的Bean標籤
1、 <bean:define>
2、 <bean:write>
3、 <bean:size>
1.7.9 Struts Logic標籤
1.7.9.1 進行比較運算的Logic標籤
<logic:equal>
<logic:notEqual>
<logic:greaterEqual>
<logic:greaterThen>
<logic:lessEqual>
<logic:lessThan>
1.7.9.2 進行字符串匹配的Logic標籤
<logic:match>
<logic:notMatch>
1.7.9.3 判斷指定內容是否存在的Logic標籤
<logic:empty>和<logic:notEmpty>
<logic:present>和<logic:notPresent>
<logic:messagesPresent>和<logic:messagesNotPresent>
1.7.9.4 進行循環遍歷的Logic標籤
<logic:iterate>
1.7.9.5 進行請求轉發或重定向的Logic標籤
<logic:forward>
<logic:redirect>
1.8 Struts數據驗證
1.8.1 使用Validator校驗器組件
ActionForm Bean提供了Validator的一個ActionForm子類,它提供驗證或存儲錯誤消息的功能
Validator使用兩個XML配置文件來分別確定安裝哪個驗證程序,以及如何將它們用於給定的應用程序
Validator-rules.xml:說明應該被插入到框架中的驗證程序,並提供每個驗證的邏輯名稱
Validation.xml:確定哪個驗證程序應用到哪個ActionForm Bean。
配置使用Validator
1、 在struts-config.xml中配置使用validator插件
<plug-in className=”ora.apache.struts.validator.ValidatorPlugIn”>
<set-property property=”pathnames” value=”/WEB-INF/validator-rules.xml,
/WEB-INF/validation.xml” />
</plug-in>
注:你的應用程序的struts-config.xml文件必須與Struts Configuration Document Type Definition(Struts配置文檔類型定義,DTD)一致,後者規定文件中元素出現的順序。所以必須把Validator插件定義放到該文件的適當位置,一般放到<message-resources>下
2、 Validator驗證程序配置文件validator-rules.xml
3、 使用Validator的兩個父類來創建自己的表單類
爲了使用Validator,你的應用程序的ActionFormBean必須歸到Validator的ActionForm的某一子類。Validator提供了兩個父類ValidatorForm和DynaValidatorForm
1) 使用普通的驗證表單類ValidatorForm
在struts-config.xml文件中配置這個特定的ActionForm Bean,與配置正常的方法相同
<form-bean name=”loginForm” type=”com.demo.struts.forms.LoginForm”></form-bean>
2) 使用動態表單類DynaValidatorForm
<form-bean name=”loginForm”
type=”org.apache.struts.validator.DynaValidatorForm”>
<form-property name=”username” type=”java.lang.String”/>
<form-property name=”password” type=”java.lang.String”/>
</form-bean>
4、 配置表單的驗證規則validation.xml
用於聲明將應用到ActionForm Bean的一組驗證。
5、 綁定驗證中的錯誤消息ApplicationResources.properties
使用Struts的資源綁定(Resource Bundle)機制將錯誤消息具體化。
1.8.2 在ActionForm中檢驗合法性
Validator框架針對表單數據的驗證提供了可配置的系統,從而爲核心Struts框架添加了很多有價值的功能。然而Validator的開發和配置過程,被設計了多個額外的配置文件,無疑讓開發更加複雜化。
我們可以在ActionFormBean對象的validate()方法中編寫驗證邏輯代碼。此外,還必須編寫代碼來存儲驗證失敗的出錯消息。
1.8.2.1 爲ActionForm添加表單驗證功能
1、 添加一個驗證函數validate(),該函數繼承其父類ActionForm
public ActionErrors validate(ActionMapping arg0, HttpServletRequest arg1) {
ActionErrors errors=new ActionErrors();
String queryString=arg1.getQueryString();
if(queryString.equalsIgnoreCase(“method=register”)){
if(username==null||username.equals(“”)){
errors.add(“username”, new ActionMessage(“register.error.username”));
}
if(password1==null||password1.equals(“”)){
errors.add(“password1″, new ActionMessage(“register.error.password1″));
}
…
}
arg1.setAttribute(“registerFormBean”, this);
return errors;
}
2、 ApplicationResources.properties中添加標籤
#loginForm
login.error.username=用戶名不能爲空
login.error.password=密碼不能爲空
3、 JSP頁面中輸出錯誤信息
<tr>
<td><bean:message key=”login.page.username” /></td>
<td><input type=”text” name=”username”> <html:errors property=”username”/>
</td>
</tr>
1.8.2.2 爲Action添加邏輯驗證功能
1、 Action的execute()中修改檢驗代碼
errors.add(ActionErrors.GLOBAL_MESSAGE,new ActionMessage(“login.message.failed”));
2、 ApplicationResources.properties中添加標籤
#loginForm
login.message.failed=用戶名或密碼不存在!
3、 JSP中輸出這個全局錯誤信息
<html:errors property=”org.apache.struts.action.GLOBAL_MESSAGE”/>
1.8.2.3 驗證出錯時維持表單輸入
1、 ActionForm的validate()後面添加如下代碼
request.setAttribute(“loginFormBean”, this);
2、 在Action的execute()後面添加
request.setAttribute(“loginFormBean”, loginForm);
3、 修改JSP表單
<tr>
<td><bean:message key=”login.page.username” /></td>
<td>
<logic:present name=”loginFormBean”>
<html:text property=”username” name=”loginFormBean” />
</logic:present>
<logic:notPresent name=”loginFormBean”>
<input type=”text” name=”username”>
</logic:notPresent>
<html:errors property=”username”/>
</td>
</tr>
使用<logic:present>標籤判斷Bean對象loginFormBean是否存在,如存在則使用<html:text>輸出屬性”username”的值;如不存在,則依然輸出空的HTML表單
本文來自CSDN博客:http://blog.csdn.net/rollice/archive/2009/04/25/4123494.aspx
JDBC連接oracle數據庫的十大技巧
Java數據庫連接(JDBC)API是一系列能夠讓Java編程人員訪問數據庫的接口,各個開發商的接口並不完全相同。在使用多年的Oracle公司的JDBC後,我積累了許多技巧,這些技巧能夠使我們更好地發揮系統的性能和實現更多的功能。
1、在客戶端軟件開發中使用Thin驅動程序
在開發Java軟件方面,Oracle的數據庫提供了四種類型的驅動程序,二種用於應用軟件、applets、servlets等客戶端軟件,另外二種用於數據庫中的Java存儲過程等服務器端軟件。在客戶機端軟件的開發中,我們可以選擇OCI驅動程序或Thin驅動程序。OCI驅動程序利用Java本地化接口(JNI),通過Oracle客戶端軟件與數據庫進行通訊。Thin驅動程序是純Java驅動程序,它直接與數據庫進行通訊。爲了獲得最高的性能,Oracle建議在客戶端軟件的開發中使用OCI驅動程序,這似乎是正確的。但我建議使用Thin驅動程序,因爲通過多次測試發現,在通常情況下,Thin驅動程序的性能都超過了OCI驅動程序。
2、關閉自動提交功能,提高系統性能
在第一次建立與數據庫的連接時,在缺省情況下,連接是在自動提交模式下的。爲了獲得更好的性能,可以通過調用帶布爾值false參數的Connection類的setAutoCommit()方法關閉自動提交功能,如下所示:
conn.setAutoCommit(false);
值得注意的是,一旦關閉了自動提交功能,我們就需要通過調用Connection類的commit()和rollback()方法來人工的方式對事務進行管理。
3、在動態SQL或有時間限制的命令中使用Statement對象
在執行SQL命令時,我們有二種選擇:可以使用PreparedStatement對象,也可以使用Statement對象。無論多少次地使用同一個SQL命令,PreparedStatement都只對它解析和編譯一次。當使用Statement對象時,每次執行一個SQL命令時,都會對它進行解析和編譯。這可能會使你認爲,使用PreparedStatement對象比使用Statement對象的速度更快。然而,我進行的測試表明,在客戶端軟件中,情況並非如此。因此,在有時間限制的SQL操作中,除非成批地處理SQL命令,我們應當考慮使用Statement對象。
此外,使用Statement對象也使得編寫動態SQL命令更加簡單,因爲我們可以將字符串連接在一起,建立一個有效的SQL命令。因此,我認爲,Statement對象可以使動態SQL命令的創建和執行變得更加簡單。
4、利用helper函數對動態SQL命令進行格式化
在創建使用Statement對象執行的動態SQL命令時,我們需要處理一些格式化方面的問題。例如,如果我們想創建一個將名字O’Reilly插入表中的SQL命令,則必須使用二個相連的“””號替換O’Reilly中的“’”號。完成這些工作的最好的方法是創建一個完成替換操作的helper方法,然後在連接字符串心服用公式表達一個SQL命令時,使用創建的helper方法。與此類似的是,我們可以讓helper方法接受一個Date型的值,然後讓它輸出基於Oracle的to_date()函數的字符串表達式。
5、利用PreparedStatement對象提高數據庫的總體效率
在使用PreparedStatement對象執行SQL命令時,命令被數據庫進行解析和編譯,然後被放到命令緩衝區。然後,每當執行同一個PreparedStatement對象時,它就會被再解析一次,但不會被再次編譯。在緩衝區中可以發現預編譯的命令,並且可以重新使用。在有大量用戶的企業級應用軟件中,經常會重複執行相同的SQL命令,使用PreparedStatement對象帶來的編譯次數的減少能夠提高數據庫的總體性能。如果不是在客戶端創建、預備、執行PreparedStatement任務需要的時間長於Statement任務,我會建議在除動態SQL命令之外的所有情況下使用PreparedStatement對象。
6、在成批處理重複的插入或更新操作中使用PreparedStatement對象
如果成批地處理插入和更新操作,就能夠顯著地減少它們所需要的時間。Oracle提供的Statement和 CallableStatement並不真正地支持批處理,只有PreparedStatement對象才真正地支持批處理。我們可以使用addBatch()和executeBatch()方法選擇標準的JDBC批處理,或者通過利用PreparedStatement對象的setExecuteBatch()方法和標準的executeUpdate()方法選擇速度更快的Oracle專有的方法。要使用Oracle專有的批處理機制,可以以如下所示的方式調用setExecuteBatch():
PreparedStatement pstmt3D null;
try {
((OraclePreparedStatement)
pstmt).setExecuteBatch(30);
…
pstmt.executeUpdate();
}
調用setExecuteBatch()時指定的值是一個上限,當達到該值時,就會自動地引發SQL命令執行,標準的executeUpdate()方法就會被作爲批處理送到數據庫中。我們可以通過調用PreparedStatement類的sendBatch()方法隨時傳輸批處理任務。
7、使用Oracle locator方法插入、更新大對象(LOB)
Oracle的PreparedStatement類不完全支持BLOB和CLOB等大對象的處理,尤其是Thin驅動程序不支持利用PreparedStatement對象的setObject()和setBinaryStream()方法設置BLOB的值,也不支持利用setCharacterStream()方法設置CLOB的值。只有locator本身中的方法才能夠從數據庫中獲取LOB類型的值。可以使用PreparedStatement對象插入或更新LOB,但需要使用locator才能獲取LOB的值。由於存在這二個問題,因此,我建議使用locator的方法來插入、更新或獲取LOB的值。
8、使用SQL92語法調用存儲過程
在調用存儲過程時,我們可以使用SQL92或Oracle PL/SQL,由於使用Oracle PL/SQL並沒有什麼實際的好處,而且會給以後維護你的應用程序的開發人員帶來麻煩,因此,我建議在調用存儲過程時使用SQL92。
9、使用Object SQL將對象模式轉移到數據庫中
既然可以將Oracle的數據庫作爲一種面向對象的數據庫來使用,就可以考慮將應用程序中的面向對象模式轉到數據庫中。目前的方法是創建Java bean作爲僞裝的數據庫對象,將它們的屬性映射到關係表中,然後在這些bean中添加方法。儘管這樣作在Java中沒有什麼問題,但由於操作都是在數據庫之外進行的,因此其他訪問數據庫的應用軟件無法利用對象模式。如果利用Oracle的面嚮對象的技術,可以通過創建一個新的數據庫對象類型在數據庫中模仿其數據和操作,然後使用JPublisher等工具生成自己的Java bean類。如果使用這種方式,不但Java應用程序可以使用應用軟件的對象模式,其他需要共享你的應用中的數據和操作的應用軟件也可以使用應用軟件中的對象模式。
10、利用SQL完成數據庫內的操作
我要向大家介紹的最重要的經驗是充分利用SQL的面向集合的方法來解決數據庫處理需求,而不是使用Java等過程化的編程語言。
如果編程人員要在一個表中查找許多行,結果中的每個行都會查找其他表中的數據,最後,編程人員創建了獨立的UPDATE命令來成批地更新第一個表中的數據。與此類似的任務可以通過在set子句中使用多列子查詢而在一個UPDATE命令中完成。當能夠在單一的SQL命令中完成任務,何必要讓數據在網上流來流去的?我建議用戶認真學習如何最大限度地發揮SQL的功能。