发表于: 2018-06-10 23:40:55

2 892


今天本来想先学mybatis的,但是调试花了很长时间才弄完,而且只是半成品的操作,懂了这个估计mybatis也能容易点学,希望如此吧。


昨天只是完成了建立表的操作,今天主要完成学生表的测试,并且调试花了很长时间才完成。半成品的话,是这样,对数据的操作,如果要变化的话得直接改接口实现类的sql语句,不够方便,我看网上都是用明天把语言升级下,做到可以用键盘输入来更改sql语言,完成数据表的查询,或者用一个方法来完成对sql语言的更改,再往后了说,如果将键盘输入完善下,就可以和别的对接了,我觉得是这样,哈哈,;


昨天学到的继承和接口,和实现,补充了点知识,

继承指子类与父类的继承,实现指接口的实现,

一个类不能同时继承多个类,一个类只能继承一个类,可以连续继承,达到继承多个类的目的;

一个接口能够继承多个接口,一个类可以实现多个接口,不需用一个一个去继承和实现,一个接口不能实现一个接口(接口的方法都是抽象的,实现的话类就不抽象了,不算接口了),有点绕口,哈哈;


今天看面向接口的时候看到了面向过程思想和面向对象思想,就把自己的感悟写了下,可能有点多,


编程思想都是在试图建立现实世界和计算机世界的对应关系,即抽象化,映射。面向过程、面向对象或者是其它的什么思想,都是在计算机中建立现实世界的模型,通过模型推演,解决模型问题,推理来解决现实问题。只不过面向过程的思想把世界划分为数据结构和函数,算法工程师是不是就是这两块特别厉害,所以吊的一匹;而面向对象的思想把世界划分为对象和方法。相对于面向过程的思想而言,面向对象思想和现实世界的“映射”更容易建立,c语言为面向过程,java,c++为面向对象,语言只是编程思想实现的载体,什么时候做到心中无语言就成大神了,哈哈。


面向接口编程是面向对象编程思想所提倡的一种编程规范。因为它能够最大限度的解耦,所谓解耦既是解耦合的意思,它和耦合相对。耦合就是联系,耦合越强,联系越紧密,紧密的话,很大的一个问题就是,更换的时候,会影响跟他耦合的程序,即是牵一发而动全身,我们希望的是程序改动对整个程序的影响越小越好,面向对象就是这样一个比较完美的规范。


说下调试中遇到的问题:

1)


执行这个的时候报,nullpointerException....;字面意思是空指针异常,位置为下面那个框里,不懂啊,懂字面也没用,查了网上,看到我这个的意识是这个值是null,但是你让他执行close(),他没法执行,就报错了,然后,仔细看了下我的程序,原来是上图的连接方法没调用,连接根本就没开,我之前这段代码是没有的,不上了就好了,我用注释测试了,果然是这个问题,真尴尬,哈哈,虽然道理很浅显,对着代码看真的看晕了,哈哈;

2)


这个是Resultset收到数据不对,跟表格数据不是一一对应的,这个顺序要和表达顺序都对应上,才能正确的收到数据,完成查询,这个可能跟Resultset数据存储方式有关,得研究下这块;

3)这个问题是读取时间的问题,因为我的join_time用的datetime时间,第一次的时候报错这个,

因为第一我用的int,所以报这个错,但是我细想了下,基本数据类型并没有time这个呀,然后先把join_time的类型给为int,成功;接着想,不对呀,java肯定有可以保存datetime的数据类型,百度,结果如下,开始试验


~1.  在Mysql数据库中使用datetime类型来存储时间,使用JDBC中读取这个字段的时候,应该使用 ResultSet.getTimestamp(),这样会得到一个java.sql.Timestamp类型的数据。  

~2.  在这里既不能使用 ResultSet.getDate(),也不能使用ResultSet.getTime(),

因为前者不包括time数据,后者不包括date数据。     

~3.  但是在使用ResultSet.getTimestamp()时也不是完全安全的,例如,当数据库中的TIMESTAMP类型的字段值为 '0000-00-00 00:00:00'时,

使用此方法进行读取,会抛出异常:Cannot convert value '0000-00-00 00:00:00' from column 1 to TIMESTAMP,

这是因为JDBC不能将'0000-00-00 00:00:00'转化为一个为一个java.sql.Timestamp,

在Java中,想创建一个java.util.Date,使其值为 '0000-00-00'也是不可能的,最古老的日期应该是'0001-01-01 00:00:00'。

~4.所以,在JDBC URL中加入zeroDateTimeBehavior信息,既可以解决:

String url = "jdbc:mysql://10.149.51.80:3306/test?relaxAutoCommit=true&zeroDateTimeBehavior=convertToNull";保证值不为null就好


第一个,先用timestamp类型,看结果,果然厉害;


第二个 使用date数据,只获得了date,没有时分秒;


第三个 使用time时间,只获得了time时间,没有日期;


第四个 输入00000000这个数,然后就会出现这个问题,当然现实我们真的数据不会这样输,尽量避免就好;




明天的目标,尽量实现改sql语言的智能化哈,学习mybatis~



返回列表 返回列表
评论

    分享到