一、将class文件转换为java文件
1、需要使用jad.exe文件反编译文件
2、在jad.exe反编译文件的路径下,输入cmd,进入反编译项
3、在jad.exe目录下,建立一个放置要进行反编译的文件目录
4、然后执行:jad -o -r -s java -d src st/**/*.class 进行反编译,st 是反编译前,需要进行反编译的class文件的文件夹,src 是反编译后,生成的java文件路径
二、数据库建模&逆向工程工具(PowerDesigner)
第一种方式:
地址:https://jingyan.baidu.com/article/fcb5aff78e6a48edab4a7146.html
PowerDesigner导出表结构到word(RTF格式)
1、通过sql文件,生成模型图
文件---》Reverse Engineer ---》Database
配置模型名称(或者数据名称),以及数据源
点击确定,弹出sql脚本配置页面,选择脚本,点击确定,生成模型图
如果当前模型图中,内有备注列,通过双击单个文件,点击漏斗型图片,可选择备注列
2、通过模型图,可生成sql脚本
点击 Database-->Generate DataBase 弹出提示框
在general窗口中,填写文件导出的路径和文件名
在options窗口中选择生存脚本的内容,可以选择是否创建数据库的脚本,选择要生成脚本的表
在format窗口中勾上以上(title和generate)复选框,否则当你备注为空的时候注释出不来;反之,如果你备注不为空那么名称(Name)才能作为注释出现!!
在selection中选择你需要生成sql的模块,指定输出目录。
1.新建概念模型(conceptual Data Model)
File-->New Model-->Conceptual Data Mode
或者点击工作区,右键-->New Model-->Conceptual Data Mode
2.打开模型时,有时会有方格线,去除方格线
Tools-->Display preferences ,去掉show page delimiter 复选框
创建表并建立关系:
在创建的过程中,人员表里有主键Code,性别表里也有主键Code,但是在创建的过程是报错,说是Code已经被占用了,
去除属性名重复的方法如下:
使用PD中,CDM默认实体属性不能重名,在CDM中唯一。可以通过设置,取消该限制。
选择 Tools->Model Options,取消 Data Item 组的Unique code 和 Allow reuse复选框。
Unique:设置实体属性是否唯一
Allow reuse:设置实体属性是否允许重用
注:默认使用唯一代码的好处是,改变属性,其他引用该属性的实体,都一起修改。该功能可以通过domain实现,
设置属性在同一domain中,当需要修改字段类型的时候,修改domain一处即可。
概念模型转换为物理模型:
操作:Tools-->GeneratePhysical Data Model
快捷键:ctrl+shift+p
但是在生成的过程中报了一个实体属性重复的错误,有属性同名导致的
解决办法:
1、tools----》check model parameters 将报错的列去掉复选框
2、Tools-->GeneratePhysical Data Model 将Detail中将Check model去掉
4、新建物理模型
文件---》new model ---》 physcal 选择数据库,点击确定
单击表格按钮,然后再到模型设计面板中单击一次便可以添加一个表,系统默认为表命名为Table_n,这里的n会随着添加的表增多而顺序增加。添加的表是没有任何的列的
双击一个表,系统将打开表的属性窗口,在General选项卡中可以设置表的Name、Code等属性
name模型中显示的名字,code数据库中,表的实际表名
点击columns,复选框p表示:主键,f表示外键,m代表不能为空
第二种方式:使用Navicat Data Modeler工具:
Navicat Data Modeler工具简介:
是一个强大的和符合成本效益的数据库设计工具,它能帮助用户创建高质素的概念、逻辑和物理数据模型。让你可视化地设计数据库结构、执行逆向或正向工程程序、从 ODBC 数据源导入模型、生成复杂的 SQL/DDL 和打印模型到文件等
能简化创建复杂实体关系模型和生成 SQL 脚本的工序,支持MySQL、MariaDB、Oracle、SQL Server、PostgreSQL 和 SQLite
Navicat Data Modeler:https://www.navicat.com.cn/products/navicat-data-modeler
三、表死锁问题
select b.owner,b.object_name,a.session_id,a.locked_mode
from v$locked_object a,dba_objects b
where b.object_id = a.object_id;
select b.username,b.sid,b.serial#,logon_time
from v$locked_object a,v$session b
where a.session_id = b.sid order by b.logon_time
alter system kill session '493,15141';
四、存储过程死锁问题
--1:查V$DB_OBJECT_CACHE
SELECT * FROM V$DB_OBJECT_CACHE WHERE name='PORC_FSF_NEW' AND LOCKS!='0';
--注意:CRM_LASTCHGINFO_DAY为存储过程的名称。
--发现locks=2,
--2:按对象查出sid的值
select SID from V$ACCESS WHERE object='PORC_FSF_NEW';
--注意:CRM_LASTCHGINFO_DAY为存储过程的名称。
--3:查sid,serial#
SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='376';
alter system kill session '376,40618' immediate;
五、建立触发器命令
create or replace trigger jw_gwk_mx_tg_insertId
before insert on jw_gwk_mx for each row
begin
select jw_gwk_mx_id.nextval into:new.id from dual;
end;
-触发器
Create or replace trigger tri_name
Alter/before ……------这里是触发时间类型
Update/insert/delete …….--------这里是触发事件类型
On
table_name ……..----------这里是触对象,可以是表名,ddl对象名等
declare
varvarchar2; ------------定义变量
begin
--------------------------------处理主体部分
end;
--JOB
begin
sys.dbms_job.submit(job => :job,
what =>'update_pw_oms_emergency_car;',---这里是要调用的过程名
next_date =>to_date('13-03-2011 22:00:00', 'dd-mm-yyyy hh24:mi:ss'),
interval =>'trunc(sysdate+1,''DD'')+22/24');
commit;
end;
1:每分钟执行
Interval =>TRUNC(sysdate,'mi') + 1/ (24*60)
或
Interval =>sysdate+1/1440
2:每天定时执行
例如:每天的凌晨1点执行
Interval =>TRUNC(sysdate) + 1 +1/ (24)
3:每周定时执行
例如:每周一凌晨1点执行
Interval =>TRUNC(next_day(sysdate,'星期一'))+1/24
4:每月定时执行
例如:每月1日凌晨1点执行
Interval=>TRUNC(LAST_DAY(SYSDATE))+1+1/24
5:每季度定时执行
例如每季度的第一天凌晨1点执行
Interval =>TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
6:每半年定时执行
例如:每年7月1日和1月1日凌晨1点
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
7:每年定时执行
例如:每年1月1日凌晨1点执行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24
六、建立序列命令
create sequence JW_GWK_MX_ID
minvalue 1 --序列最小值
maxvalue 9999999999999999999999999999 -- NOMAXvalue 不设置最大值
start with 1 - 从1开始计数
increment by 1 -- 每次加几个
nocache; --nocache不缓存。cache缓存。开启缓存,效率高,只是如果数据库宕机了,缓存丢失,会出现序列跳号情况。
七、查看已有序列sequence:
select * from user_sequences; --当前用户
Select * from all_sequences;--当前库下所有用户
八、数据泵数据处理
第一步:在服务器/本地上创建真实的目录
1、查询文件存放路径
select * from dba_directories t;
2、删除文件夹路径
drop directory oracle_exp;
3、创建文件路径文件夹
create or replace directory oracle_exp as 'D:\InstallationDirectory/admin/orcl/dump_2021';
第二步:用sys管理员登录sqlplus;
oracle@ypdbtest:/home/data>sqlplus
SQL*Plus: Release 11.2.0.4.0 Production on Tue Sep 5 09:20:49 2017
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Enter user-name: sys as sysdba
Enter password:
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
第三步:给创建逻辑目录、授权;
1、查看管理员目录,检查是否存在;
select * from dba_directories
2、用sys管理员给你的指定用户赋予在该目录的操作权限
chown -R oracle:oinstall /apps/lgqsj
3、给当前用户授予读写权限
grant read,write on directory DATA_DIR to 当前用户
第四步:在服务器/本地上面创建的逻辑目录下执行导入命令
1、impdp qydj/111111 dumpfile=qydj20210713.dmp DIRECTORY=ORACLE_EXP remap_schema=qydj:qydj exclude=statistics table_exists_action=replace;
2、impdp szsfy/szsfy_Dpxq_1118@10.190.66.112:1521/TBSSZJW directory=data_dir dumpfile=expdp_ftgwk17_20201209.dmp remap_schema=ftgwk17:szsfy remap_tablespace=HXTBS2017:TBS_SZJW table_exists_action=append logfile=expdp_ftgwk17_20201209.log
3、具体项描述:
--table_exists_action:导入对象已存在时执行的操作。有效关键字:SKIP,APPEND,REPLACE和TRUNCATE
1) skip:默认操作
2) replace:先drop表,然后创建表,最后插入数据
3) append:在原来数据的基础上增加数据
4) truncate:先truncate,然后再插入数据
导出的几种方法
第一种:“full=y”,全量导出数据库;
expdp user/passwd@orcl dumpfile=expdp.dmp directory=data_dir full=y logfile=expdp.log;
第二种:schemas按用户导出;
expdp user/passwd@orcl schemas=user dumpfile=expdp.dmp directory=data_dir logfile=expdp.log;
第三种:按表空间导出;
expdp sys/passwd@orcl tablespace=tbs1,tbs2 dumpfile=expdp.dmp directory=data_dir logfile=expdp.log;
第四种:导出表;
expdp user/passwd@orcl tables=table1,table2 dumpfile=expdp.dmp directory=data_dir logfile=expdp.log;
第五种:按查询条件导;
expdp user/passwd@orcl tables=table1='where number=1234' dumpfile=expdp.dmp directory=data_dir logfile=expdp.log;
九、普通dmp导入导出数据
按条件导出:
exp szsfy/szsfy_Dpxq_1118@10.190.66.112:1521/TBSSZJW file = e:\jw_pay_bak_2017.dmp tables=(jw_pay_bak_2021) query = \"where pay_date like '2017'\"
exp jrqf_test/jrqf_test@192.168.0.57:1535/szorcl file=c:\fp.dmp statistics=none TABLES=(T_JRQF_FP)
通过表空间导入:
imp jrqf_test/jrqf_test@192.168.0.57:1535/szorcl file=d:\ljrqf_test.dmp full=y
imp LGQ_SFJD/LGQ_SFJD@10.101.21.187:1521/helowin file=E:\szsfy.dmp owner=TBS_SZJW
十、ETL工具-Kettle Spoon教程:
十一、eclispe pox文件第一行报错:
解决方法是:help–>install new software, 然后add,添加如下链接,
http://repo1.maven.org/maven2/.m2e/connectors/m2eclipse-mavenarchiver/0.17.2/N/LATEST/
一直下一步就可以,后面提示重启eclipse,然后重启eclipse后,右击项目,点击maven–>update project, 错误就没了
十二、svn,报:svn: Directory is out of date Item is out of date 错误最简单的解决方法
选择父工程(如果 是单项目就选择单项目),右击—》Team –>update to Version….
去掉 update to HEAD revision 的选项(其实也可以不用做这一步,因为默认就是最新的版本号)
点击显示日志,选中第一行,点击ok
十三、plsql:提交按钮没有变灰的问题:
1、工具->首选项->窗口类型->sql窗口中复选框自动提交选中(autocommitSQL)
2、工具--首选项---用户界面---选项---DSA对话框---内容如下(取消勾选确认提交与回滚)
SQL Developer 一些常用配置
十四、聚合函数(不使用)
https://www.juhe.cn/login
15878924394
ycc356720
十五、获取指定年份到指定年份的所有月份
SELECT TO_CHAR(ADD_MONTHS(TO_DATE('1900-01', 'yyyy-MM'), ROWNUM - 1),
'yyyy-MM') as monthlist,TO_CHAR(ADD_MONTHS(TO_DATE('1900-01', 'yyyy-MM'), ROWNUM-2),
'yyyy-MM') as monthlist2
FROM DUAL
CONNECT BY ROWNUM <=
months_between(to_date('2020-12', 'yyyy-MM'),
to_date('1900-01', 'yyyy-MM')) + 1
十六、查询回收站内容
select * from user_recyclebin;
--恢复表
flashback table 要恢复的表名 to before drop;
--从回收站恢复时重命名表(把表A重新恢复命名为表B)
flashback table 表A to before drop rename to 表B;
--删除回收站指定的表
purge table 表名;
--清空你的回收站。注意操作,不要轻易清空
purge recyclebin;
--删除你的表且不再回收站中留下任何痕迹
drop table 表名 purge;
-误删除表中数据的恢复方法
--查询删除的数据
select * from 表名 as of timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss')
--把删除的数据重新插入原表:
insert into 表名 (select * from 表名 as of timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss'));
--开启行移动功能
alter table 表名 enable row movement
--恢复表数据
flashback table 表名 to timestamp to_timestamp(删除时间点','yyyy-mm-dd hh24:mi:ss')
--关闭行移动功能 ( 千万别忘记 )
alter table 表名 disable row movement
十七、plsql查询所有用户基本操作
select * from all_tab_comments -- 查询所有用户的表,视图等。
select * from user_tab_comments -- 查询本用户的表,视图等。
select * from all_col_comments --查询所有用户的表的列名和注释。
select * from user_col_comments -- 查询本用户的表的列名和注释。
select * from all_tab_columns --查询所有用户的表的列名等信息。
select * from user_tab_columns --查询本用户的表的列名等信息
十八、NVL函数的使用
--NVL(expr1,expr2),第一个参数为空那么显示第二个参数的值
--NVL2(expr1,expr2, expr3),第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第三个参数的值
--NULLIF(exp1,expr2)函数的作用是如果exp1和exp2相等则返回空(NULL),否则返回第一个值
十九、数据库操作、表空间、用户等
1、查看表空间路径
select * from dba_data_files;
2、创建表空间
create tablespace QYDJ datafile 'D:\INSTALLATIONDIRECTORY\ORADATA\ORCL\QYDJ.DBF' size 5000m;
3、设置表空间自动增长
alter database datafile 'D:\INSTALLATIONDIRECTORY\ORADATA\ORCL\QYDJ.DBF' autoextend on;
4、增加表空间文件
Alter database user add datafile 'E:\ora_data\tablespaces\KKX_GD1.ora'
SIZE 5M autoextend on next 64m maxsize unlimited extent management local uniformsize 256K
5、修改表空间大小
Alter database datafile 'E:\ora_data\tablespaces\KKX_GD1.ora' resize 100m;
6、 数据库表、表空间和授权
创建用户:create user ps_ztb_tm identified by ps_ztb_tm default tablespace PS_ZTB;
给用户授予表空间:grant dba to ps_ztb_tm;
修改用户的表空间:alter user ps_ztb_tm quota unlimited on PS_ZTB;
--数据库开发用户系统权限表
grant CREATE CLUSTER
grant DROP CLUSTER
grant CREATE PROCEDURE
grant DROP PROCEDURE
grant CREATE DATABASE LINK
grant CREATE SYSNONYM
grant DROP SYNONYM
grant CREATE SEQUENCE
grant CREATE SNAPSHOTP
grant CREATE TABLE
grant CREATE VIEW
grant CREATE TYPE
grant CREATE LIBRARY
grant SELECT ANY TABLE to sz_sjzx; 授予查询其他用户表的权限
二十、视图、固化视图
视图:
Create or replace view view_name as
Select * from table_name
Where ………;
固化视图:
CREATE MATERIALIZED VIEW PW_EIP_TODOTASK
REFRESH COMPLETE ON DEMAND
AS
select ..... from tab_name
where .......;
二十一、Dblink(垮裤查询)
Drop database link sjzx_sfy;
create database link sjzxdblink
connect to zx_busi identified by zx_busi
using '10.253.203.53:8521/RACDBPDB'
二十二、函数
create or replace function func_name(变量名 in 类型,………..) return 返回的类型
is
变量 变量类型;
………………
Begin
--------处理主体部分
Return值(与返回的类型一样)
end func_name;
删除用户:drop user zhangsan
去除权限:revoke connect from zhangsan
修改用户密码:alter user zhangsan identified by newpassword
锁定用户:alter user zhangsan account lock
追加列:alter table student add(sex varchar(5))
修改列:alter table student modify(sname varchar(15))
删除列:alter table student drop column sex
修改列名:alter table student rename column sex to gender
修改表名:rename student to students
删除表:drop table student
二十三、备份表:
Crete table 表名 As Select * from 表名,创建一个表,并将查询出来的数据插入到新的表中
二十四、创建索引
create index ename_index on emp(ename)
--删除索引
drop index ename_index
二十五、去掉左边,右边,两边的空格
select
LTRIM(' Hello Gail Seymour!'),
RTRIM('Hi Doreen Oakley!abcabc','abc'),
TRIM('0' from '000Hey Steve Button!00000')
from dual;
常用函数:
1、表示统计10年,开始时间为2020年,每往后一年,则加一
connect by:来实现树状查询
level:伪列来实现分层查询(例如:1,2,3,4,5,6),取左侧两位,没有补0
lpad:从左边对字符串使用指定的字符进行填充
//获取年份
select to_char(sysdate, 'yyyy') - level years from dual connect by level <= 10
//查询层级
SELECT zdbm FROM ZX_QYDJ_REF_CS6 t where 1=1 start with t.ZDBM = enlist2.zdbm connect by prior t.ZDBM = t.parentbm
//统计当前年的所有月份
select newdate.years || '-' || lpad(level, 2, 0) datevalue from dual connect by level < 13
2、计算两个日期之间的月数和年数
round(months_between(sysdate,t.clrq)/12,2)
3、用pivot函数进行行转列。其中用聚合函数对数据列进行求值,将th列中的值’COL_1‘,’COL_2‘,‘COL_3’转化为列名,并为其加上别名。
select * from zx_qydj_mcdjxx pivot (sum(mcywlx) for mccxqk in ('001' as 第一列,'001150'as 第二列 ,'001151048' as 第三列));
select * from zx_qydj_mcdjxx pivot (sum(mcywlx) for mccxqk in ('001' as 第一列,'001150'as 第二列 ,'001151048' as 第三列)) unpivot ( aa for bb in(第一列,第二列,第三列));
4、把一列的值合并为一个值,用逗号隔开
select djjg,wm_concat(to_char(mclx)) from zx_qydj_mcdjxx GROUP BY djjg;//所有版本可用
select djjg,ListAgg(to_char(mclx),',') WITHIN GROUP(ORDER BY djjg) AS xCity from zx_qydj_mcdjxx GROUP BY djjg;//11g可用·
二十六、常用函数
--wm_concat(列名),该函数可以把列值以","号分隔起来,并显示成一行
--decode(en_code1,'136','a','241','b'), 就是给字符表示的汉字意思显示出来
--select t.*,rownum from jw_gwk_gr_20200309 t where rownum <3,表示取前几条数据
二十七、plsql安装配置:
环境变量配置
1) 变量名:ORACLE_HOME 变量值:E:\tool_01\PLSQL Developer\instantclient_11_2
2) 变量名:TNS_ADMIN 变量值:E:\tool_01\PLSQL Developer\instantclient_11_2
3) 变量名:NLS_LANG 变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
4) 修改Path变量,在后面添加 E:\tool_01\PLSQL Developer\instantclient_11_2
配置oracle监听文件
找到E:\PLSQLDeveloper\PLSQL\instantclient_11_2路径下的tnsnames.ora文件,用编辑器打开(记事本也可以)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.57)(PORT = 1535))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = szorcl)
)
)
启动plsql,进行相关配置:
点击工具-》首选项,如下图所示。
Oracle主目录名:E:\tool_01\PLSQL Developer\instantclient_11_2
OCI库:E:\tool_01\PLSQL Developer\instantclient_11_2\oci.dll
保存密码:
重新启动进可以了
二十八、代码编写规范
1、设置注释模板的:Window --> Preference --> Java->Code Style --> Code Template
类型(Types)注释标签(类的注释):controller层的设置:
/**
* @ClassName: ${type_name}
* @Description: ${todo}(这里用一句话描述这个类的作用)
* @author ${user}
* @date ${date} ${time}
* @update ${date}
* @version V1.0
* ${tags}
*/
文件(Files)注释标签:
/**
* @Title: ${file_name}
* @Package ${package_name}
* @Description: ${todo}(用一句话描述该文件做什么)
* @author ${user}
* @date ${date}
* @version V1.0
*/
字段(Fields)注释标签:
/**
* @Fields field:field:{todo}(用一句话描述这个变量表示什么)
* @author ${user}
* @date ${date} ${time}
* @update ${date}
* @version V1.0
*/
构造函数(Constructor)标签:
/**
* 创建一个新的实例 ${enclosing_type}
* @author ${user}
* @date ${date} ${time}
* @update ${date}
* @version V1.0
* ${tags}
*/
方法(Methods)标签
/**
* @Title: ${enclosing_method}
* @Description: ${todo}(这里用一句话描述这个方法的作用)
* @param ${tags} 参数
* @return ${return_type} 返回类型
* @throws
*/
覆盖方法(Overriding Methods)标签:
/* (非 Javadoc)
* <p>Title: ${enclosing_method}</p>
* <p>Description: </p>
* @author ${user}
* @date ${date} ${time}
* @update ${date}
* @version V1.0
* ${tags}
* ${see_to_overridden}
*/
代理方法(Delegate Methods)标签:
/**
* ${tags}
* ${see_to_target}
* @author ${user}
* @date ${date} ${time}
* @update ${date}
* @version V1.0
*/
getter方法标签:
/**
* @author ${user}
* @date ${date} ${time}
* @update ${date}
* @version V1.0
* @return ${bare_field_name}
*/
setter方法标签:
/**
* @author ${user}
* @date ${date} ${time}
* @update ${date}
* @version V1.0
* @param paramtheparamthe{bare_field_name} to set
*/
2、命名规范化
java类名要驼峰式命名,并且命名英文化简称化,不允许存在数字或者其他字符
java方法名要驼峰式命名,并且命名英文化简称化,不允许存在数字或者其他字符
3、所有项目使用swagger进行在线文档编辑,传参和接参要规范
4、代码与注释比例:4/1
5、方法返回结果:
Success:true/false
Msg:提示具体原因
6、公共方法写在公共类中,避免数据冗余
7、项目要有层级,按照相同模块,放到同一个包下
8、同一个项目避免多种写法