阿里图标库

iconfont 是阿里旗下的一个图标素材库,这个需要使用github账户,或者微博账户登录一下。这个图标库毕竟是国内的,国内的图标比较全。使用也很方便,下载图标的时候建议下载16x16的这样可以直接在文章中使用。
例如我这里下载了一个播放按钮的图标:

然后我重命名为play.png放在站点目录\source\images下。

这样就可以在文章中引入这个图标(图片)了。
可以使用markdown的图片语法:![](/images/play.png)引入
也可是使用img标签:<img src="/images/play.png" style="border:0px">引入
使用img标签的好处就是可以自定义样式,例如我这里设置不显示边框。而next主题中图片是会默认带边框的。

hexo next主题使用的图标库

https://fontawesome.com/icons?d=gallery这是一个源码在Github上的开源项目,提供绝大多数免费的icon供网页等应用。点击这个链接进入搜索界面进行搜索即可。next主题用的用的图标就是这个图标库里的。不过相较于阿里图标库,这个上面图标不是很全。

问题描述

写博客的时候经常需要在 站点目录 下打开 git-bash ,或者是 cmd 来运行 hexo ... 命令。我以前都是先运行 git-bash ,然后再cd到 站点目录 下,然后执行 hexo ... 命令。这样需要手动输入站点目录,一次这样还行,经常这样我也是挺烦的。

站点目录下快速打开cmd

下面来介绍在站点目录下快速打开程序的方法。

  • 先创建站点目录的快捷方式,这样以后就可以通过快捷方式快速的进入站点目录了
  • 快捷方式打开站点目录
  • 在站点目录地址栏中输入cmd按下回车,即可快速的在该目录下启动cmd:

在地址栏中输入cmd按下回车,即可快速的在该目录下启动cmd:

站点目录下快速打开git-bash

同样的,站点目录下,在文件资源浏览器地址栏中,输入 git-bash 即可快速启动 git-bash

导出数据库中的所有表

记下原来数据库的属性

导出原数据库中的全部

点击要导出的数据库–右键转储SQL文件

保存到本地中

导入数据库

参看文件中的信息

打开刚才导出的userinfo.sql文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/*
Navicat MySQL Data Transfer

Source Server : localhost_3306
Source Server Version : 50508
Source Host : localhost:3306
Source Database : usersinfo

Target Server Type : MYSQL
Target Server Version : 50508
File Encoding : 65001

Date: 2018-12-02 15:50:46
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `student`
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`学号` varchar(20) NOT NULL DEFAULT '',
`姓名` varchar(20) DEFAULT NULL,
`性别` varchar(20) DEFAULT NULL,
`专业` varchar(40) DEFAULT NULL,
`年级` varchar(20) DEFAULT NULL,
`出生` varchar(255) DEFAULT NULL,
`课程` varchar(255) DEFAULT NULL,
`成绩` double DEFAULT NULL,
PRIMARY KEY (`学号`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('H1000', '小王', '男', '软件工程', '大二', '1996', '高等数学', '100');
INSERT INTO `student` VALUES ('H1002', '小王', '男', '软件工程', '大三', '1996', '高等数学', '100');

-- ----------------------------
-- Procedure structure for `myproc`
-- ----------------------------
DROP PROCEDURE IF EXISTS `myproc`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `myproc`(in p1 int,inout p2 int,out p3 int)
begin
select p1,p2,p3;
set p1=10;
set p2=20;
set p3=30;
end
;;
DELIMITER ;

关键信息

1
2
Source Database       : usersinfo
File Encoding : 65001

第一个信息表示原来数据库的名称在创建数据库的时候用到,
第二个表示usersinfo.sql文件的编码,在新数据库导入的时候用到:

新建同名数据库

创建一个与原先数据库同名的数据库,同时设置数据库的属性为原先数据库的属性

导入

点击新建的数据库,右键,运行SQL文件

找到该文件,还有要注意编码要与文件中的编码65001一样。

导入成功后,新建的数据库中就有信息了,可以打开查看,如下所示:

Java程序说明

这样就可以点击main.bat运行程序了,运行效果如下:

可以看到数据库已经连接成功。点击菜单选项即可完成相关操作。
建议对照Nacicat中的student表格来操作Java程序:

还有就是,程序写入数据库的时候,Navicat中的数据不会更新,为了查看效果,请项关闭usersifo数据库,然后在打开,就可以看到Java程序更新的数据:

根据时间生成唯一的html ID属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<textarea name="output" id="output20181126110146" rows="5" style="width:100%"></textarea>
<input type="button" value="生成唯一化ID" onclick="setOutput()"/>&nbsp;<input type="button" value="生成唯一ID和对应设置方法" onclick="setOutIdFuntion()">
<script>
function setOutput()
{
document.getElementById("output20181126110146").value="id=\""+uniqueIdByFormatDate()+"\"";
//复制到剪贴板中
copy();
}
function setOutIdFuntion()
{
var id=uniqueIdByFormatDate();
document.getElementById("output20181126110146").value="// id=\""+id+"\""+
" onclick=\"setID"+id+"()\""
+"\nfunction setID"+id+"()\n{"+"\nvar id=document.getElementById(\""+id+"\");"+"\n}";
//复制到剪贴板中
copy();
}
//复制方法
function copy() {
var output = document.getElementById("output20181126110146");
output.select(); // 选择对象
document.execCommand("Copy"); // 执行浏览器复制命令
if(confirm("代码已经复制到剪贴板粘贴即可"))
{
output.value="";
}
}
function uniqueIdByFormatDate() {
var date1=new Date();
var str = "";
var year = date1.getFullYear();
str += year;
var month = date1.getMonth() + 1;//0-11
if (month < 10)
str += "0";
str += month;
var date = date1.getDate();//1-31
if (date < 10)
str += "0";
str += date;
var hour = date1.getHours() + 1;//0-59
if (hour < 10)
str += "0";
str += hour;
var moinute = date1.getMinutes() + 1;//0-59
if (moinute < 10)
str += "0";
str += moinute;
var second = date1.getSeconds() + 1;//0-59
if (second < 10)
str += "0";
str += second;
// console.log(str);
return str;
}
</script>

什么是设计模式

设计模式( Design Pattern) 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。

使用设计模式的目的

使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

Java设计模式有哪些

基本模式有23种:

  • 单例模式
  • 抽象工厂模式
  • 建造者模式
  • 工厂模式
  • 原型模式
  • ……

单例模式

在开发过程中,有些对象我们只需要一个,比如配置文件、工具类、线程池、缓存、日志对象等。
如果创造出多个实例,就会导致许多问题,比如占用过多资源,不一致的结果等

单例模式分类

常用的单例模式有两种,一种叫懒汉模式,一种叫饿汉模式。

饿汉模式

步骤

1.将构造方法私有化,不允许外部直接创建对象
2.在类内部创建类的唯一实例,使用private static修饰
3.提供一个用于获取实例的方法,使用public static修饰

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Singleton 
{
//1.将构造方法私有化,不允许外部直接创建对象
private Singleton()
{
}
//2.创建类的唯一实例,使用private static修饰
private static Singleton instance=new Singleton();
//3.提供一个用于获取实例的方法,使用public static修饰
public static Singleton getInstance(){
return instance;
}
}

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args)
{
// 饿汉模式
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
if (s1 == s2)
{
System.out.println("s1和s2是同一个实例");
} else
{
System.out.println("s1和s2不是同一个实例");
}
}

运行结果

1
s1和s2是同一个实例

为什么叫饿汉模式

不管程序是否需要这个对象的实例,总是在类加载的时候就先创建好实例,理解起来就像不管一个人想不想吃东西,他都把吃的先买好存着,如同饿怕了一样。

懒汉模式

步骤

  • 将构造方式私有化,不允许外边直接创建对象
  • 在类内部声明类的唯一实例,使用private static修饰
  • 提供一个用于获取实例的方法,使用public static修饰。当第一个用户来获取的时候,才创建一个实例,后面就不需要创建了。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public class Singleton2
    {
    // 1.将构造方式私有化,不允许外边直接创建对象
    private Singleton2()
    {
    }
    // 2.声明类的唯一实例,使用private static修饰
    private static Singleton2 instance;
    // 3.提供一个用于获取实例的方法,使用public static修饰
    public static synchronized Singleton2 getInstance()
    {
    //第一次获取的时候,创建实例
    if (instance == null)
    {
    instance = new Singleton2();
    }
    return instance;
    }
    }

测试

1
2
3
4
5
6
7
8
9
10
11
public static void main(String[] args)
{
// 懒汉模式
Singleton2 s3 = Singleton2.getInstance();
Singleton2 s4 = Singleton2.getInstance();
if (s3 == s4) {
System.out.println("s3和s4是同一个实例");
} else {
System.out.println("S3和s4不是同一个实例");
}
}

运行结果

1
s3和s4是同一个实例

为什么叫懒汉模式

当程序需要这个实例的时候才去创建对象,就如同一个人懒的饿到不行了才去吃东西

区别

  • 饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全
  • 懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全

如果一个对象使用频率不高,占用内存还特别大,明显就不合适用饿汉式了。这时应该使用懒汉模式。

参考链接

为什么单例模式要起名叫饿汉式和懒汉式?
慕课网 单例模式

前言

最近我写了点操作数据库的代码,但是呢,要在报告里画上流程图。手动来画的话很繁琐,于是我就想着有没有工具可以根据java源代码直接生成流程图。网上找了一番找到一个可以免费试用的流程图生成工具(visustin)。

工具软件

visustin这个软件是一个代码转换成流程图的神器,支持43种语言,包括C/C++,Java等等等等。这是一款收费的软件,不过好在其官网提供了一个demo版本可供用户下载使用。使用demo版,就可以根据Java代码生成流程图了,不过这个图你只能看,不能保存,也不能导出到word或者Visio中。但是这样就足够了,我们可以使用截图软件把流程图保存下来即可。

安装步骤

下载demo版安装包

进入官方网站:http://www.aivosto.com/visustin.html

然后下来找到Download for free标题下面的Download demo链接地址:http://www.aivosto.com/getshareware.html

点击进入,然后点击Go download链接:http://www.aivosto.com/download.html跳过问卷直接下载:

然后找到Free downloads for Windows标题,选择最新的版本,点击Download demo链接http://www.aivosto.com/shareware/visus805.zip下载即可:

安装demo版本

下载到的Demo程序是个压缩包,解压下载的压缩包,然后点击setup.exe进行安装。

使用demo版本生成流程图

java代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// 事件监听
public void actionPerformed(ActionEvent e)
{
// 如果按下的录入按钮
if (e.getSource() == insert)
{
Student student = Student.getInstance();
// 获取文本框中的文本
getAllInputs(student);
// 检查是否全都输入了
if (!isInputAll(student))
{
JOptionPane.showMessageDialog(this, "请全部填写所有输入项");
} else
{
// 判断
if (canBeInsert())
{
insetIntoStudent(student);
JOptionPane.showMessageDialog(this, "录入成功!", "信息管理系统",
JOptionPane.INFORMATION_MESSAGE);
}
}
}
// 如果按下了重置按钮
else if (e.getSource() == reset)
{
// 清空所有的输入框
cleanInput();
}
}

打开软件,选择开发语言为:Java:

开始界面如下:

取消勾选,下次不再显示。
然后在code输入框中,粘贴java代码,点击下方的Drow生成流程图,生成的流程图可以在右侧的窗口中显示。点击下方的Editor按钮可以编辑生成的流程图:


双击流程图的各个文本框,就可以改变里面的文本:


修改完毕后使用截图工具,截图保存即可:


使用demo版本可以实现基本功能。但是如果想到处到Word或者Visio中就要使用付费版的。如果你嫌弃画面太丑了,可以用其他工具照着着重新画一遍这里推荐https://www.processon.com/这个在线工具。不过差不多啦,能看就行了。

参考链接

https://www.cnblogs.com/aademeng/articles/6905351.html

使用bat批处理的好处:省时间

windows中.bat文件可以直接点击运行,我们可以把多个命令写在里面,运行这个.bat文件时就会运行了文件中的所有命令。这样我们运行一次,就等于运行了好多条指令,这会我们省下宝贵的时间。

bat脚本启动hexo本地服务器

1
2
3
4
@echo off
E:
cd E:\Blog\blog5
hexo s

指令说明

第一条指令@echo off,关闭回显。
第二叫指令E:,切换到博客站点目录所在的盘符,我这里是E盘,
第三条指令cd E:\Blog\blog5,进入站点目录,我这里是E:\Blog\blog5
第四条指令hexo s,启动本地服务器。

如何使用

把上述指令写在一个以.bat为后缀的文本文件中,放到桌面上,命名为:启动本地服务器.bat。点击该文件即可运行,效果如下所示:

这样就启动好本地服务器了,如果想关闭本地服务器,只需要关闭cmd黑窗口就行了。

bat脚本部署hexo博客

修改一下hexo指令就可以部署了,如下所示:

1
2
3
4
@echo off
E:
cd E:\Blog\blog5
hexo clean&&hexo g&&hexo d

还是在桌面创建一个名为发布博客.bat的文本文件,粘贴上述代码,然后点击运行,即可发布博客。发布完毕后cmd窗口会自动关闭。

JDBC 简介

JDBC全称为 Java Data Base Connectivity (java数据库连接)。JDBC是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问。
有了JDBC API,就不必为访问mysql数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问sql server数据库又编写另一个程序等等,程序员只需用JDBC API写一个程序就够了。

JDBC编程步骤

  • 加载驱动程序 
  • 获取数据库连接
  • 创建Statemant对象

加载驱动程序

每个数据库都会提供JDBC的驱动开发包,直接把JDBC操作所需要的开发包(一般为.jar或.zip)添加到eclipse buildpath中即可。

获取ResultSet结果集记录条数

ResultSet表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。
ResultSet 对象具有指向其当前数据行的光标。在最开始的时候,光标被置于第一行之前。next() 方法将光标移动到下一行;next()方法在 ResultSet 对象没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。

问题描述

ResultSet 并没有提供类似size() 方法或者length属性的东西,让我们知道ResultSet中有多少个元素,不过在 JDBC 中,ResultSet的行号是从1开始,所以最后一行的行号,就等于ResultSet中元素的个数:

1
2
rs.last();// 移动到最后
System.out.println(rs.getRow());// 获得结果集长度

参考链接

https://blog.csdn.net/DrifterJ/article/details/17720271](https://blog.csdn.net/DrifterJ/article/details/17720271
https://blog.csdn.net/qq_21808961/column/info/24405/2

问题描述

我在使用java向mysql数据库中插入信息的时候,发现中文全部变成了诡异的问号?。中文乱码了,但是我检查了,数据库的字符集,校对集都是正常的。java项目用的编码也和数据库的编码一样。但是不知道怎么回事,输入就是乱码。

解决方案

在URL中指定数据库编码就行了:注意数据库和后面的配置使用?隔开。

1
jdbc:mysql:///usersinfo?characterEncoding=gbk