Other

Caused by: java.sql.SQLException: Parameter index out of range (2 > number of parameters, which i

问题分析: 今天在学习mybatis的时候遇到了这样的一个问题,很奇怪 Caused by: java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1) 报错部分大概的意思就是:参数指针指向的位置超出了范围,本来是一个参数,结果出现了两个以上 先来看一下代码部分 我是注释了一条代码之后才出现这个错误的 大部分博客都是说把注释部分删掉就可以了,确实可行,但这种做法很暴力,下次出现了还是不明白错在哪里 直到看到一位老哥的博客之后才恍然大悟,原来是注释部分出现了问题,mybatis仍旧会识别注释部分的#{id} 解决方案: 将注释部分以 <!-- 开头 -->结尾,使用这种注释方式是很安全的,至少不会报错 规范写法: <!-- 注释 -->  参考:https://blog.csdn.net/qq_42986107/article/details/100544120?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-3-100544120.pc_agg_new_rank&utm_term=mybatis%E4%B8%ADxml%E7%9A%84%E6%B3%A8%E9%87%8A&spm=1000.2123.3001.4430    

Linux基本常用命令

cd :切换目录 绝对路径和相对路径 绝对路径 Linux中一切皆文件,一切的文件都在 /(根)目录下 路径写法:由根目录写起 / 例如:/usr/local [root@LuoKing /]# ls #列出目录 bin dev home lib64 media opt root sbin sys usr boot etc lib lost+found mnt proc run srv tmp var [root@LuoKing /]# cd usr #相对路径写法 [root@LuoKing usr]# ls bin etc games include lib lib64 libexec local sbin share src tmp [root@LuoKing usr]# cd local #相对路径写法 [root@LuoKing local]# pwd /usr/local 相对路径 ../ : 上一级目录 [root@LuoKing /]# cd usr [root@LuoKing usr]# ls bin etc games include lib lib64 libexec local sbin share src tmp [root@LuoKing games]# cd .

shell编程—函数

1.什么是shell函数 shell函数的的本质是一段可以重复使用的代码,这段代码提前编写好了,放在了指定的位置,使用时直接调用即可。 2.语法格式 name() { commands [ return value ] } 或 function name() { commands [ return value ] } function:是shell中的关键字,专门用来定义函数,也可以不用,直接以函数名开始 name:函数名称 commands:是函数要执行的代码,也就是一组语句 return value :表示函数的返回值。其中return是shell的关键字,专门用在函数中返回一个值,这一部分可以写,也可以不写。 关于函数的几个命令 declare -f:显示定义的函数清单 declare -F显示定义的函数名称 unset -f:从shell内存中删除函数 exprot -f:将函数输出给shell 3.函数的使用 3.1、调用函数 调用函数的可以给它传递参数,也可以不给它传递参数。 如果不传递参数,直接给出函数名即可 name 如果传递参数,多个参数之间用空格隔开 name param1 param2 param3 比如 [root@yaoguang shell]# cat hanshu.sh #!/bin/bash hello() { echo hello world!,$1 } hello zhangsan hello lisi 执行结果 [root@yaoguang shell]# sh hanshu.sh hello world!

SQL查阅笔记——DDL

DDL——操作数据库 1.查询 show databases; 2.创建数据库 create database 数据库名称; 创建数据库(判断,如果不存在则创建) create database if not exists 数据库名称; 3.删除 删除数据库 drop database 数据库名称; 删除数据库(判断,如果存在则删除) drop database if exists 数据库名称; 4.使用数据库 查询当前使用的数据库 select database(); 使用数据库 use 数据库名称;

密码引擎Windows-2-Windows-OpenSSL测试

编译环境:VS2022 Windows下安装openssl: opessl安装包下载链接http://slproweb.com/products/Win32OpenSSL.html VS中新建openssl项目设置 打开VS2022 文件--新建--项目--空项目 新建Base64项目 添加源文件 链接openssl设置 在右侧的“搜索解决方案资源管理器”栏目中,项目名下,右键→属性→VC++目录处 “包含目录”处,添加openssl安装目录下的include文件夹 库目录处: 添加完如图 添加代码 #pragma comment(lib,libssl.lib) #pragma comment(lib,libcrypto.lib) 即可编译完成,说明openssl导入VS成功

共读《redis设计与实现》-数据结构篇

准备将之前攒下的书先看一遍,主要是有个大概的了解,以后用的时候也知道在哪里找。所以准备开几篇共读的帖子,激励自己多看一些书。 Redis 基于 简单动态字符串(SDS)、双端链表、字典、压缩列表、整数集合等基础的数据结构,创建了一个对象系统,这个对象系统包含:字符串对象(String)、列表对象(List)、集合对象(Set)、有序集合对象(Zset)、哈希对象(Hash) 5种数据对象类型。但是这5种对象类型,其内部的基础的存储结构 并不是 一对一的一种,而是每一种包含了至少两种数据结构。 我们这篇主要用来说一下其基础的存储结构 前提条件 redis 底层是使用C语言编写的,所以很多函数直接使用的C库。 一、SDS(简单动态字符串) 我们知道C语言中字符串 是以字符数组char[]进行存储的,字符串的结束是以 空字符‘/0’ 来进行标识的,也就是字符串的实际长度比我们看见的字符串都会多1 byte(字节)。 如果我们想要查看一下字符串的长度,那么就需要遍历一下字符数组,时间复杂度为O(n)。 1.1 结构说明: redis中使用结构体SDS用来存储字符串类型,同样的使用字符数组进行存储 也自带空字符‘/0’,从而可以使用C语言中字符串相关的特性/函数。 len:数组已用长度记录,就是说字符串的真实长度(不算‘/0’) free:数组中剩余可用长度,也就是数组中还有多少长度使用的。 1.2 内存预分配 我们从SDS结构图可以知道SDS中字符数组的长度是和字符串长度不一样的,那么这个长度是如何分配的? 首先如果是创建/扩展: 小于1M,分配的 未使用内存 是 使用内存的2倍 大于1M,那么 每次扩展未使用内存为 1M 如果是收缩: 并不会立即真正释放,会留下未使用的内存,可以通过Api来进行释放,从而避免内存泄漏。 1.3 二进制 由于C语言中字符串以 ‘/0’标识结尾,所以C语言中字符串不能存储 图片、音视频的二进制数据,但是redis 中字符串以len来做为结尾的判断,所以可以使用字符串来存储二进制的数据。 当然对于 文本类型的 本身结束就是‘/0’结尾的,所以我们可以直接使用C的字符串特性。 1.4 特性(总结): 自带空格,从而可以使用C语言字符串相关特性 存储 使用空间和未使用空间这样长度可以快速得出(时间复杂度O(1)),不用遍历数组(时间复杂度O(n)) 由2我们可以杜绝 C语言中缓存溢出的问题 节省了避免缓存溢出而带来 内存重分配的系统开销 空间预分配 扩展:小于1M 预分配未使用空间为 使用空间的2倍,大于1M,预分配未使用空间为1M; 收缩:惰性空间释放 可以存储图片和音视频二进制数据。 关于 C语言缓存溢出: 我们知道数组是一块内存挨着的存储空间,C语言中,如果我们直接对字符串增加,会有如下这种情况的发生: 现在给hello 尾部添加 “-wi” 字符串 字符串“hello”添加 -wi 字符串之后内存快照

mysql游标最后一行重复问题

今天用调用存储过程时发现数据有点问题,和预期不一致 经排查,发现是游标在遍历过程中重复遍历了,或者说是对游标下表的判断有Bug  调试后发现是游标使用方式不正确 应该在循环外先对游标进行一次取值操作,在循环内,每次主体逻辑执行完后再对游标进行取值 这样,对游标下标的判断逻辑才能正常发挥  我的问题代码结构: declare done int(9) default 0; declare csr cursor for select ...; declare continue handler for not found set done = 1; open csr; while (done = 0) do fetch csr into ...; -- 主体逻辑略 end while; close csr;  修改后代码: declare done int(9) default 0; declare csr cursor for select ...; declare continue handler for not found set done = 1; open csr; fetch csr into .

windows cmd命令 tree

tree 命令,可以把一个路径下的所有目录,按树形结构显示出来 TREE [drive:][path] [/F] [/A] eg:显示当前路径的目录结构: tree .   如果要把文件也显示出来,加/F参数就行了 tree . /F   TREE [drive:][path] [/F] [/A]  /A 参数,文档里说是以Ascii码显示,感觉没什么卵用。。。

oracle 存储过程调用 执行

SQL中调用存储过程语句: call procedure_name(); 调用时”()”是不可少的,无论是有参数还是无参数。 定义对数据库过程的调用时 无参数过程:{ call procedure_name} 仅有输入参数的过程:{call procedure_name(?,?...)} 这里?表示输入参数,创建存储过程时用in表示输入参数  仅有输出参数的过程:{ Call procedure_name(?,?...)} 这里的?表示输出参数,创建存储过程时用out表示输入参数  既有输入参数又有输出参数的过程 {call procedure_name(?,?...)} 这里的?有表示输出参数的,也有表示输入参数的 下面将会对这4种情况分别举出实例!!! 参数过程实例 无参数存储过程: create or replace procedure stu_proc as pname varchar2(25); begin  select sname into pname from student where sno=1;  dbms_output.put_line(pname); end; 或者 create or replace procedure stu_proc as pname student.sname%type; begin  select sname into p_name from student where sno=1;  dbms_output.put_line(pname); end; 参数过程实例 仅有输入参数的过程 create or replace procedure stu_proc1(pno in student.

shell条件判断 流程控制 与 循环语句

条件判断 1、语法格式  1、test 条件表达式  2、[ 条件表达式 ] ***中括号两边得有空格 有空值得加双引号否则会报错,[]里面不能加&& ||  3、[[ 条件表达式 ]] 支持正侧 = ~ ***中括号两边得有空格 可以有空值 里面可以用&& || 2、常用判断条件 为真则输出0假则输出1-e #判断文件是否存在(任何类型文件)(存在为真,不存在为假) [ -e ./app ];echo $? -f #判断文件是否存在并且是一个普通文件 [ -f ./stu ];echo $? -d #判断文件是否存在并且是一个目录 [ -d ./app ]; echo $? -L #判断文件是否存在并且是一个软连接文件 [ -L ./test ];echo $? -b #判断文件是否存在并且是一个设备文件 -S(大写S) #判断文件是否存在并且是一个套接字文件-s(小写s) #判断文件是否有内容(非空为真)! -s(小写) #判断文件是否无内容(空文件为真) -c #判断文件是否存在并且是一个字符设备文件 -p #判断文件是否存在并且是一个命名管道文件! #取反 用以以上条件的取反 文件权限相关判断 -r #当前用户对其是否可读 [ -r .