【真的很羡慕那些五一放假可以出去玩的朋友
像我们这种一年四季随时可以出去玩的人,是根本没法体会那种激动的心情】
大家好,我录制的视频《Java之优雅编程之道》已经在CSDN学院发布了,有兴趣的同学可以购买观看,相信大家一定会收获到很多知识的。谢谢大家的支持……
视频地址:http://edu.csdn.net/lecturer/994
Intellij IDEA 控制台缓存区大小如何修改???
PostgreSql的唯一性索引引发的问题???
Base64图片编码转换问题???
postgresql数据库编码问题???
这2天工作中,碰到了4个问题,耗了好多时间,整理分享下。
一份 user.xls 文件,里面有1000条数据。通过自己写的代码,将这1万条数据生成 sql 语句,打印到控制台。 由于 Intellij IDEA 控制台默认的缓存区只有 1024 KB,超过大小限制的就会被清除,而且还会显示【too much output to process】
可通过如下配置界面进行修改Override console cycle buffer size(Settings→Editor→General→Console),单位为KB
完美解决……
数据库有一张表 NewTable
CREATE TABLE "public"."NewTable" (
"id" varchar(32) NOT NULL,
"name" varchar(100),
"code" varchar(100),
PRIMARY KEY ("id")
)
WITH (OIDS=FALSE)
;
//这里由于误操作,建立了一个唯一索引
CREATE UNIQUE INDEX "idx_code" ON "public"."NewTable" USING btree ("code");
在数据库客户端执行如下脚本:
//插入一条数据
INSERT INTO "public"."ay_test" ("id", "name", "code") VALUES ('1', '1', '1');
//插入一条数据,这里code和上一条数据code一样
INSERT INTO "public"."ay_test" ("id", "name", "code") VALUES ('2', '1', '1');
报错:
[SQL]INSERT INTO "public"."ay_test" ("id", "name", "code") VALUES ('2', '1', '1');
[Err] ERROR: duplicate key value violates unique constraint "idx_code"
DETAIL: Key (code)=(1) already exists.
解决方法也是比较简单的:
//删除索引
DROP INDEX "idx_code" ;
//创建索引(注意不是唯一索引)
CREATE INDEX "idx_code" ON "public"."ay_test" USING btree ("code");
//插入数据验证
INSERT INTO "public"."ay_test" ("id", "name", "code") VALUES ('3', '1', '1');
INSERT INTO "public"."ay_test" ("id", "name", "code") VALUES ('4', '1', '1');
当前只有B-tree索引才能使用唯一性索引,唯一性索引可以使单字段和多字段绑定在一个索引上。
当一个索引被定义为唯一性索引时,那么无论是单字段还是多字段的索引,其涉及到的字段在表中的值是不能重复的,类似于主键和联合主键的意思。需要注意的是 null 值是不相等的,即第一行某字段为null第二行该字段也为null,那么这两个字段值不相等。
由于公司手机APP端需要下载图片,要求后端返回的图片是经过Base64位编码过的字符串,中间也废了好多时间,特意整理下。
这里只贴出部分代码:
@Override
public String download(String id) throws Exception {
SysAttachment sysAttachment = (SysAttachment)sysAttachmentService.findById(id);
String name = sysAttachment.getName() + this.POINT + sysAttachment.getType();
String path = sysAttachment.getPath();
FileInputStream in = null;
byte[] b = null;
try {
File file = new File(path);
if (file.exists()) {
try {
//文件inputStream
in = new FileInputStream(path);
b = new byte[in.available()];
in.read(b);
} finally {
if (in != null) {
in.close();
in = null;
}
}
} else {
throw new ResourceNotFoundException("文件: \"" + name + "\"不存在!");
}
} catch (IOException var8) {
throw new SystemException(ErrorCode.Common.downloadFailed);
}
// 对字节数组Base64编码(这里是重点)
return Base64.encodeBase64String(b);
}
这里使用 Base64.encodeBase64String(b) 而不使用
BASE64Encoder encoder = new BASE64Encoder();
encoder.encode(data);//返回Base64编码过的字节数组字符串
因为根据RFC822规定,BASE64Encoder编码每76个字符,还需要加上一个回车换行
部分Base64编码的Java库还按照这个标准实行。
换用Apache的 commons-codec.jar, Base64.encodeBase64String(byte[])得到的编码字符串是不带换行符的。
执行数据库查询的时候,控制台出现如下错误:
Cause: org.postgresql.util.PSQLException: ERROR: character with byte sequence 0xc2 0xa0 in encoding "UTF8" has no equivalent in encoding "GBK"
原因是客户端字符集和插入内容的字符集不匹配。PostgreSQL默认不做字符集转换,如果数据库是UTF8的字符集,一般终端的中文字符集会设置为GBK(可以看LANG环境变量确认),所以这个编码不经转换的存入数据库中,而数据库是UTF8的,PostgreSQL发现不是UTF8编码,就报上面的错。
要想打开自动字符集转换功能,必须告诉 pg 客户端使用的字符集。这时可以设置pg客户端编码为GBK,pg就会自动做字符集转换。
来自《愤怒的葡萄》
【苍蝇发现自己模样很像蜜蜂,十分高兴,打算冒充蜜蜂去花丛里欺骗花的感情、盗取花蜜。可是它在花丛里飞来飞去不知飞了几个来回,却不见有一朵花向它绽放笑脸,他十分不解,转头问蜜蜂到底原因何在?蜜蜂笑着回答说:”你只是外形像我,事实上并不是我!因此,即使是一辈子蹲在花丛里,花也不会把你当成我!“
启示:外表可以相似,但内涵却是无法取代的。】
【披萨正确吃法】
【拿铁的正确喝法】
【1】Base64编码出现换行符
【2】postgresql—-唯一索引,表达式索引,部分索引
【3】invalid byte sequence for encoding “UTF8”: 0xe99d2c
如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎点赞、顶、欢迎留下宝贵的意见、多谢支持!