210407:返回/携带cookies信息的get接口开发--SpringBoot设置cookie存留时间-Java分批下载大文件-Oracle中两条记录合并为一条记录-SQL中使用to_char报错

一. SpringBoot(返回cookies信息的get接口开发)

1. 新建main方法

在java文件夹下,新建一个Application类

建立一个main方法,用于接口方法的执行

@SpringBootApplication
@ComponentScan("com.course.server")   //com.course.server是要执行的包名
public class Application {
    public static void main(String[] args){
        SpringApplication.run(Application.class,args);
    }
}

2. 新建接口

java目录下,新建一个package,包名com.course.server(与步骤1中代码注释部分保持一致),然后在包下新建一个类 MyGetMethod

编辑get接口 /getcookies

@RestController
public class MyGetMethod {

    @RequestMapping(value = "/getcookies",method = RequestMethod.GET)
    public String getCookies(HttpServletResponse response){
        //HttpServerletRequest  装请求信息的类
        //HttpServerletResponse  装相应信息的类
        Cookie cookie = new Cookie("login","true");
        response.addCookie(cookie);
        return "恭喜获得cookies信息成功";
    }
}

然后访问/getcookies接口,理论上会返回一段{“login”:“true”}的cookie信息和"恭喜获得cookies信息成功"的文本信息
然后浏览器直接访问:http://localhost:9527/getcookies,可以看到接口调用成功,并且cookie中能看到login=true

二. SpringBoot(携带cookies信息访问的get接口开发)

基础配置已在上篇文章中进行了详细描述,本篇不做过多叙述,以下代码直接贴在MyGetMethod文件中
RequestMapping部分保持不变
for (Cookie cookie:cookies)内的部分,对取到的cookies信息做校验

@RequestMapping(value = "/getwithcookies",method = RequestMethod.GET)
    public String getWithCookies(HttpServletRequest request){

        Cookie[] cookies = request.getCookies();
        if (Objects.isNull(cookies)){
            return "cookies信息为null";
        }
        for (Cookie cookie:cookies){
            if (cookie.getName().equals("login")&&cookie.getValue().equals("true")){
                return "访问/getwithcookies接口成功";
            }
        }
        return "cookies信息错误";
    }

Rerun Application文件,然后使用postman访问localhost:9527/getwithcookies接口
如果未携带cookies,会返回“cookies信息为null”

如果cookies信息与预期值不同,会返回“cookies信息错误”

如果cookies信息与预期值一致,会返回访问/getwithcookies接口成功

三. SpringBoot中设置cookie存留时间

server.servlet.session.cookie.max-age=3600

四. Java分批下载大文件

import java.util.* ;
import java.io.* ;
public class Demo {
    public static void main(String args[]) throws Exception{
        int i ;
        byte[] b = new byte[1024*1024];
        File file = new File("mysql-5.7.28-winx64.zip");
        System.out.println(file.length());
        // FileInputStream f = new FileInputStream(file);
        // FileOutputStream o = new FileOutputStream("b.zip");
        // while( (i = f.read(b)) != -1 ) {
            // o.write(b,0,i);
        // }        
            
    }
    
}

五. Oracle中两条记录合并为一条记录

需求:一篇文章会发布到多个栏目下,一个栏目是一条记录,所以同一个文章有多个栏目只有栏目字段值不一样,要用|让栏目合并到一起作为一条记录展示

1. 聚合函数LISTAGG

LISTAGG(列名,'分割符号')

oracle 11g 以上的版本才有的一个将指定列名的多行查询结果,用 指定的分割符号 合并成一行显示:

例如:

表原始数据:

需求:mb1_Transport_License_list 表中的数据,根据 transportation_license_id 数据进行分组,对 Item_Category_Name列的数据进行 去重合并

SELECT transportation_license_id,
     LISTAGG( to_char(Item_Category_Name), ',') WITHIN GROUP(ORDER BY Item_Category_Name) AS employees
      FROM ( select distinct transportation_license_id, item_category_name from mb1_Transport_License_list  ) group by transportation_license_id

SQL解析:

select distinct transportation_license_id, item_category_name from mb1_Transport_Lincense_list

-- 对需要做合并处理的数据源数据进行去重处理,如果实际要求不需要去重处理,这里可以直接改为 表名,如下去查询:

from mb1_Transport_Lincense_list
LISTAGG( to_char(Item_Category_Name), ',') WITHIN GROUP(ORDER BY Item_Category_Name)

将 Item_Category_Name 列的内容以,进行分割合并、排序;

to_char(Item_Category_Name) -- to_char(列名) 解决使用聚合函数 LISTAGG 进行查询后,对查询结果乱码问题进行转码处理;

运行后的结果:

我在森林消防网站中使用的

SELECT 
    DISTINCT    A.ID,A.lm lmmc,TO_CHAR(SUBSTR(b.wznr,1,2000)) wznr,b.fbrmc,b.fbdwmc,to_char(b.fbsj,'yyyy-MM-dd  HH:mm:ss') fbsj,b.WZLX,b.WZZT,b.zdmc,b.CREATE_USER create_user, 
    b.CREATE_DEPT create_dept,b.sbm_code,b.SPRXM,b.FBT,b.STATE,b.SYR,b.LXDH,b.TGR,b.TGDW,b.RC,b.URL,b.TJSPSJ,b.spsj,b.CREATE_TIME create_time,b.UPDATE_DEPT,    
    b.UPDATE_TIME,b.UPDATE_USER,b.DELETE_DEPT,b.DELETE_TIME,b.DELETE_USER,b.IS_DELETE
FROM
    (
        SELECT
            ERT. ID ID,LISTAGG (TO_CHAR(men.mc), '|') WITHIN GROUP (ORDER BY men.mc) lm
        FROM
            T_SLXF_ERTICLE ert
        LEFT JOIN T_SLXF_ARTICRELEASE art ON ERT."ID" = ART.WZ_ID and art.is_delete = '0'
        LEFT JOIN T_SLXF_MENU men ON art.lm_id = men. ID
        WHERE
            ert.is_delete = '0'
        GROUP BY
            ert. ID
    ) A
LEFT JOIN (
    SELECT
        sit.zdmc,ert.*
    FROM
        T_SLXF_ERTICLE ert
    LEFT JOIN T_SLXF_ARTICRELEASE art ON ERT."ID" = ART.WZ_ID and art.is_delete = '0'
    LEFT JOIN T_SLXF_MENU men ON art.lm_id = men. ID
    LEFT JOIN T_SLXF_SITEINFO sit ON art.zd_id = sit. ID
) b ON A . ID = b. ID

六. SQL中使用to_char报错

信息:ORA-22835:缓冲区对于CLOB到CHAR转换而言太小

1. 错误发生场景

在对视图中的CLOB进行to_char处理后,在CLOB字段录入字段信息小于4000字符时,查询正常,但当录入字符大于4000字符时,就会该错误。

错误提示:ORA-22835:缓冲区对于CLOB到CHAR转换或BLOB到RAWZ转换而言太小。

2. 原因分析

在对CLOB进行的TO_CHAR处理,可以理解为将CLOB中存储的信息转换成varchar2,然后在进行展现,大家都知道对于varchar2来言,最多存储4000个字符,当超出4000字符时,就报错了。

错误的大致意思就是超出了varchar2的缓冲大小。

3. 解决方案

对CLOB字段进行截取,使其在TO_CHAR之前获取的数据小于4000字符,这样在进行TO_CHAR时就不会报错了。

截取SQL如下:SUBSTR(column,1,4000)

需要注意一点,如果是大字段中存在汉字,则需要将汉字所占字节数考虑进入,如一个汉字占2个字节,实际截取字节数为2000。

截取SQL:SUBSTR(column,1,2000)。

对CLOB大字段处理的完整SQL如下:

TO_CHAR( SUBSTR(column,1,2000))  as column;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容