把显示Contact的代码放到数据库相关代码之后
把查询到的每一个Contact放到Map，然后统一放到List中
查询不到contact的时候，不再打印null值
把显示所有Contact的代码从数据库相关代码中剥离开
把查询到的Contact放到Map里面
将查询指定Contact的结果放到Map里
把按id获取Contact的代码抽取到方法getContactById中
add Contact class
重构了getAllContacts用Contact类来替换之前的Map
重构了getContactById，用Contact类来替换Map
重构getContactById，抽取给Contact赋值的代码
重构getAllContacts，使用刚刚抽取的getContactFromResultSet
重构getContactById，没有找到指定的Contact就返回null
重命名方法getContactFromResultSet
重构getAllContacts，把使用ResultSet的代码移动出来。现在代码变成了明显的三部分，第一部分连接数据库并查询。第二部分，使用ResultSet。第三部分，释放资源。
重构getAllContacts，把sql查询语句提取到变量中
把创建数据库连接然后执行查询的代码抽取到方法中
把释放数据库资源的代码抽取到方法中
抽取方法：从sql查询结果获得所有的Contact
重构getAllContacts：inline查询语句