发表于: 2017-10-05 22:34:33
1 768
今日完成的事情:
打断db测试trycatch
在数据库插入数据时,中断数据库客户端,程序得益于try catch 会捕捉处理异常,进而不会使程序崩溃,主要是两个异常一个时连接失败,没什么好说的,客户端都断了。
另一个是socket异常,原因有两个,简单的说就是在连接断开后的读和写操作引起的。 如果一端的Socket被关闭(主动关闭或因为异常退出引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常。另一个是一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常。
学习连接池概念并且测试时间效率
DBCP数据库连接池是通过连接池,预先同数据库建立一些连接放在连接池中,应用程序需要建立数据库连接时,直接到从接池中申请一个连接使用,用完后由连接池回收该连接,从而达到连接复用,减少资源消耗的目的。
首先是创建初始化DBCP的类
然后写一个jdbc连接数据库的类做对比
创建测试方法三种方式插入数据时间对比
1) 每次插入一条数据前,就创建一个连接,数据插入完成后,关闭该连接;
2) 使用连接池,每次插入一条数据前,从连接池中获取一条连接,插入完成后,连接交由连接池管理;
3) 在插入数据之前创建一条连接,数据全部使用该连接,插入完毕后,关闭该连接。
整体性能差别不是很大,其中一次链接一条数据的最慢;但是有链接池的速度反而不及一次连接多次插入的效率高。。
然后,测试连接池关闭和不关闭的效果,100条为例
不关闭连接的情况下
关闭连接的情况下
差别依然不是很大,事实上最后的注释对与连接池管理没有多大影响,不管连接关闭与否,连接都会被回收;分为两种情况,一是在应用程序中主动关闭该连接conn.close(),这种情况并不是手动将该连接关闭,而是将该连接交回给DBCP连接池,由连接池管理该连接。二是应用程序中不关闭该连接,将conn.close()注释掉,这个时候由于配置文件properties的作用,DBCP连接池自动管理应程序中使用完毕的连接。因此两者效率差别不明显。最后验证一下配置文件是否生效;通过修改properties里的验证removeAbandonedTimeout=100为例,也就是说不关闭连接的时候,该配置会生效,即连接会在180s后被回收,当然插入100条数据是10s左右,若是设置连接数为30条的话,程序运行就会报错,因为第2s左右就会把连接池的30条连接拿走,这个时候的后面70条数据得不到连接,就会报错。
因此在关闭连接的情况下,程序会默认加载配置文件而管理回收该连接。
学习数组概念,随机,遍历,明天插入随机大数据
Math.random() 会得到一个0-1之间的随机浮点数
public class HelloWorld {
public static void main(String[] args) {
int[] a = new int[5];
a[0] = (int) (Math.random() * 100);
a[1] = (int) (Math.random() * 100);
a[2] = (int) (Math.random() * 100);
a[3] = (int) (Math.random() * 100);
a[4] = (int) (Math.random() * 100);
System.out.println("数组中的随机数");
for (int i = 0; i < a.length; i++)
System.out.println(a[i]);
}
}
//常规遍历
for (int i = 0; i < values.length; i++) {
int each = values[i];
System.out.println(each);
}
//增强型for循环遍历
for (int each : values) {
System.out.println(each);
int a [] = new int[]{18,62,68,82,65,9};
int b[] = new int[3];
//通过数组赋值把,a数组的前3位赋值到b数组
//方法一: for循环
for (int i = 0; i < b.length; i++)
{
b[i] = a[i];
}
// 方法二: System.arraycopy(src, srcPos, dest, destPos, length)
// src: 源数组
// srcPos: 从源数组复制数据的启始位置
// dest: 目标数组
// destPos: 复制到目标数组的启始位置
// length: 复制的长度
System.arraycopy(a, 0, b, 0, 3);
明日计划的事情:
把100w循环做出来,建立好自己的student表,完善代码,尽量结束任务一,虽然有点牵强。
遇到的问题及解决方法:
基本上都是按照教程实现,自己理解了整体大的框架逻辑,但是还有个别代码看不是很懂,主要是创建对象,一些属性方法看起来很费劲,暂时放一放,把逻辑理解了,后面多看看基础概念理解一下。
收获:
数组,连接池,异常捕捉机制的学习了解。
评论