logo头像

生活就是游乐场!

记一次简单JAVA应用开发(菜鸟版)

Java(计算机编程语言):它只是计算机编程语言的一种,只是被大力发展和推崇,后台开发也常用它。当然内涵盖知识点无数,学无止境,如需精通必先自宫(开玩笑O(∩_∩)O),得勤学苦练是真,熟能生巧后方能拿得出手。,我系统学过,但离全栈开发工作者只差一步,就是付出。大概,没敢下决心往这条路上走吧。随有心,却无力。学了一点皮毛,偶尔只能简单写点代码,编个工具啥的仅此而已。

1.前言


  时隔几个月,又准备开始写点自己的内容,以沉淀一些属于自己的东西。近期一周,又捡了捡自己领域原来所学的知识(Java开发),编个小工具其实都难倒了一直在独自战斗的业余选手。无技术指点,单凭百度来解决一些未曾遇到的难题,下面开始正题:

现实:每月都会有十天左右需要去数据库按固定SQL按当天日期查询一些数据(称之响应率和填报率查询),然后将每条SQL的查询结果复制到EXCEL的基础数据表中进行相应固定公式的计算,最终会呈现一张数据分析结果表,用时大约15-20分钟。

需求:通过程序化实现功能,根据外部配置文件可进行调整SQL语句,对数据查询结果进行封装,输出EXCEL。

  a)设计界面—简单(日期可选,再加三个按钮)

  b)罗列功能—交互、响应、反馈(等待/错误提示)

  c)编写代码—写了再说,重构啥的不会

  d)测试BUG和数据—输出值是否正确

  e)技术问题优化—遇到一个攻克一个

2.开发环境


开发环境:JDK1.7.0_25

开发工具:Eclipse

数据库:MySql

有各服务器的远程地址,有数据库的账号密码,有查询数据所用SQL语句…

本地已安装Java环境,开发软件

使用工具类:JDBCUtil(数据源连接)、DateChooser(日期选择控件)、jxl(Excel操作)

3.问题(已解决)


3.1跨服务器查询

Question:分别需要查询在两台阿里云服务器上的测试库和正式库的数据,服务器A(测试库)和B(正式库),A可以本地直接访问,B需要远程到服务器后进行数据访问,但好在A和B都可外网。

Answer:在本地开发用A测试库测试,打包成jar丢到B正式库验证正式数据。

3.2跨库查询

Question:位于不同库中涉及多张关联表查询,用JDBCUtil工具类实现。

Answer:在对url赋值时,去掉库名即可,关联表查询的SQL仍然适用。

db.pro(外部配置文件,存放SQL)

1
2
3
4
5
6
7
8
9
10
url = jdbc:mysql://xxxxxxxxxxxx:端口号/库名?useSSL=false
url = jdbc:mysql://xxxxxxxxxxxx:端口号?useSSL=false

SELECT LEFT(b.shortcode,5),COUNT(1) FROM xxx.consult a, yyy.bcode b
WHERE a.bcode=b.bcode
AND a.status <>'10'
AND type ='10'
AND a.modifydate < ?
GROUP BY LEFT(b.shortcode,5)
ORDER BY LEFT(b.shortcode,5) ASC

3.3Excel数据格式

Question:写入Excel的数据非数值,打开文件后需要重新转换格式,而且部分数据默认成为科学计数法,要解决查询的值在写入Excel最终都是数值。

Answer:jxl类有方法可以设置写入时的格式

1
2
3
4
5
6
7
8
9
10
Double b1 = 1313496257.810000;
Double b2 = 1000634179.940000;
tSheet.addCell((WritableCell) new Label(0, 0, "" + b1));
tSheet.addCell((WritableCell) new Label(0, 1, "" + b2));
jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
//设置bai数字格式
jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf); //设置表单格式
jxl.write.Number labelNF = new jxl.write.Number(2, 0, b1, wcfN);
//格式化数值
tSheet.addCell(labelNF); //在表单中添加格式化的数字

4.问题(未解决)


4.1显示加载中

Question:查询数据需要等待时间较长,查询按钮点击后一直卡着没响应,直到查询结束才可以接着操作,中间加个Loading图标或进度条。

1
异步多线程,点击查询按钮时,弹出Loading图标且查询数据,查询完毕后显示加载完成

Question:当前日期是每月第一天时,查询数据会有异常,需要IF判断重新计算传递的日期。

1
在逻辑运算里面加判断

5.知识点


  • JDK:java development kit (java开发工具)
  • JRE:java runtime environment (java运行环境)
  • JVM:java virtuak machine (java虚拟机)

avatar

它们之间是包含关系,JDK包含了JRE,JRE包含了JVM,核心是JVM。要想有深入的了解,还需要继续钻研学习,有兴趣可以看下《深入理解Java虚拟机》这本书,参考链接:https://blog.csdn.net/qq_41701956/article/details/81664921

https://www.cnblogs.com/zuoxiaolong/p/life53.html

5.拓展


附:Java知识体系图

avatar

微信打赏

如果对你帮助有帮助,那留个言吧