JDBC综合例题

这个综合例题主要就是使用JDBC的方式来对数据库表格进行增、删、查、改操作,其中还要逐个对这些方法进行测试,所以还要编写测试用例。编写这个例题主要意义是练习和进一步熟悉JDBC对数据库表格进行增、删、查、改操作的方式,巩固JDBC这个知识点。

这个例题里要用到的技术有:MavenDBUnitC3P0连接池、Log4jMySQL数据库。

1.先准备一个干净的数据库和两个表格,并且给这两个表格构建关联关系:

01dfbf308cfbc1cc7d7d1f9e51caf1d0.png

e1cdded973140ee0607ccb705693fa34.png



2.创建Maven工程,并配置好所有的依赖包:

7601bc4a759437ce4e341b5451510a49.png



配置好依赖包:

5155e91bb5d7392289fa41a9252fa987.png



3.在源码文件夹和测试源码文件夹里创建好相应的包(package),以便分类,免得所有类都挤在一起显得乱糟糟的:

68e4b8d4d297d5d1ff80909552235ba3.png


源码文件夹下的包:

c3p0manager 这个包是用来放连接对象管理类的

org.zero01.iuds 这个包是用来放封装类和功能类的

exception 这个包是用来放自定义异常类的

 

测试源码文件夹下的包:

org.zero01.test 这个包是用来放测试用例类的

 

 

  4.c3p0manager 包下创建一个类,这个类用于通过C3P0连接池获得数据库连接对象,并且这个类是单例模式:

代码示例:

5b453cd763058549454c975d625bde91.png

aac03bb5d0897611f315673eefe7d832.png



5.编写两个表格的数据封装类:

Cls代码示例:

973d7a079adc8926a36a33835d910be2.png


Student代码示例:

fba35ec68e4386ea6efa518fc0865e45.png

7fccb6a409024d1e19e0f3758d605280.png



6.编写对Cls表格操作的功能类:

1f5f19e6b2f8334305bf7aa68f155b6b.png

d7224ad7ca95593be9ab5c8e73156f27.png

647aa4d9599b91a71278762163bb5a3f.png

892e8f1c483377ce63cf481648e419d0.png

d003fe95da57c04c01da4de0831256ac.png

1171b02d53ecd27841d17655b058d8f5.png




7.编写对Student表格操作的功能类:

39713567457b47833be20469ab21e81e.png

cc8cd63d5bbf22bc0c1928357aac210e.png

fd4d62d1e3423e29a382fed39e6b391d.png

f789071322ae88d1b8c0e6007a812ada.png

8c24f0d94103f343087f7d7833730932.png

5c1f9918b646cda219801e4fb0f8e4db.png

cbe629af6d7d0ab55ab5dec5cfecb708.png




8.在测试源码文件夹下的org.zero01.test包里编写测试类,对两个功能类的方法逐个进行测试:

fcac3b6730ae4aa8ef52c015389885f1.png

b574f3febefd8dd10840bdee313ec364.png

8c4ee354dccf67bbb76e6e2165a98579.png

85b47aabd5cab3bab2d662461e795abb.png

61b6118439c36fb688db034e279ef785.png

b1cc337869a603271cfda24ad7cb5474.png

cf766c95c5196384c723c26dd508c81f.png

0068f630eec9740186e68aa8bad70710.png

1c83ceeb2258a3f19276b87d6c205c31.png

4962006088fa5850074cb996c46652d8.png

bcf7877f34ac0600a60ecc7346421e9d.png

eb79da91d2e39f8a7e44d57af085386d.png

4953e8fdd50f5fe3a87a86e5ad934775.png

17a043bf0adc958098c7f824c4979d81.png

e6e79c80791686e5442c286e5a980c80.png



测试结果:

9dab0305c1f3b7e072dd101984cec572.png



测试覆盖率:

83f621b7d8a9e1dc8695a63c655eb3ed.png



日志信息的打印:

9855455c2b96bdd4e92e0f86d214826d.png

提示:我这是已经完成的代码,但是各位在实际编写代码的时候,最好是写一个方法就测试一下,不要全部功能代码写完再写测试用例测试,因为那样一旦出问题了,很多地方的代码都要进行修改,如果写一个方法就测一个方法的话,就只需要针对一个方法进行修改,而其他方法不需要变动,这样效率高一些并且修改代码也轻松些,不用到处修修改改弄得眼花缭乱。

 


  我在编写C3P0Manager类的时候,犯了一个逻辑上的小错误,在这里记录一下这个错误,出现这个错误是因为我把构建对象的属性声明在了C3P0数据源类变量的前面,在构造器外调用getConnection方法的时候就会抛出空指针异常:

75e530837ae0188a3b1f35ccfa99aa81.png



图解:

841ca3e93e57d78ba8004ac39ab64c11.png



正确的声明方式:

f65837639185c729a9bc07695f2f0ea7.png