0%

Java.sql.SQLException: Connections could not be acquired from the underlying database

这个错误出现的原因有的说是因为jdbc配置文件写错了

正确的写法是:

1
2
3
4
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/test
c3p0.user=root
c3p0.password=root

而不是

1
2
3
4
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
user=root
password=root

但是我遇到的不是如此

后来发现是因为maven出问题了,jar包没有加载进项目

这是在starkoverflow上看到的回答

1
In my case it was problem that c3p0-0.9.2.1.jar file was not copied by maven into src/main/webapp/web-inf/libs

最后maven重新install之后就解决了

具体代码如下,这里获取出来的文件大小是准确的

FileInputStream方式获取出来的大小会有差异

NIO与IO的对比详见:NIOCopy.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
32
33
34
35
/**
* 利用NIO进行读写文件
*
* @param oldFileName 原文件的路径
* @param newFileName 新文件的路径
*/
public static void nioCopy(String oldFileName, String newFileName) {
try {
FileChannel fileChannelIn = new FileInputStream(new File(oldFileName)).getChannel();
FileChannel fileChannelOut = new FileOutputStream(new File(newFileName)).getChannel();
//获取文件大小
long size = fileChannelIn.size();
System.out.printf("文件大小为:%s byte \n",size);
//缓冲
ByteBuffer byteBuffer = ByteBuffer.allocate(1024);

long start = System.currentTimeMillis();
while (fileChannelIn.read(byteBuffer) != -1) {
//准备写
byteBuffer.flip();
fileChannelOut.write(byteBuffer);
//准备读
byteBuffer.clear();
}
long end = System.currentTimeMillis();
System.out.printf("NIO方式复制完成,耗时 %s 秒\n",(end-start)/1000);
//关闭
fileChannelIn.close();
fileChannelOut.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

这里主要是介绍了几种redis支持的数据结构,以及操作方法

官网地址:http://try.redis.io/

我的redis是安装在linux虚拟机,通过Xshell操作,显示可能跟cmd不大一样

但是操作都是一样的

具体操作如下:

Read more »

hisen库中有一个post表,数据20w,非重复数据20条;

结构如下

1
2
3
4
5
6
7
8
9
mysql> describe post;
+---------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| title | varchar(255) | YES | MUL | NULL | |
| content | varchar(2550) | YES | | NULL | |
+---------+---------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

添加普通索引

1
2
3
mysql> alter table post add index index_post_title (title);
Query OK, 0 rows affected (1.22 sec)
Records: 0 Duplicates: 0 Warnings: 0

删除索引

1
2
3
mysql> drop index index_post_title on post;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0

添加索引之后查询速度明显加快

1
2
3
4
mysql> select count(title) from post group by title;
20 rows in set (0.25 sec)
#加了索引之后
20 rows in set (0.08 sec)

使用索引的情况

  1. 表的主关键字:自动建立唯一索引
  2. 表的字段唯一约束:ORACLE利用索引来保证数据的完整性
  3. 直接条件查询的字段
  4. 在SQL中用于条件约束的字段
  5. 查询中与其它表关联的字段
  6. 查询中排序的字段
  7. 查询中统计或分组统计的字段

不使用索引的情况

  1. 表记录太少
  2. 经常插入、删除、修改的表
  3. 数据重复且分布平均的表字段:假如10万数据只有A、B状态,且A、B各50%,这样建立索引就不会提速
  4. 经常和主字段一块查询但主字段索引值比较多的表字段

MySql在建立索引优化时需要注意的问题

Read more »

数据库名称表名
employeesemployees
hisenemployee

现在想把第一行的数据导入到第二行,具体如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mysql> describe employees;
+------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no | int(11) | NO | PRI | NULL | |
| birth_date | date | NO | | NULL | |
| first_name | varchar(14) | NO | | NULL | |
| last_name | varchar(16) | NO | | NULL | |
| gender | enum('M','F') | NO | | NULL | |
| hire_date | date | NO | | NULL | |
+------------+---------------+------+-----+---------+-------+
6 rows in set

mysql> select count(*) from employees;
+----------+
| count(*) |
+----------+
| 300024 |
+----------+
1 row in set

employees数据库中的employees表有30万数据

我想把这个数据导出到另外一个数据库hisen中的employee表中

具体操作如下

Read more »

目前,Data URI scheme支持的类型有:

  1. data:,文本数据
  2. data:text/plain,文本数据
  3. data:text/html,HTML代码
  4. data:text/html;base64,base64编码的HTML代码
  5. data:text/css,CSS代码
  6. data:text/css;base64,base64编码的CSS代码
  7. data:text/Javascript,Javascript代码
  8. data:text/Javascript;base64,base64编码的Javascript代码
  9. data:image/gif;base64,base64编码的gif图片数据
  10. data:image/png;base64,base64编码的png图片数据
  11. data:image/jpeg;base64,base64编码的jpeg图片数据
  12. data:image/x-icon;base64,base64编码的icon图片数据

Data URL是在本地直接绘制图片,不是从服务器加载,所以节省了HTTP连接,起到加速网页的作用。

也无法获取到图片在服务器上的真实地址

注意:本方法适合于小图片,大图片就不要考虑了,另外IE8以下浏览器不支持这种方法。

用这种方法会加重客户端的CPU和内存负担,总之有利有弊。

前台代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ page import="com.hisen.image.ShowImageByBase64" %><%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2017/5/11
Time: 18:55
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="Java" %>
<% String imageStr = ShowImageByBase64.showimage();%>
<html>
<head>
<title>Title</title>
</head>
<body>
<img src="data:image/png;base64,<%=imageStr%>" alt="base64图片"/>
</body>
</html>

后台代码:

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
58
59
60
61
62
63
64
65
66
67
68
package com.hisen.image;

import com.hisen.utils.Base64Util;
import com.hisen.utils.File2ByteArraysUtil;
import Java.io.ByteArrayOutputStream;
import Java.io.File;
import Java.io.FileInputStream;
import Java.io.FileNotFoundException;
import Java.io.IOException;
import sun.misc.BASE64Encoder;

/**
* <img src="data:image/png;base64,<%=imageStr%>" alt="base64image"/>
* Created by hisenyuan on 2017/5/11 at 18:44.
*/
public class ShowImageByBase64 {

public static String showimage() {
//写相对路径会报错,暂时不知道如何解决
String imagePath = "C:\\1\\830.jpg";
byte[] bytes = File2ByteArraysUtil.file2Bytes(imagePath);
String s = Base64Util.encodeBase64(bytes);
return s;
}

/**
* sun.misc.BASE64Encoder
*/
public static String encodeBase64(byte[] str) {
if (str == null) {
return null;
} else {
BASE64Encoder encoder = new BASE64Encoder();
try {
return encoder.encode(str);
} catch (Exception var3) {
return null;
}
}
}

/***
* file2byte[]
* @param path
* @return
*/
public static byte[] file2Bytes(String path) {
byte[] buffer = null;
File file = new File(path);
try {
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream(1000);
byte[] b = new byte[1000];
int n;
while ((n = fis.read(b)) != -1) {
bos.write(b, 0, n);
}
fis.close();
bos.close();
buffer = bos.toByteArray();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return buffer;
}
}

我的本子是双显卡的,英特尔的核芯显卡和英伟达的独显

但是之前完全没有把独显用上,在英伟达的设置里选择使用显卡感觉也没有用

后来找到在BIOS里面设置,貌似管用,联想的机子可以看看

其他的机子应该也差不多

连接:http://iknow.lenovo.com/detail/dc_102471.html

1
2
3
6. IdeaPad Z380/Z480/Z580/U310/U410,Lenovo G480A/V370A/V470A/V570A
依次选择“Configuration”、“Graphic Device”,其中有两个选项:Optimus表示可切换显卡模式;
UMA Only表示集显模式。选择好后,按F10并根据提示保存退出即可。

我的默认居然是:UMA Only

目前debian系列的系统都无法使用apt-get install tree来安装tree命令

以下是安装步骤

1
2
3
4
5
6
7
8
9
#下载(官网为:http://mama.indstate.edu/users/ice/tree/)
wget http://mama.indstate.edu/users/ice/tree/src/tree-1.7.0.tgz
#解压
tar -zxvf tree-1.7.0.tgz
#进入目录
cd tree-1.7.0
#安装
sudo make install
#完毕

最简单的使用方法,在目录下输入:tree

使用效果

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
hisen@ubuntu:~/dl$ tree
.
├── hisen.log
├── master
└── test_db-master
├── Changelog
├── employees_partitioned_5.1.sql
├── employees_partitioned.sql
├── employees.sql
├── images
│   ├── employees.gif
│   ├── employees.jpg
│   └── employees.png
├── load_departments.dump
├── load_dept_emp.dump
├── load_dept_manager.dump
├── load_employees.dump
├── load_salaries1.dump
├── load_salaries2.dump
├── load_salaries3.dump
├── load_titles.dump
├── objects.sql
├── README.md
├── sakila
│   ├── README.md
│   ├── sakila-mv-data.sql
│   └── sakila-mv-schema.sql
├── show_elapsed.sql
├── sql_test.sh
├── test_employees_md5.sql
└── test_employees_sha.sql

3 directories, 26 files

使用参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
tree命令行参数:

-a 显示所有文件和目录。
-A 使用ASNI绘图字符显示树状图而非以ASCII字符组合。
-C 在文件和目录清单加上色彩,便于区分各种类型。
-d 显示目录名称而非内容。
-D 列出文件或目录的更改时间。
-f 在每个文件或目录之前,显示完整的相对路径名称。
-F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|"号。
-g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。
-i 不以阶梯状列出文件或目录名称。
-I 不显示符合范本样式的文件或目录名称。
-l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
-n 不在文件和目录清单加上色彩。
-N 直接列出文件和目录名称,包括控制字符。
-p 列出权限标示。
-P 只显示符合范本样式的文件或目录名称。
-q 用"?"号取代控制字符,列出文件和目录名称。
-s 列出文件或目录大小。
-t 用文件和目录的更改时间排序。
-u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。
-x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。

github api的网址

1
https://api.github.com/

这里介绍两个api

1
2
#获取个人信息
https://api.github.com/users/{user};
key含义value
login登录名称hisen-yuan
id数字编号16789019
avatar_url头像地址https://avatars1.githubusercontent.com/u/16789019?v=3
name用户昵称hisenyuan
blog博客地址http://hisen.me
location地理位置China
bio个人说明Java R & D
public_repos仓库个数11
created_at创建时间2016-01-20 01:57:15Z
updated_at最后更新2017-04-20 14:03:27Z
1
2
#获取项目信息
https://api.github.com/users/{user}/repos
key含义value
id项目编号88646378
name项目名称dubbo
html_url项目地址https://github.com/hisen-yuan/dubbo
created_at创建时间2017-04-18T16:21:57Z
updated_at更新时间2017-04-18T16:23:16Z
pushed_at提交时间2017-04-19T02:33:33Z
size项目大小6514
language编程语言Java

github提供的所有api

Read more »

用下面的接口获取股票的数据

sh:代表上海市场

sz:代表深圳市场

后面是加上股票代码,这是因为上海和深圳的股票代码有重复的

1
http://hq.sinajs.cn/list=sh600877

返回的信息

1
var hq_str_sh600877="中国嘉陵,6.340,6.400,6.360,6.470,6.210,6.340,6.350,15012913,95227966.000,56500,6.340,12100,6.330,16100,6.320,17500,6.310,47400,6.300,13600,6.350,11300,6.360,32400,6.370,39100,6.380,41200,6.390,2017-04-27,15:00:00,00";

有效信息为引号里面的数据

下面的数字代表分割数组后所在的下标

下面是数据字段对应的含义

源代码:GetStockInformation.Java

表格如下:

Read more »