2006年9月1日 #
特殊字符:
Jörg Ranau
Sigut? Jakštonyt?
Côte d'Ivoire
數據庫手工導入數據
1: 先檢查數據庫的字符集和客戶端字符集是否一致。 采用的是UTF8
查看語句:
select * from nls_database_parameters
2: 若是采用DOS 下的SQLPLUS 導入數據,需要set NLS_LANG=AMERICAN_AMERICA.UTF8
windows: set NLS_LANG=AMERICAN_AMERICA.UTF8
unix: NLS_LANG=AMERICAN_AMERICA.UTF8
3: 檢查導入的數據的文件格式,格式采用: UTF8 without BOM,
可以用NOTEPAD++, CONVER TO UTF8 without BOM
也可以用txt , 轉換成UTF8.
驗證你導入的數據是否正確可以用ORACLE DUMP 命令。
select dump(country_desc),country_desc from tb_test where testcode='1';
Typ=1 Len=14: 67,195,180,116,101,32,100,39,73,118,111,105,114,101 Côte d'Ivoire
數據庫腳本中遇到特殊字符:
1: 單引號‘ , oracle 腳本需要寫成 兩個單引號
UPDATE pi_portal_nday SET ND_CTY='Côte d'‘Ivoire' WHERE ND_ID IN (152,162);
2: 特殊字符&, oracle 表示需要的參數, 若是數據中有這個有2個方法:
第1 種: set define off;
第2種:
set escape on;
然后將所有的&, 替換成/&。
3: 空行
用<br> 代替。
JAVA 代碼導入數據:
要導入的數據都放在TXT 類型的文件里,通過batch job 導入數據庫。
檢查導入的數據的文件格式,格式采用: UTF8 without BOM,
可以用NOTEPAD++, CONVER TO UTF8 without BOM
java 代碼:
1: 讀文件的時候采用 UTF8格式。
InputStreamReader read = new InputStreamReader (new FileInputStream(file),"UTF-8");
BufferedReader inBuf=new BufferedReader(read);
2: 檢查所用開發工具的文件ENCODING 字符。
這個就是會為什么導致沒發現: 讀文件錯誤,在開發工具中打出的LOG 欺騙了我們的眼睛。
JAVA 代碼中直接賦值的或是頁面錄入的。
1: 頁面的就很簡單了,JSP 或是HTML ,里面加入字符是UTF8的就OK
2: 代碼里面的,需要轉換:
byte[] byteArr1 = columnValueBe.getBytes("UTF-8");
columnValue = new String(byteArr1, "UTF-8");
這些命令都是從開始——運行處進行的(windows鍵+R)
'cmd' 這個命令是調用類似dos的命令窗口的命令,在這里你可以像操作DOS一樣操作Windows.
'inetmgr' 這個命令相信做過網站的都知道,對了這就是調用IIS的快捷命令。
'mstsc' 這個是用來啟動遠程桌面連接的快捷命令,相信搞過網絡的人對此不會陌生。
'regedit' 這個命令大家都很熟悉,是用來調用注冊表的。
'appwiz.cpl' 進入添加和刪除程序的快捷命令
'control userpasswords2' 進入用戶賬戶設置界面的命令
'cleanmgr' 磁盤垃圾清理快捷命令
'command.com' 調用的則是系統內置的 NTVDM,一個 DOS虛擬機。它完全是一個類似 Virtual PC 的 虛擬環
境,和系統本身聯系不大。當我們在命令提示符下運行 DOS 程序時,實際上也 是自動轉移到 NTVDM虛擬機下,和 CMD
本身沒什么關系。
'calc' 啟動計算器
'chkdsk.exe' 磁盤檢查
'compmgmt.msc' 計算機管理
'devmgmt.msc' 設備管理器
diskmgmt.msc 磁盤管理實用程序
'dfrg.msc ' 磁盤碎片整理程序
'drwtsn32' 系統醫生
'dvdplay' Windows Media Player
'explorer' 資源管理器
'dxdiag' DirectX Diagnostic Tool
'gpedit.msc' 組策略編輯器
'gpupdate /target:computer /force' 強制刷新組策略
'eventvwr.exe' 事件查看器
'logoff' 注銷命令
'lusrmgr.msc' 本地用戶和組
'msinfo32' 系統信息
'msconfig' 系統配置實用程序
'net start (servicename)' 啟動該服務
'net stop (servicename)'停止該服務
'notepad' 記事本
'nusrmgr.cpl' 同control userpasswords,打開用戶帳戶控制面板
'Nslookup' IP地址偵測器
'oobe/msoobe /a' 檢查XP是否激活
'perfmon' 計算機性能監視器
'regedit' 系統注冊表
'regedt32' 注冊表編輯器
'regsvr32 /u *.dll' 停止dll文件運行
'route print' 查看路由表
'rononce -p' 15秒快速關機
'rsop.msc' 組策略結果集
'rundll32.exe rundll32.exe %Systemroot%\System32\shimgvw.dll,ImageView_Fullscreen' 啟動一個空白的Windows 圖
片和傳真查看器
' secpol.msc' 本地安全策略
'services.msc' 本地服務設置
'sfc /scannow' 啟動系統文件檢查器
'sndrec32' 錄音機
'taskmgr' 任務管理器
'tsshutdn' 60秒倒記時關機命令
'winchat' winxp自帶局域網聊天
'winmsd' 系統信息
'winver' 顯示About Windows 窗口
'wupdmgr' update
'firewall.cpl' 防火墻
'magnify' 放大鏡
'sysdm.cpl' 系統屬性
'sysdm.cpl' windows系統安全工具
'write' 寫字板
'tourstart' Windows XP 漫游
'utilman' 輔助工具管理器
'spider' 蜘蛛牌游戲
'sysedit' 系統配置編輯器
系統文件檢查工具(立即掃描) sfc /scannow
系統文件檢查工具(下次啟動時掃描) sfc /scanonce
系統文件檢查工具(每次啟動時掃描) sfc /scanboot
系統文件檢查工具(返回默認設置) sfc /revert
系統文件檢查工具(清除文件緩存) sfc /purgecache
系統文件檢查工具(設置緩存大小=x) sfc /cachesize=x
'cliconfg' SQL Client客戶端網絡實用工具
'mmsys.cpl' 聲音和音頻設備屬性
'shutdown' 關閉windows
'fsmgmt.msc' 共享文件夾
'wscui.cpl' Windows安全中心
'control schedtasks' 任務計劃
'sticpl.cpl' 掃描儀與相機
'ntmsmgr.msc' 可移動存儲
'intl.cpl' 區域的語言選擇
'eudcedit' TrueType造字程序
'control printers' 打印機和傳真
'powercfg.cpl' 電源選項屬性
'telephon.cpl' 電話與調制解調器選項
'osk' 屏幕鍵盤
'odbccp32.cpl' ODBC數據源管理器
'packager' 對象包裝程序
'ncpa.cpl' /'control netconnections' 網絡連接
'netsetup.cpl' 網絡連接向導
'main.cpl' /'control mouse' 鼠標屬性
'winmine' 掃雷游戲
'secpol.msc' 本地安全設置
'control keyboard' 鍵盤屬性
IP配置實用程序(顯示連接配置) ipconfig /all
IP配置實用程序(顯示DNS緩存內容) ipconfig /displaydns
IP配置實用程序(刪除DNS緩存內容) ipconfig /flushdns
IP配置實用程序(釋放全部(或指定)適配器的由DHCP分配的動態IP地址) ipconfig /release
IP配置實用程序(為全部適配器重新分配IP地址) ipconfig /renew
IP配置實用程序(刷新DHCP并重新注冊DNS) ipconfig /registerdns
IP配置實用程序(顯示DHCP Class ID) ipconfig /showclassid
IP配置實用程序(修改DHCP Class ID) ipconfig /setclassid
'inetcpl.cpl' internet屬性
'ciadv.msc' 索引服務
'winver' 檢查windows版本號
'mplayer2' 簡易widnows media player
'mspaint' 畫圖板
'mem.exe' 顯示內存使用狀況
'compmgmt.msc' 計算機管理
'wmimgmt.msc' 打開windows管理體系結構(WMI)
'ntbackup' 系統備份與還原
'narrator' 屏幕“講述人”
'netstat -an' (TC)命令檢查接口
'syncapp' 創建一個公文包
'sigverif' 文件簽名驗證程序
'certmgr.msc' 證書管理實用程序
'iexpress' 木馬捆綁工具,系統自帶
'access.cpl' 輔助功能選項
'fsquirt' Bluetooth文件傳送向導
'dcomcnfg' 組件服務
'timedate.cpl' 日期時間屬性
'ddeshare' DDE共享
'control desktop' 顯示屬性
'desk.cpl' 顯示屬性
'control.cpl' 顯示屬性的外觀選項卡
'sigverif' 文件簽名驗證
快速查找 findfast.cpl
文件夾選項 control folders
字體文件夾 control fonts
字體文件夾 fonts
'freecell' 空檔接龍游戲
'joy.cpl' 游戲控制
本來就超級忙,被迫重裝了系統,重新建了庫,一切都OK的時候,發現用TOAD連接ORACLE 數據庫,里面的中文字都顯示“靠”, 第一個反映,遭了,數據庫文字設置不對,要是數據庫重裝,那又要浪費2天!!
幸好,用其他機器的TOAD,中文字顯示正確; 明白了是自己新裝的操作系統的原因。 網上查到解決辦法, 解決了,心又落回來了!!
在環境變量中設置系統環境變量:
NLS_lANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK
一.Enterprise Beans
在EJB(Enterprise Java Beans)中定義了兩種不同類別的Enterprise Bean :
*會話 Bean (Session Bean)
*實體Bean (Entity Bean)
1. 會話 Bean (Session Bean)
會話 Bean 是調用它的客戶端代碼要完成的工作。當客戶端與服務器建立聯系,那么一個會話 Bean 就建立起來了。根據會話 Bean 的狀態不同有分為:
A. 狀態會話 Bean (Stateful Session Bean)
B. 無狀態會話 Bean (Stateless Session Bean)
1.1 狀態會話 Bean (Stateful Session Bean)
當客戶機和服務器建立連接之后,狀態會話 Bean (Stateful Session Bean) 將一直在客戶機和服務器之間保持著用戶的某個狀態。例如:用戶使用銀行的ATM時,經過驗證之后,用戶可以連續執行多次操作,在這個過程當中,用戶的合法狀態將一直被保留,直到她將信用卡取出,結束這次操作。這時,狀態會話 Bean (Stateful Session Bean) 也就被銷毀。
1.2無狀態會話 Bean (Stateless Session Bean)
當客戶機和服務器建立連接之后,無狀態會話 Bean (Stateless Session Bean)處理單一的用戶請求或商務過程。無狀態會話 Bean (Stateless Session Bean)不需要從以前的請求中提取任何狀態。例如,用戶的用戶密碼確認。用戶輸入密碼后,發送請求。組件返回真或假來確認用戶,一旦過程完成,無狀態會話 Bean (Stateless Session Bean) 也宣告結束。
2. 實體Bean (Entity Bean)
實體Bean (Entity Bean)只是數據模型,它不包括商務邏輯。實體Bean (Entity Bean)可以將關系/對象數據庫的數據映射到內存中供其它組件使用。實體Bean (Entity Bean)是一直存在的,而且具有很高的容錯性能。實體Bean (Entity Bean)能供允許多用戶同時訪問。
二. 會話 Bean (Session Bean)
Ejb的執行過程是被放在一個EJB容器中進行的,所以客戶端不會直接調用我們寫好的Enterprise Bean ,而是調用EJB容器生成的一個EJBObject (EJB對象)來實現。那么,我們在編寫服務器端的Enterprise Bean 時,就要考慮這點。既然客戶端不能直接訪問,就由EJBObject來代勞,所以在編寫服務器端時,就要編寫服務器端的一個接口(Remote)用來與客戶機聯系,實力化EJBObject。要生成EJBObject 就要調有Home 接口,來建立這個實力。
以下是會話 Bean 的代碼分析:
A.Enterprise Bean 類:sailorsy.class
1.setSessionContext(SessionContext ctx)方法
它是EJB容器和Enterprise Bean互相作用的關口。
import java.rmi.*;
import javax.ejb.*;
public class sailorsy implements SessionBean{
private SessionContext ctx=null;
public voic setSessionContext(SessionContext ctx)//setSessionContext
}//class sailorsy
2.ejbCreate(…)方法
它可以初始化Enterprise Bean ,可以定義不同的ejbCreate(…)方法,每個方法所帶的參數不同。但是,必許要存在至少一種。
import java.rmi.*;
import javax.ejb.*;
public class sailorsy implements SessionBean{
private SessionContext ctx=null;
public voic setSessionContext(SessionContext ctx)//setSessionContext
public void ejbCreate() //ejbCreate
}//class sailorsy
3.ejbPassivate()方法
如果初始化的Enterprise Bean 過多,EJB容器將其中的一些掛起(passivate),釋放他們所占用的空間。
import java.rmi.*;
import javax.ejb.*;
public class sailorsy implements SessionBean{
private SessionContext ctx=null;
public voic setSessionContext(SessionContext ctx)//setSessionContext
public void ejbCreate() //ejbCreate
public void ejbPassivate() //ejbPassivate
}//class sailorsy
4.ejbActivate()方法
和ejbPassivate正好相反,它將被掛起的Bean從新調回。
import java.rmi.*;
import javax.ejb.*;
public class sailorsy implements SessionBean{
private SessionContext ctx=null;
public voic setSessionContext(SessionContext ctx)//setSessionContext
public void ejbCreate() //ejbCreate
public void ejbPassivate() //ejbPassivate
public void ejbActivate() //ejbActivate
}//class sailorsy
5.ejbRemove()方法
它可以清除EJB容器中的Bean。
import java.rmi.*;
import javax.ejb.*;
public class sailorsy implements SessionBean{
private SessionContext ctx=null;
public voic setSessionContext(SessionContext ctx)//setSessionContext
public void ejbCreate() //ejbCreate
public void ejbPassivate() //ejbPassivate
public void ejbActivate() //ejbActivate
public void ejbRemove() //ejbRemove
public String showname(){
return "Hello,my name is sailorsy";
}//自己的商務方法
}//class sailorsy
以上這些是EJB必需的回調方法,我們可以在里面加入自己的方法,加入自己的商務邏輯。
B.Home 接口: sailorsyHome
import java.rmi.*;
import javax.ejb.*;
public interface sailorsyHome extends EJBHome {
public sailorsyRemote create() throws RemoteException, CreateException;
}
C. Remote接口:sailorsyRemote
import java.rmi.*;
import javax.ejb.*;
public interface sailorsyRemote extends EJBObject {
public java.lang.String showname() throws RemoteException;
}
三.調用會話 Bean:sailorsyTestClient1
[code] import javax.naming.*;
import javax.ejb.*;
import javax.rmi.PortableRemoteObject;
import java.rmi.*;
public class sailorsyTestClient1 {
private sailorsyHome sailorsyHomeObject = null;
//Construct the EJB test client
public sailorsyTestClient1() {
try {
//以下是客戶端使用JNDI定位Home對象。
Context ctx = new InitialContext();
//look up jndi name
Object ref = ctx.lookup("sailorsy");
//cast to Home interface
sailorsyHomeObject = (sailorsyHome) PortableRemoteObject.narrow(ref, sailorsyHome.class);
}
catch(Exception e)
}
//----------------------------------------------------------------------------
// Utility Methods
//----------------------------------------------------------------------------
public sailorsyHome getHome() {
return sailorsyHomeObject;
}
//Main method
public static void main(String[] args) throws Exception{
sailorsyTestClient1 client = new sailorsyTestClient1();
sailorsyRemote sr=client.getHome() .create()
String s=sr.showname()
System.out.print(s);
// Use the getHome() method of the client object to call Home interface
// methods that will return a Remote interface reference. Then
// use that Remote interface reference to access the EJB.
}
}[/code]
以上的EJB在win2000+jbuilder5/jbuilder6+BAS4.5經過測試。
以下是整個EJB的執行過程:
1. 客戶端通過JNDI檢索Home對象的引用;
2. JNDI返回Home對象的引用;
3. 請求創建一個新的EJB對象;
4. 創建EJB對象;
5. 返回EJB對象;
6. 調用商務方法;
7. 調用Enterprise Bean.
實現java1.4中的split()函數功能的代碼- -
??????????????????????????????????????
split()函數是分隔字符串的函數,在JDK1.4以后才有的.
在以前的版本里要用這個函數時,需要自己去寫.
lotus r6中的JDK是1.3的,寫JAVA代理時也需要自己寫這個函數
{
??? {
????? Vector v = new Vector();
????? test t = new test();
????? v = t.splitString("b","aaabccccbddddbeeeeee");
????? System.out.println(v.size());
????? for (int i = 0;i<v.size();i++)
????? {
????? ?System.out.println(v.get(i));
????? ?}
??? ?}
??? ?
??? ?
?? public Vector splitString(String sign, String sourceString)
?? {
??????? Vector splitArrays = new Vector();
??????? int i = 0;
??????? int j = 0;
??????? if (sourceString.length()==0) {return splitArrays;}
??????? while (i <= sourceString.length()) {
?????????????? j = sourceString.indexOf(sign, i);
?????????????? if (j < 0) {j = sourceString.length();}
?????????????? splitArrays.addElement(sourceString.substring(i, j));
?????????????? i = j + 1;
??????? }
??????? return splitArrays;
? }
?
}
???? <td class='ssCell' width="6.8%" align="center">
???? ?<%
???String mrnString = "";
???com.phs.ihis.pm.PatientBarInfoModel pbInfoModel = (com.phs.ihis.pm.PatientBarInfoModel)oe;?
???if (pbInfoModel.getMrnString() != null && !"".equals(pbInfoModel.getMrnString())){
????mrnString = pbInfoModel.getMrnString()+"*";?
???}else{
????if (pbInfoModel.getPatientNo() != null && !"".equals(pbInfoModel.getPatientNo())){
?????mrnString = pbInfoModel.getPatientNo();
????}
???}?
??? ?%>
??? ?<a href="javascript: clickPick(
??? ???'<%=pbInfoModel.getKey()%>')">
??? ???<%=mrnString%>
??? ?</a>
??? </td>
這段是放在bodyonload ();剛才做的action :
document.OTNotesForm.action = contextPath + "/ot/SearchCareproviderOTNotesAction.do?setter="+setter+"&"+type+"="+ParamEncode(value)+"&CareProviderType="+ParamEncode(careproviderType);
在JSP上的JAVA巧調用javascript 方法
用的: out.println("javascript 方法(參數1,參數2);");
??
<%
??if(request.getAttribute("PopupCareProviderSearch") != null){
???String setter = request.getParameter("setter");
???String careProviderCode = request.getParameter("CareProviderCode");
???String careProviderName = request.getParameter("CareProviderName");
???String careProviderType = request.getParameter("CareProviderType");
???careProviderCode = careProviderCode == null? "": careProviderCode;
???careProviderName = careProviderName == null? "": careProviderName;
???out.println("popupCareProvider('"+setter+"','"+careProviderCode+"','"+careProviderName+"','"+careProviderType+"',true);");
??}
??if(request.getAttribute("RefreshPatientBar") != null){
???out.println("top.refreshPatientBar();");
??}??
??if(request.getAttribute("PopupOrderItemSearch") != null){
???String setter = request.getParameter("setter");
???String itemCode = request.getParameter("searchCode");
???String itemName = request.getParameter("searchDesc");
???itemCode = itemCode == null? "": itemCode;
???itemName = itemName == null? "": itemName;
???out.println("popupOrderItemSearch('"+setter+"','"+itemCode+"','"+itemName+"',true);");
??}
??String y = request.getParameter("y");
??if(y != null){
???out.println("document.body.scrollTop="+y+";");
??}??
?%>
byte[] userId = (byte[])session.getUserMstrPK().getPrimaryKey();
window.CommonPatPersonSearchFrame.document.CommonPatPersonSearchForm.txtSearchCode.focus();
??// obtain the dropdownlist control
??var ct1 = null;
??if (setter == "OperateDoctor1"){
???ctl = document.OTRequestForm.ddOperateDoctor1Subspecialty;
??}
??if (setter == "OperateDoctor2"){
???ctl = document.OTRequestForm.ddOperateDoctor2Subspecialty;
??}
??if (setter == "RequestDoctor"){
???ctl = document.OTRequestForm.ddRequestDoctorSubspecialty;
??}
??if (ctl != null){
???clearDropdown(ctl);
??}
??// get the text and value
??var subSpecInfo =? dropdownValue.split("&&");
??for (i=0; i<subSpecInfo.length; i++){
???// create a new option
???var newOpt = document.createElement("option");
???var subSpec = subSpecInfo[i].split("|");
???newOpt.text = subSpec[1];
???newOpt.value = subSpec[0];
???ctl.add(newOpt);
??}
???
}
得到CVS里所有文件清單
用WINCVS 不能得到所有CVS里的文件清單,以EXCEL形式。
現介紹用這個方法:
1: check out? 最新CVS所有文件。
2: 用批處理刪除其中的CVS目錄和一些無用的class 文件和其他一些文件。
3: 用ultraEdit 軟件, 多文件查找,只填寫目錄和選中搜索子目錄,和保存到新文件。
此批處理文件用來參數CVS目錄和一些有標志的文件或目錄
@echo On
@Rem 刪除CVS版本控制目錄
@REM 刪除所有有規律的目錄
@for /r . %%a in (.) do @if exist "%%a\CVS" rd /s /q "%%a\CVS"
@REM 刪除所有有規律的文件
@for /r . %%a in (.) do @if exist "%%a\EJS*.*" del /f /s /q "%%a\EJS*.*"
@for /r . %%a in (.) do @if exist "%%a\_*.*" del /f /s /q "%%a\_*.*"
@Rem for /r . %%a in (.) do @if exist "%%a\CVS" @echo "%%a\CVS"
@echo Mission Completed.
@pause