首先使用原生态的JDBC来操作数据库,从中发现存在的一些问题:
jdbc代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
注意代码中导入的包如下:
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
为什么导入的都是Java.sql包中的接口?
原因: 这里使用MySQL的jar包中实现了这些接口,如果以后更换了数据库Oracle,oracle的数据库jar包也实现了这些接口。就不需要重新引入了。如果这里导入的是mysql的jar中的实现类的话,那么更换为oracle数据库之后,要重新导入oracle的jar的实现类。
上边的代码中的:
- 1
- 1
为什么要使用PreparedStatement而不使用Statement呢?
原因:preparedStatement是预编译的statement,
通过statement向数据库发送sql语句,然后数据库那边要对sql语句进行编译,编译完成之后把编译的结果存储到数据库端的缓存中。下次如果发送相同的sql语句的话,数据库就不需要编译了,直接将缓存中的结果取过来就可以了。这样提高了数据库的性能。
通过上边的原生版的jdbc发现的问题:
- 数据库连接在使用的时候就创建,使用完成之后就关闭。这就会对数据库进行频繁的连接开启和关闭,就会造成数据库的资源浪费,影响了数据库的性能。
解决方案:使用数据库的连接池来管理数据库的连接 - 将sql语句硬编码(也就是把变量写死了)到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。
解决方案:可以将sql语句配置在xml的配置文件中。这样即使sql语句变化了,也不需要对java代码进行重新编译 - 向preparedStatement中设置参数(
preparedStatement.setString(1, "王五");
),对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。
解决方案:将sql语句及占位符和参数全部配置到xml文件中 - 从resutSet中遍历结果集数据时(
- 1
- 2
- 3
- 1
- 2
- 3
),
存在硬编码,将获取表的字段进行硬编码,不利于系统维护。
解决方案:将查询的结果集自动映射成java对象