开发小技巧

1.Java逻辑层抛出异常如果用到回滚代码或者回滚的注解,都无法使用dbTwo


2.Vue的下拉框值与回显值不同,导致汉字回显失败时


2.Vue的number类型作为下拉框值时,需要回显汉字的时候要用=+赋值,可变number类型,回显成功,另外注意字段与传到前台字段的类型是否一致以及字段的位置是在this还是from(比如,当页面初始化时,this或者this.form下无该字段,会出现赋值成功但回显失败的情况)

目前有个更好的解决办法,就是在下拉框中用parseInt(item.id)或者String(item.id)具体看你是什么类型,后台接收的是int或者Integer就把前台值强制转int就行


3.时间格式 *如下代码


//时区日期格式转换(TZ) 例如2021-12-20T08:10:34.536Z
    changeDate(dateA) {
      var dateee = new Date(dateA).toJSON();
      var date = new Date(+new Date(dateee) + 8 * 3600 * 1000)
        .toISOString()
        .replace(/T/g, " ")
        .replace(/\.[\d]{3}Z/, "");
      return date;
    },

xml使用

to_date(#{TIME_BEGIN},'yyyy-mm-dd hh24:mi:ss')或to_date( '2022-04-30 00:00:00', 'yyyy-mm-dd' )

Vue el-date-picker组件回显使用

this.ACTIME = [this.changeDate(this.form.AC_BEGIN).substring(0,10),this.changeDate(this.form.AC_END).substring(0,10)];

4.mybatis创建oracle触发器时报错

①执行语句时数据库工具中就报ORA-24344: 成功, 但出现编译错误
②SQLException: 索引中丢失  IN 或 OUT 参数:: 1

①的解决方案:sql从头到尾查看,防止缺少,等
②的解决方案:在xml语句上使用select语句并在方法旁添加以下语句,可识别触发器中的 “ :NEW.

statementType="STATEMENT"

5.JDBC链接数据库时报错

在这里插入图片描述
使用select INSTANCE_NAME from v$instance;在库中查询对应sid是否正确
spring.datasource.primary.jdbcUrl = jdbc:oracle:thin:@IP地址:端口号:sid


6.Vue字符串转数组

直接spilt(“,”)即可,若无 ,则也可以自动识别转为数组形式


7.vue中使用自注册的TinymceEditor富文本组件时出现的问题

1.弹窗显示时,仅在第一次能显示文字,再打开就不回显了,但是右下角字数有(最终没能解决,采用新标签页式打开列表进行强制刷新页面,但调用下列方法不会白屏,不影响美观,比F5式刷新好用)

页面最上头来一个div 进行v-if局部强制刷新

<template>
  <div v-if="isRouterAlive">
    <page-main>
      <el-row>
data() {
    return {
      isRouterAlive: true
    };
  },
init(){
      this.isRouterAlive = false;
      this.$nextTick(function() {
        this.isRouterAlive = true;
      });
      this.getStdMrIcf();//查询方法
    }

2.富文本框内组件按钮点击后层级过低,无法覆盖在dialog上(将组件源码css文件z-index大小统一调大。参考链接:博客园-橘子king


8.oracle中需要添加或修改很长的字符串时,比如:html代码等


1.先声明一个变量(TYPE是定死的不要动,除了汉字部分需要改动,其他都是固定的)

DECLARE  clobValue 表名.字段名 %TYPE;BEGIN clobValue :='我是一个长字符串';

2.写入update语句(insert同理)

UPDATE 表名
     SET 
         字段名 = clobValue
   WHERE ID = 表id;

3.提交并结束语句

  COMMIT;
END;

9.vue 穿梭框回显问题


有时候直接对绑定v-model的值赋值后,不回显
首先检查是否为 正确的数组类型以及是否正确赋值
然后尝试在赋值前先将 数组清空

 <transfer
   :titles="['待选机构', '已选机构']"
   v-model="tmLinks"
   :data="List"
   @mouseover.native="addTitle"
>
</transfer>
        
this.tmLinks = [];
for (let index = 0; index < res.length; index++) {
  this.tmLinks[index] = res[index].CODE_ +'-'+ res[index].NAME_;
}

10.layui请求后方法状态为:canceled

由于ajax启用的异步模式 所以方法在执行的时候不会等待ajax请求方法执行完再进行重载。
请求体这样写,去除异步模式

 $.ajax({
                url: 地址,
                type: 'post',
                async: false,//去除异步

11.Java添加多条记录时id重复问题 采用同步锁定

/**
  * 同步锁定,同一时间多个访问时,会对后面的访问进行堵塞,防止id重复
  */
synchronized (idSql) {
  /**
	* 调用id查询 执行idsql这个语句查max(id)+1
	*/
	
   /**
     * 调用添加方法
     */
   insertXXX = XXX(X);
}

12.Java+layui 报解析异常(Could not parse as expression)

js哪里改成
<script th:inline="none">
取消内联样式


13.Oracle排序倒序时,空值在最上方的解决办法

sql修改如下

SELECT 字段名,case when 字段名 is null then 0 else 1 end as is_null
order by is_null,字段名 

原理:通过case when进行判断,对空值进行识别成数字1,非空为1,然后进行排序,空值就会到最下面,排序的时候再加上对应字段名,就可以按照正常顺序倒序


14.mysql时间差计算

例:SELECT TIMESTAMPDIFF(MONTH,‘2009-10-01’,‘2009-09-01’);
结果为-1
interval可是:
SECOND 秒 SECONDS
MINUTE 分钟 MINUTES
HOUR 时间 HOURS
DAY 天 DAYS
MONTH 月 MONTHS
YEAR 年 YEARS


15.mysql 查询结果为null 或 空字符串时,返回指定字符串

SELECT IF ( ifnull( 字段, ‘’ ) = ‘’, ‘返回的字符串’, 字段) AS 别名(或者不要也可以) FROM table


16.js 图片转base64

function fileToBase64(file){   //file转bse64
            let reader = new FileReader();
            reader.readAsDataURL(file);
            reader.onload = function (e) {
                return e.target.result
            }
        }

17.页面自动循环调用方法(vue、js通用)


直接写在script标签内即可,和方法同级。
js写法

setInterval(方法名, 10000); //指定每隔10秒刷新一次

vue写法

setInterval(this.方法名, 1000)//指定每隔1秒刷新一次

18.list.add时,所有数据被最后一个覆盖


对于List来说,如果T是引用类型,那保存的是引用,如果是值类型,保存的是值本身
故在循环中,使用

//放到for循环里面
Map<String,String> map = new HashMap<String,String>();

19.数据库精度设置

SELECT `CAST(pdsl AS DECIMAL(18,2))` pdsl from kcb_pdjlmx

使用CAST函数,然后将数字转为DECIMAL类型,该类型不会损失精度,18代表长度18位,能够适配大小各种数据,2代表保留小数点后位数2位


20.vue 表格行内容赋值弹窗后导致弹窗内容改动,表格也改动

  1. es6解构赋值写法(把复杂类型的对象里的属性是简单类型的 一个个复制属性过去)如果对象里只有简单类型 没有复杂类型用解构赋值即可。this.current = {...row};
  2. 把复杂类型先转成字符串 字符串复制没有引用问题 然后再转过来(深度克隆,把值复制过去 不复制引用,相当于拷贝一份一样的值 但是值没联系)this.current =-JSON. parse(JSON.stringify(row));

第一种基本的都可以使用了,比较复杂的使用第二种,拷贝转换一下。
适用于编辑页面的传值,直接在父页面调用的时候使用就可以。
使用中发现如果在第一个子组件的mounted处写会造成变量丢失,而后面的子组件不受影响,猜测是后面子组件点击时刷新缓存了可以跟上数据,而第一个可能是因为没缓存完毕,具体原因不明,等找到原因后补充。


21.数据库添加、修改时数据存在汉字报错


错误内容:

java.sql.SQLException: Incorrect string value: ‘\xE6\x97\xBA\xE4\xBB\x94’ for column ‘bce_inspectors’ at row 1

解决办法:ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8mb4;


22.Sql server数据库执行超过100MB的文件提示内存不足


亲测400Msql文件10多分钟跑完
解决办法:

进入sql所在文件夹,打开cmd,执行如下语句
osql -S "127.0.0.1" -U "sa" -P "sa" -i 1.sql
在这里插入图片描述


23.JavaScript 对键值对数组进行操作

Object.keys(color).forEach(function(key){
     console.log(key);//循环key
     console.log(obj[key]);//循环对应key值的value
});


24.数据库按照1、2、3、4排序


一般数据库排序都是1、11、2、3这样排序,而非正常排序
使用如下语句正常排序: order by (case when evaluation_Id >= '1' and evaluation_Id < '9999999' then 1 else 2 end) ASC


25.移动端请求接口


后台作为Java的话需要带上 'Content-type':'application/x-www-form-urlencoded'的请求头。
此处以若依框架作为例子,其他框架同样

在这里插入图片描述


26.windows 下cmd 重启mysql


关闭 net stop mysql
启动 net start mysql


27.Java split 根据多字符截取

str.split("[,\\_]");

28.Mysql 导入文件过大时


报错信息 : 1153 - Got a packet bigger than 'max_allowed_packet' bytes

set global max_allowed_packet=524288000;

29.Vue ele-pro-table 清空数据

<ele-pro-table ref="table" ………> ……</ele-pro-table>
/**
 * 表格数据清空
 */
this.$refs.table.data = [];

30.IDEA 自动整理代码


在大多数集成开发环境(IDE)中,可以使用以下快捷键来自动整理代码:

Windows / Linux: Ctrl + Alt + L
macOS: Cmd + Option + L
这些快捷键可以根据不同的IDE进行修改。以下是常见的IDE中修改自动整理代码快捷键的方法:

IntelliJ IDEA:

打开 “Settings”(Windows / Linux)或 “Preferences”(macOS);
在左侧面板中找到"Keymap";
在搜索栏中输入 “Reformat Code”;
右键单击 “Reformat Code” 并选择 “Add Keyboard Shortcut”;
按下你想要的新快捷键组合,然后点击 “OK”。

Eclipse:

打开 “Window” 菜单,选择 “Preferences”;
在左侧面板中找到 “General” -> “Keys”;
在搜索栏中输入 “Format”;
找到 “Format” 或 “Source -> Format”;
在下方的 “Binding” 输入框中,点击并输入你想要的新快捷键组合;
点击 “Apply” 或 “OK”。

30.Vue 数组倒序

slice()方法用于从数组中提取一个新的数组,并返回该新数组。
reverse()方法用于反转数组中的元素。

this.list.slice().reverse()

31. Maven 报错

1、删除~/.m2/repository/对应目录或目录下的*.lastUpdated文件,然后再次运行maven命令

或者

2、修改maven 仓库下的_remote.repositories 中改为 central

例如:
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Tue Apr 27 23:51:14 CST 2021
sqljdbc4.jar>central=
sqljdbc4-4.0.pom>central=

32. Oracle 查询实例名


查询实例名: select instance_name from v$instance;

33. Sql Server查询自增 (实现oracle的rownum)


查询实例名: select ROW_NUMBER()OVER(ORDER BY 任意一个可以排序的字段 DESC) as id,* from 表名;

34. Mysql 数字相减所得值错误


使用 REPLACE函数去掉数字中的 ,,例如: REPLACE ( 字段名1 ',', '' ) - REPLACE ( 字段名2 ',', '' )

35. Mysql 带序号

SELECT
	id,userid,subject,score, (@i :=@i + 1) AS '序号'
FROM
	tb_score,
	(SELECT @i := 0) AS itable;

36. Vue select标签选中后不生效


加上选中事件即可

@change="chooseDTChange"
chooseDTChange(){
	this.$forceUpdate()
}

37. Sqlserver 报错 create connection SQLException, url: jdbc:sqlserver://xxxx:1433;DatabaseName=chisdb_fkyy;encrypt=true;trustServerCertificate=true, errorCode 0, state 08S01


com.microsoft.sqlserver.jdbc.SQLServerException:驱动程序无法使用安全套接字层(SSL)加密建立到SQL Server的安全连接。错误:“客户端首选项[TLS12]不接受服务器选择的协议版本TLS10”。

1.进入jdk安装路径,例如:C:\Program Files\Java\jdk-16.0.1\conf\security\java.security 或者 jdk和jre目录下直接搜索java.security修改即可,jdk改完不行接着改jre
2.修改jdk.tls.disabledAlgorithms=附近的值

jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA,
DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL,
include jdk.disabled.namedCurves

这三行前面加#注释起来就行

35. Oracle count(1) 无数据时返回空

使用nvl函数判断

select nvl( (select count(1) from xxx),0) form dual

36. vue 数组 filter 筛选

会返回数组结果

data.filter((item) => item.字段名 === '值');

37. Java监听器或其他组件类中引用mapper或工具类报空指针

1、

    @Autowired
    public XxxCommon xxxControlCommon= new XxxControlCommon();

2、

    private static MrInErrorMapper mrInErrorMapper;

    @Autowired
    public void setMrInErrorMapper(MrInErrorMapper mrInErrorMapper) {
        QualityControlCommon.mrInErrorMapper = mrInErrorMapper;
    }

@[TOC](38. Cause: java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK)
pom中添加orai18n即可

    <!--oracle-->
        <dependency>
            <groupId>com.oracle.ojdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--        兼容orcale字段-->
        <dependency>
            <groupId>cn.easyproject</groupId>
            <artifactId>orai18n</artifactId>
            <version>12.1.0.2.0</version>
        </dependency>

39. MySql 报错 sql_mode=only_full_group_by


执行如下语句:

  • 查看sql_mode
select @@global.sql_mode;

1. 直接从sql查询工具中修改处理。

如果里面包含 ONLY_FULL_GROUP_BY,那么就重新设置,在数据库中输入以下代码,去掉ONLY_FULL_GROUP_BY即可:

SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';

– 刷新后重新连接

flush privileges;

2. 从mysql配置文件中处理。
打开 MySQL 配置文件 my.cnf(windows为my.ini)。
添加或修改如下数据行

sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

重启mysqlservice mysqld restart

40. Windows终止端口进程

1、查询进程PID

netstat -ano | findstr "<port_number>"

2、终止端口

taskkill /F /PID <pid_number>

41. Windows CMD mysql命令


‌启动MySQL服务‌: net start mysql
‌停止MySQL服务‌: net stop mysql
‌重启MySQL服务‌: net restart mysql‌

42. Uniapp 双重循环提示:v-for 暂不支持循环数据


将原有的 @click="previewPdf(item)"改为 @click="()=>previewPdf(item)"即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程似锦吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值