Skip to main content

Postgresql_01 数据库简介

如果用开源的数据库,大家一定知道Mysql和Postgresql。今天因为业务需要,就安装了一把Postgresql数据库,就顺手整理下。

1.PostgreSQL

PostgreSQL是一个功能强大的开源数据库系统。经过长达15年以上的积极开发和不断改进,PostgreSQL已在可靠性、稳定性、数据一致性等获得了业内极高的声誉。目前PostgreSQL可以运行在所有主流操作系统上,包括Linux、Unix(AIX、BSD、HP-UX、SGI IRIX、Mac OS X、Solaris和Tru64)和Windows。PostgreSQL是完全的事务安全性数据库,完整地支持外键、联合、视图、触发器和存储过程(并支持多种语言开发存储过程)。它支持了大多数的SQL:2008标准的数据类型,包括整型、数值值、布尔型、字节型、字符型、日期型、时间间隔型和时间型,它也支持存储二进制的大对像,包括图片、声音和视频。PostgreSQL对很多高级开发语言有原生的编程接口,如C/C++、Java、.Net、Perl、Python、Ruby、Tcl 和ODBC以及其他语言等,也包含各种文档。

大家也可以参考百度百科或者它的主页postgresql

总而言之:Postgresql是开源的关系型数据库,符合标准的sql规范,所以常见的sql语法和Mysql,Oracle都一样。

2.unbunt 安装

Linux 安装Postgresql很简单,直接用下边的命令就可以:

[code]
sudo apt-get update
sudo apt-get install postgresql postgresql-contrib

[/code]

安装成功后,切换到postgres用户,如果输入psql命令,能看到下边的提示,就说明成功了。
[code]
su postgres
psql
[/code]
20180903220026

3.创建用户

[code]
psql
create user db_user with password ‘password’;
create database commerceDB owner db_user ;
grant all privileges on database commerceDB to db_user ;
[/code]

下边是MySQL和postgresql的大概区别:
MySQL与PostgreSQL比较 哪个数据库更好

开源的组件,没有那个好不好,只有适合不适合自己的业务场景的区别。

如何在android虚拟机上执行java jar文件

大家都知道,andriod apk大部分代码都是java代码,但是apk并不是运行在java虚拟机,而是运行在DVM上,而且编译好的java 代码也不能直接运行在DVM上。接下来就简单说下怎么运行jar在andriod手机上。

1.DVM & JVM

Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为.dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统.

Java虚拟机,大家可以google,很多详细的资料。

2.如何在andriod手机上运行jar

# 编辑java源文件
javac -cp src -d build src/Hello.java

# 在jvm上测试
java -cp build Hello

#通过dx工具把java class转化为dex文件
dx –dex –output=hello.jar Hello.class
cd ..

# 在andriod虚拟机上执行
dalvikvm -cp build/hello.jar Hello

Linux 命令_05-gzip/gunzip

gunzip命令用来解压缩文件。gunzip是个使用广泛的解压缩程序,它用于解开被gzip压缩过的文件,这些压缩文件预设最后的扩展名为.gz。事实上gunzip就是gzip的硬连接,因此不论是压缩或解压缩,都可通过gzip指令单独完成。

参数

-a或——ascii:使用ASCII文字模式;
-c或–stdout或–to-stdout:把解压后的文件输出到标准输出设备;
-f或-force:强行解开压缩文件,不理会文件名称或硬连接是否存在以及该文件是否为符号连接;
-h或——help:在线帮助;
-l或——list:列出压缩文件的相关信息;
-L或——license:显示版本与版权信息;
-n或–no-name:解压缩时,若压缩文件内含有原来的文件名称及时间戳记,则将其忽略不予处理;
-N或——name:解压缩时,若压缩文件内含有原来的文件名称及时间戳记,则将其回存到解开的文件上;
-q或——quiet:不显示警告信息;
-r或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
-S或<压缩字尾字符串>或—-suffix<压缩字尾字符串>:更改压缩字尾字符串;
-t或——test:测试压缩文件是否正确无误;
-v或——verbose:显示指令执行过程;
-V或——version:显示版本信息;

gzip命令用来压缩文件。gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多处“.gz”扩展名。

gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。gzip不仅可以用来压缩大的、较少使用的文件以节省磁盘空间,还可以和tar命令一起构成Linux操作系统中比较流行的压缩文件格式。据统计,gzip命令对文本文件有60%~70%的压缩率。减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。

参数

-a或——ascii:使用ASCII文字模式;
-d或–decompress或—-uncompress:解开压缩文件;
-f或——force:强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接;
-h或——help:在线帮助;
-l或——list:列出压缩文件的相关信息;
-L或——license:显示版本与版权信息;
-n或–no-name:压缩文件时,不保存原来的文件名称及时间戳记;
-N或——name:压缩文件时,保存原来的文件名称及时间戳记;
-q或——quiet:不显示警告信息;
-r或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
-S或<压缩字尾字符串>或—-suffix<压缩字尾字符串>:更改压缩字尾字符串;
-t或——test:测试压缩文件是否正确无误;
-v或——verbose:显示指令执行过程;
-V或——version:显示版本信息;
–<压缩效率>:压缩效率是一个介于1~9的数值,预设值为“6”,指定愈大的数值,压缩效率就会愈高;
–best:此参数的效果和指定“-9”参数相同;
–fast:此参数的效果和指定“-1”参数相同。

如何快速地把页面另存为pdf

最近在设计企业风险报告的产品,我们就希望可以直接把页面保存为pdf文档,这样方便客户保存和分享。

常规的做法有以下几种:

1. 通过浏览器的打印,另存为pdf

这个方法,自己使用很方便,但是有个局限就是:不是所有的页面都能保存为pdf,尤其是动态的页面。具体怎么操作,可以baidu,很多这样的文章。

2. 装一个chrome 插件

https://chrome.google.com/webstore/detail/take-webpage-screenshots/mcbpblocgmgfnpjjppndjkmgjaogfceg
fireshot插件

这个插件可以很方便地截取整个页面或者你想选择的区域

3. 通过pdf库生成页面所有的组件

这个方法需要写很多代码,尤其如果页面有图表的时候,需要花很多的时间去维护和更新。

4. html2canvas

利用html2canvas库,可以很方便地把dom元素保存为base64编码的图片,在后台,利用pdf库把图片转化为pdf
优势:html2canvas可以把后台不容易处理的组件用图片来代替,后台可以专门处理常规的展示,比如表格,文字等等。

最后上代码:
html2canvas 代码
[code]
function exportAsPdf() {
console.log("export as pdf")
let imageBase64 = []
html2Canvas(document.querySelector("#fullPage")).then(canvas => {
let imgData = canvas.toDataURL(‘image/png’)
imageBase64.push(imgData)
}).then(event => {
dispatch({
type: "dashboard/exportAsPdf",
payload: {
name: dashboard.companylaw.name,
imageBase64: imageBase64,
}
})
});
};
[/code]

java生成pdf代码
[java]
private boolean generatePdf(String title, String[] imagesPath, File outputFile) {
try {
PDDocument doc = new PDDocument();
for (int i = 0; i < imagesPath.length; i++) {
String image = imagesPath[i];
File imageFile = new File(image);
if (!imageFile.exists()) {
log.warn("Image file:{} can’t be found", image);
continue;
}

BufferedImage bufferedImage = ImageIO.read(imageFile);
int width = PDF_PADDING * 2 + bufferedImage.getWidth();
int height = PDF_PADDING * 2 + bufferedImage.getHeight();
int imageY = 0;
if (i == 0) {
height += PDF_TITLE_HEIGHT;
imageY += PDF_TITLE_HEIGHT;
}

PDPage page = new PDPage(new PDRectangle(width, height));
PDPageContentStream contents = new PDPageContentStream(doc, page);

if (i == 0) {
InputStream inputStream = getClass().getClassLoader().getResourceAsStream("fonts/simhei.ttf");
PDFont formFont = PDType0Font.load(doc, inputStream);
contents.beginText();
contents.newLineAtOffset(15, height – imageY);
contents.setFont(formFont, 30);
contents.showText(title);
contents.endText();
}
PDImageXObject pdImage = PDImageXObject.createFromFileByContent(imageFile, doc);
contents.drawImage(pdImage, PDF_PADDING, PDF_PADDING);
contents.close();
doc.addPage(page);
}
doc.save(outputFile);
doc.close();
log.info("Generate pdf file:{}", outputFile);
return true;
} catch (Exception e) {
log.error(e.getMessage(), e);
}

return false;
}
[/java]

参考资源
html2canvas

Base64编码介绍

做web开发或者图片处理,经常会遇到Base64编码。到底什么是base64呢?

1.base64介绍

百度百科的介绍:Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。

什么是“可打印字符”呢?为什么要用它来传输8Bit字节码呢?在回答这两个问题之前我们有必要来思考一下什么情况下需要使用到Base64?Base64一般用于在HTTP协议下传输二进制数据,由于HTTP协议是文本协议,所以在HTTP协议下传输二进制数据需要将二进制数据转换为字符数据。然而直接转换是不行的。因为网络传输只能传输可打印字符。什么是可打印字符?在ASCII码中规定,0~31、128这33个字符属于控制字符,32~127这95个字符属于可打印字符,也就是说网络传输只能传输这95个字符,不在这个范围内的字符无法传输。那么该怎么才能传输其他字符呢?其中一种方式就是使用Base64编码二进制数据。

Base64,就是使用64个可打印字符来表示二进制数据的方法。Base64的索引与对应字符的关系如下表所示。
base64

也就是说,如果将索引转换为对应的二进制数据的话需要至多6个Bit。然而ASCII码需要8个Bit来表示,那么怎么使用6个Bit来表示8个Bit的数据呢?6个Bit当然不能存储8个Bit的数据,但是4*6个Bit可以存储3*8个Bit的数据啊!如下表所示:20180313131013494

所以,Base64编码会把3字节的二进制数据编码为4字节的文本数据,长度增加33%,好处是编码后的文本数据可以在邮件正文、网页等直接显示。
如果要编码的二进制数据不是3的倍数,最后会剩下1个或2个字节怎么办?Base64用\x00字节在末尾补足后,再在编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉。

其实base64编码就是一种常见的加密和解密方式。你可以自己设置Base128或者其他的编码格式,只要能保证HTTP传输和正确还原就可以工作。

2.Base64编码-Java代码

maven:
[code]
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
[/code]

[java]
–byte[] 转成base64的字符串
String encodedString = Base64.getEncoder().encodeToString(fileContent);
–base64的字符串转成byte[]
byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
[/java]

java-base64