yanmin

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  16 随笔 :: 1 文章 :: 9 评论 :: 0 Trackbacks

2006年3月20日 #

     摘要:   阅读全文
posted @ 2012-07-12 16:48 yanmin 阅读(842) | 评论 (0)编辑 收藏

最近做一个项目,里面很多特殊字符,引发了一些问题,解决后很开心,特别来分享。
特殊字符:
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.

第3点非常重要,之前忽略了,发现插入导入数据库后,数据显示不对。

验证你导入的数据是否正确可以用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 欺骗了我们的眼睛。

我的开发工具BEA JAVA 文件默认ENCODING cp1252, 改成UTF8 就好了。这个特别容易忽略,当在控制台看LOG的时候,发现读过来的文件里的内容打出来都正确,就忽略了JAVA的源文件。认为是从unicode转换 utf8 有问题,特别将字符又做了处理,发现插入数据库还是不正确。 修改了ENCODING 字符字符后发现读入文件就不对了。这样轻松就解决了。 所以只要修改了读文件的时候采用 UTF8格式就可以啦。


JAVA 代码中直接赋值的或是页面录入的。
1: 页面的就很简单了,JSP 或是HTML ,里面加入字符是UTF8的就OK
2: 代码里面的,需要转换:
byte[] byteArr1 = columnValueBe.getBytes("UTF-8");
columnValue = new String(byteArr1, "UTF-8");













posted @ 2011-05-20 18:29 yanmin 阅读(1968) | 评论 (1)编辑 收藏

     用了这么多年计算机, 发现很多计算机的快捷命令都不知道, 汗啊,  从网上搜寻下一些,COPY 在这是没用的,打下来用的时候就看:

这些命令都是从开始——运行处进行的(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'              游戏控制 

posted @ 2008-01-03 10:00 yanmin 阅读(229) | 评论 (1)编辑 收藏

     toad 中的中文显示“靠”

本来就超级忙,被迫重装了系统,重新建了库,一切都OK的时候,发现用TOAD连接ORACLE 数据库,里面的中文字都显示“靠”, 第一个反映,遭了,数据库文字设置不对,要是数据库重装,那又要浪费2天!!

幸好,用其他机器的TOAD,中文字显示正确; 明白了是自己新装的操作系统的原因。 网上查到解决办法, 解决了,心又落回来了!!

    在环境变量中设置系统环境变量:

   NLS_lANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK

posted @ 2007-10-29 11:45 yanmin 阅读(716) | 评论 (1)编辑 收藏

最近狂多的面试,发现自己的基础知识和理论都弱了很多,为了不误人子弟,开始恶补:

一.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.
posted @ 2007-10-19 15:57 yanmin| 编辑 收藏

实现java1.4中的split()函数功能的代码- -

                                      

split()函数是分隔字符串的函数,在JDK1.4以后才有的.

在以前的版本里要用这个函数时,需要自己去写.

lotus r6中的JDK是1.3的,写JAVA代理时也需要自己写这个函数


import java.util.*;
public class test
{
  public static void main(String args[])
    {
      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;
  }
 
}
posted @ 2006-09-23 17:15 yanmin| 编辑 收藏

<bean:define id="oe" name="<%=org.apache.struts.taglib.html.Constants.BEAN_KEY%>"/>
     <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>
posted @ 2006-09-15 10:08 yanmin| 编辑 收藏

 myCheckBoxArray.value !=undefined
posted @ 2006-09-06 19:56 yanmin 阅读(393) | 评论 (0)编辑 收藏


这段是放在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+";");
  }  
 %>
posted @ 2006-09-06 19:45 yanmin 阅读(1889) | 评论 (1)编辑 收藏

get :  userId
byte[] userId = (byte[])session.getUserMstrPK().getPrimaryKey();
posted @ 2006-09-01 17:15 yanmin 阅读(165) | 评论 (0)编辑 收藏

// 焦点
window.CommonPatPersonSearchFrame.document.CommonPatPersonSearchForm.txtSearchCode.focus();
posted @ 2006-09-01 17:14 yanmin 阅读(449) | 评论 (1)编辑 收藏

function AddItem(setter,dropdownValue){
  // 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);
  }
   
}
posted @ 2006-09-01 17:11 yanmin 阅读(514) | 评论 (0)编辑 收藏

得到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

posted @ 2006-09-01 17:09 yanmin 阅读(336) | 评论 (0)编辑 收藏

进入首页立刻会弹出一个窗口,或者按一个连接或按钮弹出,通常在这个窗口里会显示一些注意事项、版权信息 、警告、欢迎光顾之类的话或者作者想要特别提示的信息。只要往该页面的HTML里加入几段Javascript代码即可实现.

      window.open ('page.html', 'newwindow', 'height=100, width=400, top=0,
      left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=n o,
      status=no') //这句要写成一行


参数解释:
  
  <SCRIPT LANGUAGE="javascript"> js脚本开始;
  window.open 弹出新窗口的命令;
  'page.html' 弹出窗口的文件名;
  'newwindow' 弹出窗口的名字(不是文件名),非必须,可用空''代替;
  height=100 窗口高度;
  width=400 窗口宽度;
  top=0 窗口距离屏幕上方的象素值;
  left=0 窗口距离屏幕左侧的象素值;
  toolbar=no 是否显示工具栏,yes为显示;
  menubar,scrollbars 表示菜单栏和滚动栏。
  resizable=no 是否允许改变窗口大小,yes为允许;
  location=no 是否显示地址栏,yes为允许;
  status=no 是否显示状态栏内的信息(通常是文件已经打开),yes为允许;
  </SCRIPT> js脚本结束


【1、最基本的弹出窗口代码】
        
        <SCRIPT LANGUAGE="javascript">
        <!--
        window.open ('page.html')
        -->
        </SCRIPT>
        
        因为着是一段javascripts代码,所以它们应该放在<SCRIPT
      LANGUAGE="javascript">标签和</script>之间。<!-- 和
      -->是对一些版本低的浏览器起作用,在这些老浏览器中不会将标签中的代码作为文本显示出来。要养成这个好习惯啊。window.open
      ('page.html')
      用于控制弹出新的窗口page.html,如果page.html不与主窗口在同一路径下,前面应写明路径,绝对路径(http://)和相对路径(../)均可。用单引号和双引号都可以,只是不要混用。这一段代码可以加入HTML的任意位置,<head>和</head>之间可以,<body>间</body>也可以,越前越早执行,尤其是页面代码长,又想使页面早点弹出就尽量往前放。
       
        【2、经过设置后的弹出窗口】
        
        下面再说一说弹出窗口的设置。只要再往上面的代码中加一点东西就可以了。
我们来定制这个弹出的窗口的外观,尺寸大小,弹出的位置以适应该页面的具体情况。
        
        <SCRIPT LANGUAGE="javascript">
        <!--
        window.open ('page.html', 'newwindow', 'height=100, width=400, top=0,
      left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=n o,
      status=no') //这句要写成一行
        -->
        </SCRIPT>
                
        【3、用函数控制弹出窗口】
        
        下面是一个完整的代码。
        <html>
        <head>
        <script LANGUAGE="JavaScript">
        <!--
        function openwin() {
        window.open ("page.html", "newwindow", "height=100, width=400, toolbar
      =no, menubar=no, scrollbars=no, resizable=no, location=no, status=no")
      //写成一行
        }
        //-->
        </script>
        </head>
        <body onload="openwin()">
        任意的页面内容...
        </body>
        </html>
        这里定义了一个函数openwin(),函数内容就是打开一个窗口。在调用它之前没有任何用途。怎么调用呢?

        方法一:<body onload="openwin()"> 浏览器读页面时弹出窗口;
        方法二:<body onunload="openwin()"> 浏览器离开页面时弹出窗口;
        方法三:用一个连接调用:
        <a href="#" onclick="openwin()">打开一个窗口</a>
        注意:使用的“#”是虚连接。
        方法四:用一个按钮调用:
        <input type="button" onclick="openwin()" value="打开窗口">
       
       
        【4、同时弹出2个窗口】
        
         对源代码稍微改动一下:
        
        <script LANGUAGE="JavaScript">
        <!--
        function openwin() {
        window.open ("page.html", "newwindow", "height=100, width=100, top=0,
      left=0,toolbar=no, menubar=no, scrollbars=no, resizable=no, location=n o,
      status=no")//写成一行
        window.open ("page2.html", "newwindow2", "height=100, width=100, top=1
      00, left=100,toolbar=no, menubar=no, scrollbars=no, resizable=no, loca
      tion=no, status=no")//写成一行
        }
        //-->
        </script>
        为避免弹出的2个窗口覆盖,用top和left控制一下弹出的位置不要相互覆盖即可 。最后用上面说过的四种方法调用即可。
        注意:2个窗口的name(newwindows和newwindow2)不要相同,或者干脆全部为空。
      
        【5、主窗口打开文件1.htm,同时弹出小窗口page.html】

        如下代码加入主窗口<head>区:
        <script language="javascript">
        <!--
        function openwin() {
        window.open("page.html","","width=200,height=200")
        }
        //-->
        </script>
        加入<body>区:
        <a href="1.htm" onclick="openwin()">open</a>即可。
      
        【6、弹出的窗口之定时关闭控制】
        
        下面我们再对弹出的窗口进行一些控制,效果就更好了。如果我们再将一小段
      代码加入弹出的页面(注意是加入page.html的HTML中,可不是主页面中,否则 ...),让它10秒后自动关闭是不是更酷了?
      首先,将如下代码加入page.html文件的<head>区:
        <script language="JavaScript">
        function closeit()
        {
        setTimeout("self.close()",10000) //毫秒
        }
        </script>
        然后,再用<body onload="closeit()">
      这一句话代替page.html中原有的<BODY>这一句就可以了。(这一句话千万不要忘记写啊!这一句的作用是调用关闭窗
      口的代码,10秒钟后就自行关闭该窗口。)
        【7、在弹出窗口中加上一个关闭按钮】

        <FORM>
        <INPUT TYPE='BUTTON' VALUE='关闭' onClick='window.close()'>
        </FORM>
        呵呵,现在更加完美了!

        【8、内包含的弹出窗口-一个页面两个窗口】
        上面的例子都包含两个窗口,一个是主窗口,另一个是弹出的小窗口。通过下面的例子,你可以在一个页面内完成上面的效果。

        <html>
        <head>
        <SCRIPT LANGUAGE="JavaScript">
        function openwin()
        {
        OpenWindow=window.open("", "newwin", "height=250, width=250,toolbar=no
      ,scrollbars="+scroll+",menubar=no");
        //写成一行
        OpenWindow.document.write("<TITLE>例子</TITLE>")
        OpenWindow.document.write("<BODY BGCOLOR=#ffffff>")
        OpenWindow.document.write("<h1>Hello!</h1>")
        OpenWindow.document.write("New window opened!")
        OpenWindow.document.write("</BODY>")
        OpenWindow.document.write("</HTML>")
        OpenWindow.document.close()
        }
        </SCRIPT>
        </head>
        <body>
        <a href="#" onclick="openwin()">打开一个窗口</a>
        <input type="button" onclick="openwin()" value="打开窗口">
        </body>
        </html>
        看看OpenWindow.document.write()里面的代码不就是标准的HTML吗?只要按照
      格式写更多的行即可。千万注意多一个标签或少一个标签就会出现错误。记得用 OpenWindow.document.close()结束啊。
        【9、终极应用--弹出的窗口之Cookie控制】
        回想一下,上面的弹出窗口虽然酷,但是有一点小毛病(沉浸在喜悦之中,一定
      没有发现吧?)比如你将上面的脚本放在一个需要频繁经过的页面里(例如首页),那么每次刷新这个页面,窗口都会弹出一次,是不是非常烦人?:-(
        有解决的办法吗?Yes! ;-) Follow me.我们使用cookie来控制一下就可以了。
        首先,将如下代码加入主页面HTML的<HEAD>区:
        <script>
        function openwin(){
        window.open("page.html","","width=200,height=200")
        }
        function get_cookie(Name) {
        var search = Name + "="
        var returnvalue = "";
        if (document.cookie.length > 0) {
        offset = document.cookie.indexOf(search)
        if (offset != -1) {
        offset += search.length
        end = document.cookie.indexOf(";", offset);
        if (end == -1)
        end = document.cookie.length;
        returnvalue=unescape(document.cookie.substring(offset, end))
        }
        }
        return returnvalue;
        }  
        function loadpopup(){
        if (get_cookie('popped')==''){
        openwin()
        document.cookie="popped=yes"
        }
        }
        </script>
        然后,用<body
      onload="loadpopup()">(注意不是openwin而是loadpop啊!)替换主页面中原有的<BODY>这一句即可。你可以试着刷新一下这个页面或重新进
      入该页面,窗口再也不会弹出了。真正的Pop-Only-Once!
        写到这里弹出窗口的制作和应用技巧基本上算是完成了

posted @ 2006-05-25 11:11 yanmin 阅读(246) | 评论 (1)编辑 收藏


最近做项目发现很多SQL没有优化: 现在总结几种优化方式.
 首先先了解一个SQL语句的执行过程分3步: 语法分析(parase)与编译,执行,取数据.
1: 在语法分析与编译时:oracle 使用哈希函数为SQL语句在库缓存中分配一个SQL区,
首先检查语句是否存在,若在,则查询数据库字典、检查必须的权限。
若无,需要语法分析与编译。所以SQL语句存在与内存中,将减少分析,编译时间。
SQL语句的分析与编译占整个语句运行过程的60%的时间,SQL优化的目标就是减少分析与编译的时间,共享代码。

查询SQL语句分析与编译的时间:
select * from v$sysstat
where name in ('parse time cpu','parse time elapsed','parse count (hard)')

一个SQL语句的响应时间(elapsed time )应该是服务时间+等待时间.
服务时间= CPU执行时间.
等待时间 可以从v$system_event
select total_waits, total_timeouts, time_waited, average_wait ,event
from v$system_event
where event='latch free'
所以解析一个SQL语句的平均等待时间是"等待时间/parse count" 这个值接近0
通过数据字典v$sqlare,可以查询到频繁被分析与编译的SQL语句.应该减少SQL语句的分析与编译的次数.

2: 将常用的实体驻留内存.
为了减少分析与编译时间,可以将常用的的实体如: 存储过程,包等,尽可能驻留在内存区域.
 1)预留内存空间. sql> show parameter shared_pool_reserved_size
       2)将频繁使用的实体驻留在内存中. 在使用DBMS_SHARED_POOL程序包前,必须首先运行系统提供的程序包: dbmspool.sql 和prvtpool.plb
 在加载这两个程序包后,自动生成所需的包.
      加载: sql> @/u01/app/oracle/product/8.17/rdbms/admin/dbmspool.sql
           sql> @/u01/app/oracle/product/8.17/rdbms/admin/prvtpool.sql
      包DBMS_SHARED_POOL包含以下存储过程.
      dbms_shared_pool.keep 用于将实体保存内存. dbms_shared_pool.keep(object in varchar2,[type in char default p]);
                             object 表示参数名, type 表示被驻留内存的实体类型;P 表示存储过程,C表示光标,R表示触发器,默认P
       
      dbms_shared_pool.unkeep 用于取消被设置进入内存的实体. dbms_shared_pool.unkeep(object in varchar2,[type in char default p]);
                             object 表示参数名, type 表示被驻留内存的实体类型;P 表示存储过程,C表示光标,R表示触发器,默认P
     
      dbms_shared_pool.size(minsize in number)

      select name ,type ,source_size+code_size+parsed_size+error_size "total bytes"
      from dba_object_size
      where owner='SCOTT'

3: 创建索引.
   select index_name,table_owner, table_name, tablespace_name from all_indexes
  
   select user_indexes.TABLE_NAME, user_indexes.INDEX_NAME,uniqueness, column_name
   from user_ind_columns ,user_indexes
   where user_ind_columns.INDEX_NAME=user_indexes.INDEX_NAME
   and user_ind_columns.TABLE_NAME=user_indexes.TABLE_NAME
   order by user_indexes.TABLE_TYPE,user_indexes.TABLE_NAME,user_indexes.INDEX_NAME,user_ind_columns.COLUMN_POSITION

4: 创建聚簇(cluster): 是一组存储在一起的有共同列或经常一起使用的表,被聚簇的两个表只有一个数据段.聚簇表在存储时,在物理层将子表合并到父表中,这样就少了表的连接时间.

5: 创建哈希索引.
 
6: SQL优化器: 基于成本的优化器CBO(cose_based)和基于规则RBO(rule_based)
   sql> show parameter OPTIMIZER_MODE
   可以修改参数文件: initSID.ora,增加: optimizer_Mode={CHOOSE| RULE| FIRST_ROWS|ALL_ROWS}
  all_rows , first_rows(n)基于成本; rule 基于规则,choose基于规则、成本。
  /*+ ordered*/
  /*+ rule */
  /*+ first_rows(50) */

  /*+ordered star*/
  写发: 
  alter system flush shared_pool;
select /*+ rule */ aa from visit

posted @ 2006-03-20 15:28 yanmin 阅读(1038) | 评论 (1)编辑 收藏