javaweb实训第四天上午——JDBC入门(3)https://developer.aliyun.com/article/1414844
5.重构
现在已经完成CRUD的功能,但是有些东西很不爽:
① try -catch 关闭资源;
② 驱动名称,url,username,password 每次都要写;–(万一数据库修改了)
最好把这些东西抽取出来;
③ class.forName 和 拿到连接都一样。 --抽取
④ 硬编码问题.
1 对于连接数据的一些参数,我们可以抽取(以后进行修改的时候方法,只需要改上面的参数就可以了)
2 将参数抽取到一个单独的类里面(好处,其它类要使用只需修改这一份)
3 每次操作都需要去注册驱动,得到连接
public class JDBCUtil { private static String driverName = "com.mysql.jdbc.Driver"; private static String url = "jdbc:mysql://localhost:3306/mydb"; private static String userName = "root"; private static String password = "admin"; private static JDBCUtil instance= null; Connection connection ; static{ try { //注册驱动 Class.forName(driverName); instance = new JDBCUtil(); } catch (Exception e) { e.printStackTrace(); } } private JDBCUtil(){} public static JDBCUtil getInstance(){ return instance; } /** * 拿到连接对象 * @return */ public Connection getConn(){ try { return DriverManager.getConnection(url, userName, password); } catch (SQLException e) { e.printStackTrace(); } return null; } }
4 每次都要关闭资源(这代码没技术含量) JDBCUtil中添加关闭资源的方法
5 参数是硬编码在代码中(我们要把它放到资源文件中去)
/** * 操作数据库的工具类 * @author Administrator * */ public class JDBCUtil { private static JDBCUtil instance= null; //用作读取资源文件 private static Properties prop = null; static{ try { prop = new Properties(); //去加载资源文件 prop.load(Thread.currentThread().getContextClassLoader() .getResourceAsStream("jdbc.properties")); //注册驱动 Class.forName(prop.getProperty("driverName")); instance = new JDBCUtil(); } catch (Exception e) { e.printStackTrace(); } } private JDBCUtil(){} public static JDBCUtil getInstance(){ return instance; } /** * 拿到连接对象 * @return */ public Connection getConn(){ try { return DriverManager.getConnection(prop.getProperty("url"), prop.getProperty("userName"), prop.getProperty("password")); } catch (SQLException e) { e.printStackTrace(); } return null; } /** * 用来关闭资源 */ public void close(ResultSet rs,Statement st,Connection conn){ try { if(rs!=null)rs.close(); } catch (Exception e) { e.printStackTrace(); }finally{ try { if(st!=null)st.close(); } catch (Exception e) { e.printStackTrace(); }finally{ try { if(conn!=null)conn.close(); } catch (Exception e) { e.printStackTrace(); } } } } }
6.课程总结
6.1重点
JDBC的理解(接口或者规范 自己没有实现,由各地数据库厂商实现)
熟练的使用JDBC完成数据库的CRUD贾琏欲执事
理解DAO层,能够熟练把代码抽成DAO层
先创建一个domain包 ,在包里面创建相应的实体类
这个包: cn.itsource.domain
这里面写域对象(Student)
在domain包的同一级,建一个dao包,这个包里面写接口:
cn.itsource.dao
接口名称: IXxxDAO / IXxxDao
在dao这个包里面再建一个包: impl 包 cn.itsource.dao.impl
这个包里面实现dao包里面的接口,这个impl包在dao包里面一层
这个包类的名称:XxxDAOImpl/XxxDaoImpl
6.2难点
1.基本没有多大的难点;回去了的时候多去敲代码实现
6.3如何掌握
1.多去敲上课老师的代码
把练习题做完
6.4 排错技巧
1.通过错误提示排除问题
2.把自己报错的信息在百度上面进行搜索
7.课后练习
1.第一题: 创建一个数据库(名称为jdbcwork)
要求:在数据库中创建一张表student(如下):
id bigint
username varchar 用户名
password varchar 密码
age int 年龄
sex boolean(bit) 性别
intro varchar 简介
2.第二题:在程序中完成对上面的数据库的CRUD
要求:实现dao层,将配置抽取出来(db.properties)
每一步实现都要有相应的注释
作业做完后注意
每一步操作一定要非常清楚,包括对于dao层的抽取,希望大家下来多理解,如果Dao暂时更理解不了的话,这部分一定要多写几次,在真实开发过程中我们对数据库的操作都会抽出一个dao层。
一定要把今天上课老师写的代码都自己多写写