28
2021
01

使用脚本从PowerDesigner导出表结构到Excel文档

最近因为项目转运维,需要把表结构搞成Excel文档交给运维同事。

表又非常多也不能一张一张查数据库结构导出来,只能想办法批量导出来,于是就网上搜索脚本,再自己改了改从PD文件里面导出来,就很方便了。

操作如下:

1、用power designer打开PD物理设计文档

2、按快捷键ctrl + shift + x 调出脚本执行窗口

3、把脚本复制进去,点击RUN,然后在对应的路径下找到Excel文档就行了

脚本如下(里面有”保存到文件“的文件路径,记得修改):

21
2020
12

DES、3DES、AES、RSA加密算法对比

DES-非机密数据加密标准,可用于兼容旧系统,新系统不建议使用

3DES-DES的加强版,DES到AES之间的过渡算法

AES-高级加密标准,替代DES

RSA-非对称加密解密算法,多用于签名验证,加密解决速度慢,不建议用于大量数据的加密解密

目前跨系统间的加密数据通讯,一般是RSA与AES两种加密算法结合使用,RSA用于对AES密钥进行加密解密,AES用于对交易数据进行加密解密


19
2020
12

MD5加密算法-自定义变换

有人说MD5已经被破解,不安全了

没事研究一下有可能过时的MD5,看看到底有没过时?


10
2019
07

JAVA学习-Java高级-多线程之线程模型与使用

使用new创建线程后,可以通过Thread类的方法来设置线程的各种属性

线程进入阻塞状态:调用sleep方法,等待同步锁,调用了wait方法

终止线程的方法:执行完正常退出、使用stop方法强制退出、使用interrupt方法强制中断退出

Java实现方法,1:通过继承Thread类实现多线程,2:通过实现Runnable接口,再使用Thread实现多线程


package pkg1;
public class ThreadDemo {
public static void main(String[] args) {
System.out.println("———————————————demo 1—————————————————");
MyThread1 t1 = new MyThread1();
t1.setName("t1");// 设置线程名称
MyThread1 t2 = new MyThread1();
t2.setName("t2");// 设置线程名称
t1.start();// 线程启动
t2.start();// 线程启动
try {
t1.join();// 主线程等待新线程完成再继续往下执行
t2.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("demo 1 结束");
System.out.println("———————————————demo 2—————————————————");
MyRunnable1 r1=new MyRunnable1();
MyRunnable1 r2=new MyRunnable1();
Thread t3=new Thread(r1,"r1");
Thread t4=new Thread(r2,"r2");
t3.start();
t4.start();
try {
t3.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
t4.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//继承Thread类,直接启动线程
class MyThread1 extends Thread {
public MyThread1() {}//无参构造函数
public MyThread1(String name) {//有参构造函数,参数为:线程名称
super(name);
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(this.getName() + " " + i);
}
super.run();
}
}
//类实现Runnable接口,再用Thread线程启动执行
//一般多使用此方式实现多线程,方便实现资源共享(多线程使用同一对象,例如:多窗口卖同一车票)
class MyRunnable1 implements Runnable{
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
}


18
2019
04

oracle中with语句提高查询效率

需求:SUM统计总数之后再列转行。

查询结果:


原始版本SQL:

select nvl(sum(OVERTIME_REPAIR ),0) CNT,
 '维修超时' CELL from (
 SELECT SUM(CASE
             WHEN ROUND((A.DELIVERY_DATE - A.PRE_GET_DATE) * 24 * 60) > 0 THEN
              1
             ELSE
              0
           END) AS OVERTIME_DELIVERY, /*交车超时*/
       SUM(CASE
             WHEN ROUND((A.DELIVERY_DATE - A.PRE_GET_DATE) * 24 * 60) <= 0 THEN
              1
             ELSE
              0
           END) AS NORMAL_DELIVERY, /*正常交车*/
       SUM(CASE
             WHEN (ROUND((W.CLEAN_FINISH_DATE - W.QUALITY_FINISH_DATE) * 24 * 60) > 20) THEN
              1
             ELSE
              0
           END) OVERTIME_CLEAN, /*洗车超时*/
       SUM(CASE
             WHEN (ROUND((W.QUALITY_FINISH_DATE - A.PRE_GET_DATE) * 24 * 60) > 0) THEN
              1
             ELSE
              0
           END) OVERTIME_CHECK, /*质检超时*/
       SUM(CASE
             WHEN ROUND((W.REPAIR_FINISH_DATE -
                        (SELECT MAX(PLAN_END_DATE)
                            FROM T_TEMP_MY_BU_WORK_ORDER_D WI
                           WHERE WI.REPAIR_ORDER_ID = A.REPAIR_ORDER_ID)) * 24 * 60) > 0 THEN
              1
             ELSE
              0
           END) OVERTIME_REPAIR /*维修超时*/
  FROM T_TEMP_MY_BU_REPAIR_ORDER A
  LEFT JOIN T_TEMP_MY_BU_WORK_ORDER W ON W.REPAIR_ORDER_ID = A.REPAIR_ORDER_ID
  JOIN T_TEMP_MY_ORG_DLR DLR ON DLR.DLR_ID = A.DLR_ID
 WHERE A.IS_ENABLE = '1'
   AND A.BILL_TYPE = '31803'
   AND A.REPAIR_ORDER_STATUS = '31011'
 )
 UNION ALL
select nvl(sum(OVERTIME_CLEAN),0) CNT,
'洗车超时' SELL
from (
 SELECT SUM(CASE
             WHEN ROUND((A.DELIVERY_DATE - A.PRE_GET_DATE) * 24 * 60) > 0 THEN
              1
             ELSE
              0
           END) AS OVERTIME_DELIVERY, /*交车超时*/
       SUM(CASE
             WHEN ROUND((A.DELIVERY_DATE - A.PRE_GET_DATE) * 24 * 60) <= 0 THEN
              1
             ELSE
              0
           END) AS NORMAL_DELIVERY, /*正常交车*/
       SUM(CASE
             WHEN (ROUND((W.CLEAN_FINISH_DATE - W.QUALITY_FINISH_DATE) * 24 * 60) > 20) THEN
              1
             ELSE
              0
           END) OVERTIME_CLEAN, /*洗车超时*/
       SUM(CASE
             WHEN (ROUND((W.QUALITY_FINISH_DATE - A.PRE_GET_DATE) * 24 * 60) > 0) THEN
              1
             ELSE
              0
           END) OVERTIME_CHECK, /*质检超时*/
       SUM(CASE
             WHEN ROUND((W.REPAIR_FINISH_DATE -
                        (SELECT MAX(PLAN_END_DATE)
                            FROM T_TEMP_MY_BU_WORK_ORDER_D WI
                           WHERE WI.REPAIR_ORDER_ID = A.REPAIR_ORDER_ID)) * 24 * 60) > 0 THEN
              1
             ELSE
              0
           END) OVERTIME_REPAIR /*维修超时*/
  FROM T_TEMP_MY_BU_REPAIR_ORDER A
  LEFT JOIN T_TEMP_MY_BU_WORK_ORDER W ON W.REPAIR_ORDER_ID = A.REPAIR_ORDER_ID
  JOIN T_TEMP_MY_ORG_DLR DLR ON DLR.DLR_ID = A.DLR_ID
 WHERE A.IS_ENABLE = '1'
   AND A.BILL_TYPE = '31803'
   AND A.REPAIR_ORDER_STATUS = '31011'
 )
 UNION ALL
select nvl(sum(OVERTIME_CHECK),0) CNT,
'质检超时' SELL
from (
 SELECT SUM(CASE
             WHEN ROUND((A.DELIVERY_DATE - A.PRE_GET_DATE) * 24 * 60) > 0 THEN
              1
             ELSE
              0
           END) AS OVERTIME_DELIVERY, /*交车超时*/
       SUM(CASE
             WHEN ROUND((A.DELIVERY_DATE - A.PRE_GET_DATE) * 24 * 60) <= 0 THEN
              1
             ELSE
              0
           END) AS NORMAL_DELIVERY, /*正常交车*/
       SUM(CASE
             WHEN (ROUND((W.CLEAN_FINISH_DATE - W.QUALITY_FINISH_DATE) * 24 * 60) > 20) THEN
              1
             ELSE
              0
           END) OVERTIME_CLEAN, /*洗车超时*/
       SUM(CASE
             WHEN (ROUND((W.QUALITY_FINISH_DATE - A.PRE_GET_DATE) * 24 * 60) > 0) THEN
              1
             ELSE
              0
           END) OVERTIME_CHECK, /*质检超时*/
       SUM(CASE
             WHEN ROUND((W.REPAIR_FINISH_DATE -
                        (SELECT MAX(PLAN_END_DATE)
                            FROM T_TEMP_MY_BU_WORK_ORDER_D WI
                           WHERE WI.REPAIR_ORDER_ID = A.REPAIR_ORDER_ID)) * 24 * 60) > 0 THEN
              1
             ELSE
              0
           END) OVERTIME_REPAIR /*维修超时*/
  FROM T_TEMP_MY_BU_REPAIR_ORDER A
  LEFT JOIN T_TEMP_MY_BU_WORK_ORDER W ON W.REPAIR_ORDER_ID = A.REPAIR_ORDER_ID
  JOIN T_TEMP_MY_ORG_DLR DLR ON DLR.DLR_ID = A.DLR_ID
 WHERE A.IS_ENABLE = '1'
   AND A.BILL_TYPE = '31803'
   AND A.REPAIR_ORDER_STATUS = '31011'
 )


11
2019
04

oracle中join右表最多只取一条指定的数据

一般情况下,如果类型这种:

       select * from A
       left join B 
       ON A.con_id=B.con_id;

假设A中有1条数据,B中与A关联的数据有2条或以上,查出的结果是有2条或以上,有些情况我们需要以A表为准,B表只查想要的一条记录

13
2019
03

JAVA学习-Java高级-Java反射机制

Java高级-Java反射机制

1.反射概述

什么是反射?

反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象方法的功能称为Java语言的反射机制。

06
2019
01

oracle11g安装配置

之前有安装oracle11g,但都是装好了不会用,今天试了下能安装成功、配置好、然后可以用客户端连接使用,这里肯定要查很多的相关资料,不然也弄不好。

下面简单记录一步骤:

1、下载

下载文件一共有两部分:

https://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_database_1of2.zip

05
2019
01

Outlook 2013客户端设置邮件到达显示桌面提示

背景:

公司换邮件服务器之后,收到邮件后桌面没有弹出提醒了,有时候半天或者一天没看邮件,在没提醒的情况下,很多重要的信息错过了或者处理不及时,比如会议预约邮件、禅道提醒邮件、JIRA提醒邮件等等,摸索了一段时间终于把邮件到达桌面提醒重新弄出来了,下面分享一下设置步骤,挺简单。


1、管理规则和通知

04
2019
01

oracle-存储过程生成Java的entity类代码

查询Oracle表的字段SQL如下:

select 

        ut.TABLE_NAME,--表名称

        ut.COLUMN_NAME,--字段名称

        uc.comments,--字段注释

        ut.DATA_TYPE,--字典类型