发表于: 2017-08-26 23:39:09
1 1000
今天完成的事
1.部署自己的服务到服务器
navicat连接服务器mysql数据库
在服务器上用Maven执行单元测试
先创建一个MAVEN项目打包上传到服务器,然后解压
然后运行Maven test
2.1000个循环调用(我其实打算写100W个循环)
3.往数据库插大量数据
说实话效率真慢,我自己都嫌弃
之后又尝试用拼接sql语句的方法插入,发现效率大增,原来Spring的方法4分钟插8000条,现在这个方法69秒插100W,震惊!!贴上代码
/**
* Created by yaheng on 2017/8/26.
*/
public class Insert2 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
final String url = "jdbc:mysql://localhost:3306/yaheng?characterEncoding=utf8&useSSL=false";
final String name = "com.mysql.jdbc.Driver";
final String user = "root";
final String password = "0123.";
Connection conn = null;
Class.forName(name);//指定连接类型
conn = DriverManager.getConnection(url, user, password);//获取连接
if (conn != null) {
System.out.println("获取连接成功");
insert(conn);
} else {
System.out.println("获取连接失败");
}
}
public static void insert(Connection conn) {
// 开始时间
Long begin = new Date().getTime();
// sql前缀
String prefix = "INSERT INTO hero (name,blood,defence,level) VALUES ";
try {
// 保存sql后缀
StringBuffer suffix = new StringBuffer();
// 设置事务为非自动提交
conn.setAutoCommit(false);
// 比起st,pst会更好些
PreparedStatement pst = (PreparedStatement) conn.prepareStatement("");//准备执行语句
// 外层循环,总提交事务次数
for (int i = 1; i <= 1000; i++) {
suffix = new StringBuffer();
System.out.println("提交1000条");
for (int j = 1; j <= 1000; j++) {
// 构建SQL后缀
suffix.append( "("+"'" +i+"英雄"+j+ "'"+"," + 800 + "," + 30 + "," + 3+"),");
}
String sql = prefix + suffix.substring(0, suffix.length() - 1);
// 添加执行SQL
pst.addBatch(sql);
// 执行操作
pst.executeBatch();
// 提交事务
conn.commit();
// 清空上一次添加的数据
suffix = new StringBuffer();
}
} catch (SQLException e) {
e.printStackTrace();
}
Long end = new Date().getTime();
// 耗时
System.out.println("100万条数据插入花费时间 : " + (end - begin) / 1000 + " s");
System.out.println("插入完成");
}
}
个人觉得,spring这种需要来回调用各种bean的方法不太适合大量插入数据,效率比不上JDBC来的简单粗暴,而且利用拼接SQL语句的方法使用
插入100W条共花费69s,相比之前插入100W大概需要10个小时,差别之大,自己体会
话不多说上图
4.try catch
初步学习try catch
利用try catch可以让程序更加健壮,如果执行try块里的业务逻辑代码时出现异常,系统回自动生成并抛出异常,之后寻找可以处理这个异常的catch块处理,如果JAVA运行没有找到可以处理异常的catch块,则运行终止
明天的计划:
收尾任务1,上传代码到gitup和svn
遇到的问题
本地navicat无法连接远程mysql,原因有一下几个 解决办法
1.阿里云服务器没有针对3306端口的开放规则 新建安全规则
2.没有设置所有root用户可登录 更新用户权限
3.ubuntu绑定本地IP127.0.0.1 在mysqld.conf中注释掉该IP
4.没有添加root 用户 使用grand命令添加
利用JDBC插100W拼接SQL语句时出错,只因为少了一个隔开(对象所有的属性的值),(对象所有的属性的值)中的逗号 特别鸣谢:程远师兄 找到了少逗号的问题
收获:体会到了服务器搭建的难度,单单一个数据库都要解决许多问题,但也感觉linux越用越顺手,反应速度没得说,也在插大量数据的时候意识到了自己的不足,还有很多的路要走,
任务进度:任务1步骤28
任务开始时间:2017-8-15
预计结束时间:2017-8-25
已延期至 2017-8-28
禅道:http://task.ptteng.com/zentao/project-task-276-unclosed.html
评论