将树型数据表转换成JSON(封装成一个方法)。
封装性在Java当中的体现:(来自C:\Users\hhqiwei\Documents\学习(更新)黑马IDEA版本2018Java基础+就业课程\1.基础班\1-2 面向对象和封装\第1节 描述类介绍与使用\day06_13_面向对象三大特征之封装性.mp4) 1.方法就是一种封装。 2.关键字private也是一种封装。
封装就是讲一些细节信息隐藏起来,对于外界不可见。
导师意见: 1、不够通用性。 2、可以连接MySQL、Oracle等不同的数据库。 3、数据库账号密码等不能写死,因为每个数据库的账号密码都不同。 4、由数据表找出父子关系,不能写死。(现在我就是由我自己定义的父子关系表,所以很简单的就可以找出来了)
添加配置文件并读取。
建立Oracle数据库并且读取数据表内容。 如何找到IDEA连接mysql数据库的jar包本地路径
成功将连接数据库的方法封装成一个类,并成功调用。
由用户输入的数据来调用方法。(但是调用方法的时候,参数传进去了,还是调用调用不成功,可能是传入的数据类型不对,接下来检查数据类型)
解决昨天下午遇到的传参不正确问题,不是用“==”进行字符串的比较,而是是用“str.equals("str1")”。
完成从ORACLE数据库中读取数据并转换为JSON,但是还没有实现自动识别父子关系的方法。
导师意见: 1.一万条数据的话,又会怎么样?(耗时多少?所以会有算法优化) 2.连接数据库的考虑。(连接池的设计) 3.有很多坑,尽量优化,发现问题。 4.导师说父子关系不一定是影响性能的重点。(说明不用从数据库中判断父子关系) 5.传入的参数尽可能的简便,方便用户使用。
综上,优化代码,提升性能。
经过几天的考虑,计划使用数据库连接池连接数据库。DRUID连接池技术,由阿里巴巴提供。
成功使用DRUID连接池技术连接数据库。
编写JDBCUtils类,并测试。
分离连接池和数据库连接,分别为:JDBCUtils、ConnectSQL。
尝试通过连接池test数据库,因为家里的电脑没有MYSQL,暂时无法连接上。
1.删除一些多余的代码。 2.成功通过连接池操作MySQL数据库,并成功显示出JSON数据。
通过新建类PropertiesDemo来修改配置文件druid.properties中的数据。(出现了一个问题,虽然修改成功了,但是并不能及时读取到修改以后的数据,而是读取修改之前的 数据,说明数据更新不及时)
使用硬编码初始化Druid,成功连接到数据库,接下来就是要传入参数修改就行。参考:数据库连接池之Druid连接池(mysql)
重新编写JDBCUtils类的getConnection()方法,用传入参数的方法解决了修改配置文件但是无法及时更新的问题。
通过连接池连接ORACLE数据库,一开始出现“八月 27, 2019 4:03:56 下午 com.alibaba.druid.pool.DruidAbstractDataSource error 严重: oracle.jdbc.driver.OracleDriver is deprecated.”错误。 解决方法参考:Spring boot项目启动报错oracle.jdbc.driver.OracleDriver is deprecated,但项目还可以起来https://blog.csdn.net/yanyanhj/article/details/88352908 将driverClassName="oracle.jdbc.driver.OracleDriver";改为driverClassName="oracle.jdbc.OracleDriver";
自动生成MYSQL数据表测试数据。参考:使用navicat premium 批量生成测试数据
将生成的JSON数据输出到文件中(未完成)。
将treetable.sql保存到项目中。
完成将将生成的JSON数据输出到文件中。
发现自动生成的数据库数据不符合树型结构,自己的ID为7,PID也为7,这是不符合要求的。
虽然解决了上一个问题,但是发现自动生成的数据会形成闭环,导致生成的JSON丢失(暂时无法解决)。
与导师交流发现我自己生成的数据并不符合他的要求,复杂程度不够,会造成程序的运行时间减少。应该让每个数据都有父节点,而不是随机赋值。
增加test.sql文件。
把以前的项目迁移到maven。
添加单元测试Junit,并编写测试用例:ConnectSQLTest()。
当数据有10000条的时候,运行程序出现“java.lang.StackOverflowError”错误,说明递归方法不适合在大量数据时使用。
下班上传保存。无法将递归转换为循环。
使用其他方法构造父子关系的JSON,但是并不能解决栈溢出。参考:java将list转为树形结构的方法
使用@SuppressWarnings("all")压制警告信息。
下班保存。发现了问题:当数据量非常大的时候,TOJSONSTRING()方法会循环调用,导致栈溢出StackOverflow异常。使用别的方法将list转为JSON数据。
由treelist输出整个链表。
导师的意思是让我自己写将list转为JSON的方法,对我直接使用网上架包的JSON.toJSONString(treeList)不是很满意, 现在布置给我新的任务:熟悉Redis。以后再来完善这个项目。
导师问我的问题:什么是栈比,什么是栈溢出。
导师要求完善,修改以运行。
精简代码。
下班回家。
多层嵌套使栈溢出,暂时无法解决,无论使用哪个架包,都是会栈溢出,JSON.toJSONString(this),询问了李子健、何家建,都无法解决。
精简代码。
在ubuntu中安装postgresql数据库,并通过Navicat连接成功。 账号:psostgres,密码;123456
在Win上安装Oracle数据库,并通过Navicat连接成功。 在ubuntu中安装mongodb数据库,并通过Navicat连接成功。
项目连接ORACLE XEE 11G成功。
连接postgresql、sqlite失败。
成功连接sqlite数据库,并解决出现的错误“testWhileIdle is true, validationQuery not set”。参考: 严重: testWhileIdle is true, validationQuery not set 使用Druid连接池报错处理【无Spring框架,使用的JDK9,MYSQL8版本】
成功连接postgresql数据库。
完善ConnectSQL类的编写,并测试各个数据库读取出来的数据转换。问题:Oracle数据库失败。
解决不能连接Oracle数据库的问题。参考:druid配置oracle遇到: 未找到要求的 FROM 关键字 errorCode 923, state 42000
连接sqlite出现:testWhileIdle is true, validationQuery not set。参考:严重: testWhileIdle is true, validationQuery not set 使用Druid连接池报错处理【无Spring框架,使用的JDK9,MYSQL8版本】
删除一些不必要的代码。今天不要在公司修改,回到家,对代码进行修改。