idea下创建Python项目

1.安装Python到本机(打开cmd输入python检测是否安装正常)

2.安装idea的python插件(如手动下载插件请注意查看版本)

3.新建项目或module(此处以新建module为例)

4.选择python,点击下一步

5.填写项目名,finish

注:易出现问题的地方就是手动安装插件时版本不一致导致idea集成失败

Dorado中间件DataGrid控件添加计算列

Dorado说明:

Dorado是锐道公司开发的一个中间件
使前后端完美对接,大大提高了开发速度

与原生安卓的使用方式比较类似,都是通过拉控件设置属性进行页面开发
假设以下是需要展示的表格:
姓名  数学   语文

张三  98     97
李四  88     87
王五  89     90

例如你需要显示数据额成绩和语文成绩的平均分

1.双击DataGrid设置showFooter的值为true
2.双击姓名列,打开onRenderFooterCell
3.在该事件中写入:
  arg.dom.innerText="平均分"
设置之后姓名列对应的显示为“平均分”
4.分别设置需要计算的两列的summaryType的值为average
5.该字段还有一些其他值,例如sum等
  设置后可分别对这些列进行相应的计算
6.设置后的计算列位于DataGrid的最下方,一般位于屏幕最下方
  (第一次搞的时候以为设置错了,一直以为这一列会追加在显示数据的后面!)

7.结果样例:

姓名   数学   语文

张三   88     97
李四   88     97
王五   88     97


平均分 88     97

Oracle数据库Date格式化及Select时Case的使用

--Date格式化片段
to_char(create_date,'YYYYMMDD') as date

--格式化系统当前日期
select to_char(sysdate,'YYYYMMDD') from dual;

--Select时Case片段
select case 
when item_a like 'A%' and item_b = 'b' then 'one'
when item_a like 'A%' and item_b = 'B' then 'two'
else 'other' end as type
from table_name

自定义Java注解

注解的作用:

1.生成文档
这是最常见的,也是java 最早提供的注解。常用的有 @see @param @return 等

2.跟踪代码依赖性,实现替代配置文件功能
Spring中大量运用注解来简化配置文件

3.在编译时进行格式检查

如@override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出

实现一个简单的注解:

@Retention(RetentionPolicy.RUNTIME)
public @interface MyTarget {
}
上面是一个最简单的注解实现,没有定义任何的属性
需要注意的是@Retention(RetentionPolicy.RUNTIME)是定义注解所必须的。
 
@Retention是注解的注解,称为注解的元注解。
括号里有一个枚举类型的值,即为注解内部定义的值。打开Retention的实现:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
    RetentionPolicy value();
}
可以看到这里定义了一个变量value并且没有缺省值,所以不写这个value就会报错。 
继续打开RetentionPolicy:
public enum RetentionPolicy {
    SOURCE,
    CLASS,
    RUNTIME
}
可以发现这个枚举类定义了三个值,这三个值分别代表的是我们定义的MyTarget如何保持。

@Retention(RetentionPolicy.CLASS)
注解的信息被保留在class文件(字节码文件)中当程序编译时,但不会被虚拟机读取在运行的时候

@Retention(RetentionPolicy.SOURCE)
注解的信息会被编译器抛弃,不会留在class文件中,注解的信息只会留在源文件中

@Retention(RetentionPolicy.RUNTIME)
注解的信息被保留在class文件(字节码文件)中当程序编译时,会被虚拟机保留在运行时

还需要注意的是java的元注解一共有四个: 
@Document 
@Target 
@Retention 
@Inherited

各个的作用,读者自己查一下吧。

注解处理的一个基础:
 T getAnnotation(Class annotationClass): 
返回改程序元素上存在的、指定类型的注解,如果该类型注解不存在,则返回null。

Annotation[] getAnnotations():
返回该程序元素上存在的所有注解。

boolean is AnnotationPresent(Class annotationClass):
判断该程序元素上是否包含指定类型的注解,存在则返回true,否则返回false.

Annotation[] getDeclaredAnnotations():
返回直接存在于此元素上的所有注释。
与此接口中的其他方法不同,该方法将忽略继承的注释。
(如果没有注释直接存在于此元素上,则返回长度为零的一个数组。)
该方法的调用者可以随意修改返回的数组;这不会对其他调用者返回的数组产生任何影响。

实现为属性赋值的注解:
package com.justin.test.util;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface CarNameTarget {
    String name() default "";
}
package com.justin.test.util;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface CarSalerTarget {
    String salerName();

    int age() default 1;
}
package com.justin.test.entity;

import com.justin.test.util.CarNameTarget;
import com.justin.test.util.CarSalerTarget;

/**
 * 描述:
 * 汽车实体类
 *
 * @author 孫兵
 * @create 2018-05-15 10:16
 */
public class BnechCar {
    @CarNameTarget(name = "奔驰")
    private String name;

    @CarSalerTarget(salerName = "justin", age = 22)
    private String salerInfo;
}
package com.justin.test.util;

import java.lang.reflect.Field;

/**
 * 描述:
 * 汽车信息工具类
 *
 * @author 孫兵
 * @create 2018-05-15 10:19
 */
public class CarInfoUtil {

    public static void getFruitInfo(Class<?> clazz) {
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            if (field.isAnnotationPresent(CarNameTarget.class)) {
                CarNameTarget carNameTarget = field.getAnnotation(CarNameTarget.class);
                String carColour = "汽车的中文名:" + carNameTarget.name();
                System.out.println(carColour);
            } else if (field.isAnnotationPresent(CarSalerTarget.class)) {
                CarSalerTarget carSalerTarget = field.getAnnotation(CarSalerTarget.class);
                String salerInfo = "销售员姓名:" + carSalerTarget.salerName() + ",年龄:" + carSalerTarget.age();
                System.out.println(salerInfo);
            }
        }
    }
}
/**
     * 自定义注解测试
     */
    private void targetTest() {
        CarInfoUtil.getFruitInfo(BnechCar.class);
    }

打印信息:

汽车的中文名:奔驰
销售员姓名:justin,年龄:22

修改CSS样式或JS之后F12发现资源没有改变

原因:浏览器已缓存过文件,之后浏览器只获取本地文件,不再远程下载

解决办法:
1.修改浏览器缓存设置
2.不知道怎么设置就手动清楚浏览器缓存
3.如清除浏览器缓存无效,则为引用添加版本号

例如:
<link rel="stylesheet" type="text/css" href="CSS/main.css?v2">

注意:
1.问号后可随意编写,但不要重复
2.使用Idea热部署更新会出现错误
4.执行Ctrl+F5重新从服务器端获取资源(作者认为是最简便的方式)

Maven与lib文件夹并存引入异常的问题

1.此处使用开发环境为eclipse
2.项目为maven与lib并存项目(即引用jar包来自两个部分)
3.右键项目选中build path选中configure build path
可以看到maven引入资源中有引入失败的包

解决办法:
1.首选执行maven install,确保maven部分引入的包没有问题

2.确保引入异常的包存在于lib文件夹下

3.选中windows下的Preferences

4.选中maven选中Offline将在线状态改为本地状态点击OK

5.右键项目选中maven选中Update Project

6.此时界面内的Offline应已被选中

7.选中Force Update of Snapshots/Releases点击OK

8.项目更新后重新build path查看,包引入正常了

NavicatPremium创建Oracle连接失败

创建连接失败,原因:
1.IP错误
2.Port错误
3.服务名或服务ID错误
4.用户名或密码错误

那么能够到去网上搜的情况一般都不会是前四种
5.本地没有安装Oracle客户端

这种情况就导致:
Navicat获取到的连接支持只是它自己的默认支持
无法与远程Oracle匹配

解决办法:
1.去官方下载客户端(优点:可操作本地Oracle数据库)

2.下载精简版客户端(优点:安装部署方便)
Instant Client 是Oracle 公司推出的精简版客户端。
32位下载地址:
http://www.oracle.com/technetwork/topics/winsoft-085727.html

注意:
不管你的Navicat是32位的还是64位的,
你的Instant Client都要下载32位的,
因为Navicat只支持32位的客户端。

2.1解压下载的压缩包
2.2获取压缩包内的oci.dll路径,例如F:/instantclient_12_1/oci.dll
2.3打开Navicat选中工具,选中OCI,将oci.dll路径输入到OCI library
2.4重启Navicat重新尝试连接