随笔-15  评论-79  文章-0  trackbacks-0
  2010年9月6日
最近经常做一些数据导入的工作!做数据挖掘项目大家都懂的...
导入数据最痛苦的就是等待他导...不过如果大家没注意一些需要注意的东西,可能大家会这样反复等好多次!!
一、
首先,我也是多次吃亏的一件事情,就是老是忘记加入导入日志。因为在导入数据的时候可能会抛出很多异常,这些异常如果不记录下如果缺失了重要的数据可能要从新导入或找到原因然后重导。太可惜了。加入导入日志一切有据可查,非常重要。

它的做法可以在imp时直接加参数:
log=/oracle/log/imp.log (linux)
log=E:\log\imp.log      (windows)
指定日志的路径和文件名
例如:
imp trade/zhangy@orcl file=/test/trade.dmp show=n buffer=2048000 ignore=n commit=y grants=y full=y log=/oracle/log/imp.log
这样就有日志了...

二、导入单个表
可能客户给我们一个整库文件,但是我们可能只需要其中的一些表就OK了。oracle已经带有导入单独表的语法。
IMP trade/trade file=D:\2011-02-18_trade.dmp IGNORE=Y TABLES=(TOS_ContractInterval,TOS_CONTRACTMASTER) FULL=N



当然还有许多语法,我们可以通过imp help=yes来查看..


posted @ 2011-06-02 20:04 张元Won 阅读(601) | 评论 (0)编辑 收藏
因为新配置的机器,装的Oracle10g一直都没使用过。因为参与到项目,昨天突然用Oracle发现用Plsql不上Oracle了。
虾米原因?...搞的我蛋疼了一上午...
于是一直找帖纠结这个问题,终于还是解决了,在博客中留个记录以便以后忘记了翻翻。

导致这个错误的原因有很多
可能是SID配置不对,但绝大多数是因为Oracle程序本身问题。就是OracleOraDb10g_home1TNSListener这个服务对应的D:\oracle\product\10.2.0\db_1\BIN\TNSLSNR执行程序没有执行或者执行中断造成的。那么我们只要设置一个全局SID服务变量,以后就可以都以这个变量为准来查找到监听了。

解决方法如下:
打开:%Oracle_Hoem%/network/admin/listener.ora文件 在 
SID_LIST_LISTENER = 
(SID_LIST = 
(SID_DESC = 
  (SID_NAME = PLSExtProc) 
  (ORACLE_HOME = D:\Oracle\Oracle10g) 
  (PROGRAM = extproc) 
后面添加: 
(SID_DESC = 
  (GLOBAL_DBNAME = ORACLE) 
  (ORACLE_HOME = D:\Oracle\Oracle10g) 
  (SID_NAME = ORACLE) 
  ) 
最后变成: 
SID_LIST_LISTENER = 
(SID_LIST = 
(SID_DESC = 
  (SID_NAME = PLSExtProc) 
  (ORACLE_HOME = D:\Oracle\Oracle10g) 
  (PROGRAM = extproc) 
) (SID_DESC = 
  (GLOBAL_DBNAME = ORACLE) 
  (ORACLE_HOME = D:\Oracle\Oracle10g) 
  (SID_NAME = ORACLE) 
  ) 
posted @ 2011-05-27 09:17 张元Won 阅读(1002) | 评论 (0)编辑 收藏
  • 第一步: 取消自动validation   
  • validation有一堆,什么xml、jsp、jsf、js等等,我们没有必要全部都去自动校验一下,只是需要的时候才会手工校验一下!   
  • 取消方法:   
  • windows–>perferences–>myeclipse–>validation   
  • 除开Manual下面的复选框全部选中之外,其他全部不选   
  • 手工验证方法:   
  • 在要验证的文件上,单击鼠标右键–>myeclipse–>run validation   
  • 第二步:取消Eclipse拼写检查   
  • 1、拼写检查会给我们带来不少的麻烦,我们的方法命名都会是单词的缩写,他也会提示有错,所以最好去掉,没有多大的用处   
  • windows–>perferences–>general->editors->Text Editors->spelling
  • 第三步:取消myeclipse的启动项   
  • myeclipse会有很多的启动项,而其中很多我们都用不着,或者只用一两个,取消前面不用的就可以   
  • windows–>perferences–>general–>startup and shutdown   启动项功能如下,可以根据自己的需要选择
  • Automatic Updates Scheduler //自动升级调度      
  • MyEclipse QuickSetup //快速启动      
  • MyEclipse Derby //derby是一个开源数据库的名字   
  • MyEclipse EASIE Geronimo 1 //同色都是应用服务器的名字      
  • MyEclipse EASIE Geronimo 2       
  • MyEclipse EASIE JBOSS 2       
  • MyEclipse EASIE JBOSS 3       
  • MyEclipse EASIE JBOSS 4       
  • MyEclipse EASIE JBOSS 5       
  • MyEclipse EASIE JBOSS       
  • MyEclipse EASIE Jetty 4       
  • MyEclipse EASIE Jetty 5       
  • MyEclipse EASIE Jetty 6       
  • MyEclipse EASIE Jetty       
  • MyEclipse EASIE JOnAS 3       
  • MyEclipse EASIE JOnAS 4       
  • MyEclipse EASIE JOnAS       
  • MyEclipse EASIE JRun 4       
  • MyEclipse EASIE JRun       
  • MyEclipse EASIE Oracle 10 AS       
  • MyEclipse EASIE Oracle 9 AS       
  • MyEclipse EASIE Oracle AS       
  • MyEclipse EASIE Orion 1       
  • MyEclipse EASIE Orion 2       
  • MyEclipse EASIE Resin 2       
  • MyEclipse EASIE Resin 3       
  • MyEclipse EASIE Resin       
  • MyEclipse EASIE Sun 8.x       
  • MyEclipse EASIE Sun 8       
  • MyEclipse EASIE Sun 9       
  • MyEclipse EASIE Glassfish 2       
  • MyEclipse EASIE Glassfish 1       
  • MyEclipse EASIE Sun One       
  • MyEclipse EASIE MyEclipse Tomcat 6 Server       
  • MyEclipse EASIE Tomcat 4       
  • MyEclipse EASIE Tomcat 5       
  • MyEclipse EASIE Tomcat 6       
  • MyEclipse EASIE Tomcat       
  • MyEclipse EASIE WebLogic 10       
  • MyEclipse EASIE WebLogic 6       
  • MyEclipse EASIE WebLogic 7       
  • MyEclipse EASIE WebLogic 8       
  • MyEclipse EASIE WebLogic 9       
  • MyEclipse EASIE WebLogic       
  • MyEclipse EASIE WebSphere 5       
  • MyEclipse EASIE WebSphere 6.1       
  • MyEclipse EASIE WebSphere 6       
  • MyEclipse EASIE WebSphere 4       
  • MyEclipse Examples //样例      
  • MyEclipse Memory Monitor //内存监控      
  • MyEclipse Tapestry Integration //插件集成      
  • MyEclipse JSP Debug Tooling //jsp调试插件      
  • MyEclipse File Creation Wizards //文件创建程序      
  • ICEfaces Integration for MyEclipse //基于Ajax的JSF开发框架()   
  • MyEclipse Backward Compatibility //后台功能      
  • MyEclipse Perspective Plug-in //透视图插件      
  • Pluse Collaboration Control Center //Eclipse的网页管理中心   
  • eclipse-cs 4.x.x -> 5.0.0 Migration Plug-in  //Eclipse插件兼容组件   
  • Mozilla Debug UI Plug-in(Incubation) //Mozilla调试插件(Mozilla是一款浏览器)      
  • Dynamic Languages ToolKit Core UI //对入PHP等动态语言支持的用户接口   
  • WTP Webservice UI Plug-in //Web 服务视图插件      
  • JavaServer Faces Tools - Core //jsf工具核心包      
  • Automatic Updates Scheduler //自动更新   
  • Service policy  //Web提供的服务性能目标定义,自动管理   
  • Atfdebug Plug-in(Incubation)  //动态语言的调试工具   
  • Auxiliary Web Module Support for MeEclipse// 辅助的Web模块支持.(可能是Struts等文件自动添加)   
  • JSF Editor Preview Support for MyEclipse//jsf编辑器 
  • 第四步:更改jsp默认打开的方式   
  • 安装了myeclipse后,编辑jsp页面,会打开他的编辑页面,同时也有预览页面,速度很慢,不适合开发。所以更改之windows–>perferences–>general–>editors->file associations   选择*.jsp,把编译器改为默认启动MyEclipse JSP Edition(在下方选择一种编辑器,然后点击左边的default按钮   )
  • 第五步: 更改内存使用文件   
  • 1、打开 eclipse.ini   
  •   
  • -startup
    ../Common/plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar
    --launcher.library
    ../Common/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519
    -install
    D:/Myeclipse 8.5/Program
    -vm
    D:/Myeclipse 8.5/Common/binary/com.sun.java.jdk.win32.x86_1.6.0.013/jre/bin/client/jvm.dll
    -configuration
    configuration
    -vmargs
    -Xmx512m
    -XX:MaxPermSize=1024m
    -XX:ReservedCodeCacheSize=128m
    把下面的那个 -XX:MaxPermSize 调大,比如 -XX:MaxPermSize=1024M,再把 -XX:PermSize 调成跟 -XX:MaxPermSize一样大   
  • 原因:大家一定对这个画面很熟悉吧:   
  • 几乎每次 eclipse 卡到当都是因为这个非堆内存不足造成的,把最大跟最小调成一样是因为不让 myeclipse 频繁的换内存区域大小   
  • 注意:XX:MaxPermSize 和 Xmx 的大小之和不能超过你的电脑内存大小   
  • 经理比较奢侈,就调到了1024
  • 第六步: 取消Maven更新(启动更新)   
  • Window > Preferences > Myeclipse> Maven4Myeclipse > Maven>禁用Download repository index updates on startup

  • 改快捷键之类的经理就不介绍了。

    posted @ 2010-11-17 10:25 张元Won 阅读(18451) | 评论 (5)编辑 收藏

    最近发现很多朋友连拦截器都不知道,于是想写个BLOG总结一下。
    java拦截器的基本原理其实非常简单,说白了就是动态代理类。
    下面来看一个简单的例子
    首先,我建立一个拦截器的类InterceptorClass,这里的before()和after()方法是以后拦截器会执行的方法
    CODE清单一:

    public class InterceptorClass {
     
    public void before()
      System.out.println(
    "拦截器InterceptorClass方法调用:before()!"); 
     }
     
     
    public void after()
         System.out.println(
    "拦截器InterceptorClass方法调用:after()!"); 
     }

    }

     

    我们模拟一个业务组件接口BusinessInterface,和一个业务组件实现类BusinessClass
    CODE清单二:

    public interface BusinessInterface {
     
    public void doSomething();
    }

     

    CODE清单三:

    public class BusinessClass implements BusinessInterface {
     
    public void doSomething() {
       System.out.println(
    "业务组件BusinessClass方法调用:doSomething()"); 
     }

    }

     

    然后,创建一个动态代理类DynamicProxyHandler,这个类是集成InvocationHandler接口的,动态类的原理实际上是使得当你执行一个动态方

    法的时候,他可以把这个动态方法dispatch到这个动态类上来。这样,你就可以在这个方法的前后嵌入自己的一些方法。
    CODE清单四:
    //包含了业务对象绑定动态代理类的处理,并实现了InvocationHandler接口的invoke方法

    public class DynamicProxyHandler implements InvocationHandler {
     
    private Object business;//被代理对象
     private InterceptorClass inceptor = new InterceptorClass();//拦截器
     
     
    // 动态生成一个代理类对象,并绑定被代理类和代理处理器
     public Object bind(Object business) {
       
    this.business = business;
       
    return Proxy.newProxyInstance(
         
    //被代理类的ClassLoader
         business.getClass().getClassLoader(),
         
    //要被代理的接口,本方法返回对象会自动声称实现了这些接口
         business.getClass().getInterfaces(), 
         
    //代理处理器对象
         this);
     }


     
     // 代理要调用的方法,并在方法调用前后调用连接器的方法

     /**
      * 
    @param proxy  代理类对象
      * 
    @param method 被代理的接口方法
      * 
    @param args   被代理接口方法的参数
      * 
    @throws Throwable
      
    */

     
    public Object invoke(Object proxy, Method method, Object[] args)
       
    throws Throwable {
      Object result 
    = null;
      inceptor.before();
      result
    =method.invoke(business,args);
      inceptor.after();
      
    return result;
     }


    OK,我们来写个类测试一下
    CODE清单五:

    public static void main(String[] args) {
      
    //生成动态代理类实例
      DynamicProxyHandler handler = new DynamicProxyHandler();
      
    //生成待测试的业务组件对象
            BusinessInterface business = new BusinessClass();
            
    //将业务组件对象和动态代理类实例绑定
            BusinessInterface businessProxy = (BusinessInterface) handler.bind(business);
            
    //用动态代理类调用方法
            businessProxy.doSomething();
     }


    来看看结果:


    近期struts2很流行,而且拦截器是struts2里面一个比较好的功能,下面举个例子说明一下拦截器在struts2中的用法。
    struts2对拦截器实现做了一个封装,使得我们在实现的时候比较简单。
    首先我们要建一个拦截器类
    CODE清单六:

    public class AuthorizationInterceptor extends AbstractInterceptor {
     @Override
     
    public String intercept(ActionInvocation invocation) throws Exception {
      Map session 
    = invocation.getInvocationContext().getSession();
      String userName 
    = (String) session.get("userName");
      
    if ( userName != null && userName.equals("test")) {
       System.out.println(
    "拦截器:合法用户登录---");
       
    return invocation.invoke();
      }

      
    else
      
    {
       System.out.println(
    "拦截器:用户未登录---");
       
    return Action.LOGIN;
      }

     }

    }


    这个类是必须要继承struts2包中提供的AbstractInterceptor类,这个类有一个抽象方法intercept,这个方法是必须要实现的。
    那么经理在这个拦截器里面写了一个简单的实现,对url用户合法性做了一个限制。

    接下来比较关键的是过滤器在struts2中的配置,先看看代码
    CODE清单七:

    <package name="system" extends="struts-default">
      
    <interceptors>
       
    <!--  定义权限控制拦截器  -->
       
    <interceptor name="authority" 

    class
    ="com.sharesin.biz.common.intercepts.struts2.AuthorizationInterceptor"/>
       
    <!-- 定义一个包含权限控制的拦截器栈   -->
       
    <interceptor-stack name="mystack">
        
    <interceptor-ref name="defaultStack"></interceptor-ref>
        
    <interceptor-ref name="authority"></interceptor-ref>
       
    </interceptor-stack>
      
    </interceptors>
       
    <!--定义默认拦截器   -->
            
    <default-interceptor-ref name="mystack" />
       
    <!--定义全局处理结果   -->
      
    <global-results>
       
    <result name="login">index.jsp</result>
      
    </global-results>
      
    <action name="login_*" class="com.sharesin.biz.web.system.LoginAction" method="{1}">
       
    <result name="success">system/homepage.jsp</result>
      
    </action>
     
    </package>


    在interceptors节点里,我们可以定义多个拦截器,这里的名为authority的只是其中的一个。struts2的拦截器栈我是先执行struts2默认的拦

    截器defaultStack,然后再执行我的。然后只需要用default-interceptor-ref标签设置好这个system包中的默认拦截器为这个拦截器就OK了。

    struts2中引入了package这个概念,我觉得十分实用,当然这对struts2拦截器也是个实惠,我们可以根据不同的action来分包和不同的拦截器


    ok,来运行测试一下。


    结果..


     

     

     

     

     

    posted @ 2010-09-06 17:21 张元Won 阅读(4485) | 评论 (3)编辑 收藏