发表于: 2017-10-03 23:23:04
1 816
今日完成:
步骤二十一
购买服务器,部署数据库,远程实行访问。弄了一个上午。这里我采用了简单的windows server 系统版本,对新手相当友好,连入服务器的方法有2种
①如下 远程连接!
②在运行中输入采用电脑自带的远程连接工具,连入后在服务器中下载相应的数据库,这里我也顺便下载了navicat方便管理。
那么本地怎么连接服务器上的Mysql呢? 首先需要在服务器上的Mysql建立一个账户,将这个账户的权限给与我们本地的IP
CREATE USER '账户名'@'你自己电脑的本地ip地址如(111.111.111.11)' IDENTIFIED BY '密码';
GRANT SELECT, INSERT, UPDATE, DELETE ON `对应的哪个数据库名称`.* TO '账户名'@'你自己电脑的本地ip地址如(111.111.111.11)';
这里给予了测试帐号在服务器数据库中对应mytest数据库的增删改查操作。
创建完毕后在本地进行测试
在连接时 一直显示10060报错,最后找寻到原因,服务器的3306的端口没有向外开放,在阿里云服务器的安全组件规则中添加再测试从本地连接服务器数据库
先用cmd窗口连接成功,这里在连接时,一定要设置当前账户访问的ip地址,这里ip地址是公网的ip 我就不隐藏了,进入数据库后进行查询,OK没问题
再使用navicat连接更加简单,
将本地数据部署到服务器数据库,我这边使用了navicat的数据同步功能,在服务器按照本地一张表的格式创建了对应的表 打开数据同步同步传输结果测试成功!
来到了步骤二十三,部署完后要开始用MAVEN命令跑测试,这里要注意跑测试的方法,
在默认情况下,“maven-surefire-plugin”插件将自动执行项目“src/test/java”路径下的测试类,但测试类需要遵从以下命名模式,Maven才能自动执行它们:
*Test*.java :以Test开头的Java类;
- *Test.java :以Test结尾的Java类;
- *TestCase.java:以TestCase结尾的Java类;
- 因为“maven-surefire-plngin”插件是Maven内置绑定的,即使你不在“pom.xml”文件中对”maven-surefire-plngin”插件做相关配置,所以无添加配置情况下运行测试,maven能识别到"src/test/java"的测试类文件却没有运行
显示报错TestNG,
在pom.xml中还是配置了“maven-surefire-plngin”插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
</plugin>
测试成功这里在将项目在idea打包好后,上传至服务器,解压后在cmd打开至含有该项目pom.xml的根目录下,运行mvn test跑测试,但是在打包时src/test/java下文件并没有含入,所有没有测试单元运行
步骤二十四因为项目已打包成class字节码文件在cmd中直接用java 跟上文件试跑
成功!
步骤25
public static void main(String[] args){
ComboPooledDataSource cd = new ComboPooledDataSource();
try {
for(int i=0;i<1000;i++){
Connection connection = cd.getConnection();
String sql = "insert into user(id,name) values(?,?)";
PreparedStatement p = connection.prepareStatement(sql);
p.setInt(1,i);
p.setString(2,"王五");
p.executeUpdate();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
在从连接池不停取出连接而不去关闭,结果也是显而易见的,程序停止在那边不动也不报错。
在配置C3P0连接池的时候
<c3p0-config>
<default-config>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/mydemo</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">8866521</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">10</property>
<property name="maxIdleTime">1000</property>
</default-config>
</c3p0-config>
非常明确的显示最大连接数为10,超过后没有连接从连接池中取出那么就无法循环执行下去,系统就在等待新的连接
数据库中也只插入了与之对应的10条数据,加入关闭后,测试,数据循环插入成功
步骤二十六 在数据库断开情况下运行程序,程序根本无法catch住SQL异常,一直处于等待状态。这里我理解为,try 执行语句 c3p0获取连接,插入语句,但是在因为连接池无法连接到数据库,
Connection connection = cd.getConnection(); 连接无法拿到,系统就一直处于等待状态,相同于步骤二十五不关闭连接 一直从连接池取直到取空连接的状态。
但C3P0的实际底部代码没有看,具体的原理请师兄给说说。
步骤二十七 到这里task1 其实快完成了,但牵扯到索引问题,因先前理解错误,再强化深入学习索引。
当数据保存在磁盘类存储介质上时,它是作为数据块存放。这些数据块是被当作一个整体来访问的,这样可以保证操作的原子性。硬盘数据块存储结构类似于链表,都包含数据部分,以及一个指向下一个节点(或数据块)的指针,不需要连续存储,所以在没有建立索引情况下,查找数据效率可想而知,一条一条的找非常麻烦。这里对索引的分类做一个简单的概括
普通索引(INDEX):最基本的索引,没有任何限制
唯一索引(UNIQUE):与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。
主键索引(PRIMARY):它 是一种特殊的唯一索引,不允许有空值。
全文索引(FULLTEXT ):仅可用于 MyISAM 表, 用于在一篇文章中,检索文本信息的, 针对较大的数据,生成全文索引很耗时好空间。
组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。
所以user中ID是主键已经自己创建主键索引了就不用在创建,而唯一的QQ号可以用来创建唯一索引(当然了用户创建新用户时,后台程序得不允许同一个个QQ被不同用户注册),name等常被搜索字段可作普通索引。这里得注意,索引是占用空间的,索引会影响update insert delete速度,一切的一切要根据实际情况进行设计!
那么打个比方,不说庞大的数据,就说一百条数据变成100栋房子,每栋房都有数字标记从1到100,且每个房子上都挂了一个超大的牌子上面写着户主的名字,分散在各个地方,不建立索引的情况下,你去找一个叫刘能的人,你怎么找? 从头开始一挨家挨户的跑找看看门牌。那么建立了索引后呢,你会拿到一个登记簿,上面记着谁谁谁在哪儿并标记着路线怎么怎么走,你看一眼就行了。
那数据库在进行查询的时候怎么“看”的呢?“登记薄”上的内容又是怎么排的呢?很多资料都写着创建索引后加快搜索效率,或者一下就搜出结果,这边往深处学习了下。
未建立索引的查询方法就是顺序查找,也就是上面的一家一家的跑,而所谓的创建索引,就是把你指定字段的内容好比上面的“姓名”,在创建单独的一张表好比上面的“登记簿”,但是他为什么一样的数据他就是能看这么快呢,这是因为索引将数据变成了特定的数据结构,所以他就是快。
在这里只是简单得了解了一下b-tree的结构就花费了好长时间
m-way查找树(重点看步骤图)
首先介绍一下m-way查找树,顾名思义就是一棵树的每个节点的度小于等于m。
故,它的性质如下:
每个节点的键值数小于m每个节点的度小于等于m键值按顺序排列子树的键值要完全小于或大于或介于父节点之间的键值这边图11-5错误
完整内容看下面链接!非常直白,图文并茂推荐一看!
https://www.2cto.com/database/201411/351106.html
最后再贴一个IDEA常用快捷键摘自http://blog.csdn.net/dc_726/article/details/42784275
这榜单阵容太豪华了,后几名都是如此有用,毫不示弱。
Ø Top #10切来切去:Ctrl+Tab
Ø Top #9选你所想:Ctrl+W
Ø Top #8代码生成:Template/Postfix +Tab
Ø Top #7发号施令:Ctrl+Shift+A
Ø Top #6无处藏身:Shift+Shift
Ø Top #5自动完成:Ctrl+Shift+Enter
Ø Top #4创造万物:Alt+Insert
太难割舍,前三名并列吧!
Ø Top #1智能补全:Ctrl+Shift+Space
Ø Top #1自我修复:Alt+Enter
Ø Top #1重构一切:Ctrl+Shift+Alt+T
明日计划:完成task1,学习Linux系统,并对该系统下进行数据库部署。
遇到问题:关于阿里云服务器的各种各样问题,而且我今天还用的不是Linux系统而是简单的可视化windows server系统,maven还是不熟悉导致了一系列问题,出问题解决速度慢效率低,昨日剩下未学内容依旧欠
收货:对cmd 操作的各种花式命令有了学习,远程服务器有了大概有了了解,索引有了正确的学习,对底部实现原理粗略的领略了下。
评论