关于JDBC学习过程中的注意事项(分享自己犯过的错误,写给初学JDBC的小伙伴的八条建议)
- 前言:最近在学习JDBC,总结了几个小问题,特地分享给大家,让大家不要犯这样的错误,也希望大家养成学会总结的好习惯,由于本人水平有限如果有什么错误还请指出,好让我进行及时的更改。
一、注意事项
以下的出现的问题是按照我的学习进度进行排列的,可能这些问题很简单但是我还是犯了很多次,所以特地总结出来。
(一) URL的时候经常少写冒号(:)
这虽然是一个小问题,但是很多人可能写的时候会不注意这一点,补充一下MySql的URL书写格式:- 标准写法 jdbc:mysql://localhost:3306/databaseName?user=ursername&password=password
- 改成IP地址写法 jdbc:mysql://192.168.0.1:3306/databaseName?user=ursername&password=password
- 省略写法 jdbc:mysql:///databaseName?user=ursername&password=password
(二) Properties的load方法书写错误
Properties对象的load方法的格式不同那么文件的相对位置的书写格式就是不一样的,这里我直接推荐一篇比较好的博文分享给大家。
(三) 使用事务前必须关闭自动提交
关闭事务自动提交的方法是conn.setAutoCommit(false),这里的conn是Connection对象,这里同样推荐一篇博文给大家。
(四) 养成及时关闭资源的好习惯
如果我们不及时关闭资源,那么MySQL中的连接进程是会一直存在的,这样对性能和效率是有很大的影响的。以下是关流的基本格式。
1 //声明 2 Connection conn = null; 3 Statement stat = null; 4 ResultSet rs = null; 5 try { 6 ... 7 } catch (SQLException e) { 8 e.printStackTrace(); 9 } finally{ 10 try { 11 //释放资源 12 if(conn!=null)conn.close(); 13 if(stat!=null)stat.close(); 14 if(rs!=null)rs.close(); 15 } catch (SQLException e) { 16 e.printStackTrace(); 17 } 18 }
(五) 在书写entity实体的属性时推荐使用基本数据类型的包装类
因为包装类是引用数据类型可以有null值,而实际的表格中就有很多地方出现null值,这样方便数据的接收,以及对图片等非文本资料用byte数组进行接收。比如下表就有null值。
1 +---------+-----------------+-----------------+------------+------------+----------+--------------+ 2 | vend_id | vend_name | vend_address | vend_city | vend_state | vend_zip | vend_country | 3 +---------+-----------------+-----------------+------------+------------+----------+--------------+ 4 | BRE02 | hhh | 500 Park Street | Anytown | OH | 44333 | USA | 5 | BRS01 | Bears R Us | 123 Main Street | Bear Town | MI | 44444 | USA | 6 | DLL01 | Doll House Inc. | 555 High Street | Dollsville | CA | 99999 | USA | 7 | FNG01 | Fun and Games | 42 Galaxy Road | London | NULL | N16 6PS | England | 8 | FRB01 | Furball Inc. | 1000 5th Avenue | New York | NY | 11111 | USA | 9 | JTS01 | Jouets et ours | 1 Rue Amusement | Paris | NULL | 45678 | France | 10 +---------+-----------------+-----------------+------------+------------+----------+--------------+
(六) 关于c3p0-config的xml配置文件的问题
关于配置文件的设置如果不注意的话,可能还是会出现很多的问题,推荐一篇博客:
- 文件中经常可能用到&逻辑与的符号,然而这个符号在xml中不能直接写否则肯定会报错,要用&代替。还有其他的符号也需要进行转换。
- 关于文件名,这里的文件名一定要和根元素的名称一致,一般都是c3p0-config。
- c3po连接池的创建读取配置文件时,这里直接写入named-default节点中的name属性值。
1 <c3p0-config> 2 <named-config name="mysql"> 3 <property name="driverClass">com.mysql.jdbc.Driver</property> 4 <property name="jdbcUrl">jdbc:mysql:///databaseName</property> 5 <property name="user">root</property> 6 <property name="password">root</property> 7 </named-config> 8 </c3p0-config>
(七) 注意书写的sql语句的检查
很多时候我们会不小心写错sql语句,那么如果我们在写sql语句之前在MySQL的可视化软件上先进行测试,或者在运行之前先将sql语句打印出来,那么错误的几率就会减少。
(八) 使用BeanUtils.populate(bean,properties)方法时多个表格不要重名以及多个类变量名也不要重名
BeanUtils的populate的原理是通过传入的参数的map中的String类型的key和对象的变量名进行比较,如果相同就为其赋值。那么如果重名的话就会出现赋值错误,肯定会将第一次扫描到表的同列名数据直接赋值就会造成对象的赋值错误。
二、总结分析
以上的问题出现的原因多半是跟自己的不良习惯有关,那么以下我们进行一下总结。
(一) SQL的基础知识要牢固
在JDBC中将会多次要求书写sql语句,如果SQL的基础知识很不扎实,那么将会很头疼,因为写错sql语句就会报错。所以在学习JDBC之前请将SQL的常用基本方法用熟练。
(二) 平时就需要养成严谨的编码习惯
个人理解严谨的编码习惯是书写代码的时候要多写注释,然后写的时候每写完一行大概检查一下,虽然这样的效率很低,但是对于降低bug出现几率很有效。
(三) 平时多总结自己的错误
起始很多的错误都是相通的,平时多注意总结自己的代码错误,那么这种类型的错误可能就不会经常出现了。