介绍
如何正确的使用BaseJDBC与CRUDDAO方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
我们首先看下<强> BaseJDBC 强>的写法实例:
包com.dao; 进口java.sql.Connection; 进口java.sql.DriverManager; 进口java.sql.ResultSet; 进口java.sql.SQLException; 进口java.sql.Statement; 进口com.mysql.jdbc.Driver; 公开课BaseJDBC {//表示你要操作的是哪种类型的数据库 私人最终字符串司机=癱om.mysql.jdbc.Driver";//表示你要连接的是哪一台电脑的服务器端口号是多少数据库的名字是什么 私人最终字符串URL=癹dbc: mysql://localhost: 3306/zzy";//有时这里需要加上字符集//登录数据库的用户名 私人最终字符串USERNMAE=皉oot";//登录数据库的密码 私人最终字符串密码=皉oot";/* * *注册驱动获取连接 * * @return */公共连接getConnection () { 尝试{//司机d=新司机();//注册驱动:反射(是一项很高深的技术) forname(司机);//由连接大管家创建连接对象 DriverManager返回。getConnection (URL, USERNMAE、密码); }捕捉(ClassNotFoundException e) {//e.printStackTrace(“数据库的驱动文件没有找到“); }捕捉(SQLException e) {//数据库的连接错误 e.printStackTrace (); } 返回null; }/* * *关闭连接释放资源 * @param反对 * @param圣 * @param rt */公共空closeAll(连接案子,语句圣ResultSet rt) { 尝试{ 如果(rt !=null) { rt.close (); rt=零; } }捕捉(SQLException e) { e.printStackTrace (); } 尝试{ 如果(圣!=null) { st.close (); 圣=零; } }捕捉(SQLException e) { e.printStackTrace (); } 尝试{ 如果(con !=null) { con.close (); 反对=零; } }捕捉(SQLException e) { e.printStackTrace (); } } }
<>强CRUDDAO 强>写法代码实例:
包com.dao; 进口java.lang.reflect.Field; 进口java.lang.reflect.Method; 进口java.sql。*; 进口java.util。*; 进口java.util.Map.Entry;/* * * * @author zzy * * 2016年12月1日下午1:49:49 */公开课CRUDDAO扩展BaseJDBC { 私人联系con=零; 私人PreparedStatement pt=零; 私人声明圣=零; 私人ResultSet rt=零; 私人Class c; 公共CRUDDAO () { } 公共CRUDDAO (Class c) { 这一点。c=c; }/* * *查询操作要改造的地方第一:参数必须抽象第二:返回类型必须抽象 * * @param & lt; T> * @param & lt; T> * * @return Map<整数,List 比; */公共Map<整数,List 比;selectAll (Map<字符串、对象[]比;米){ int指数=0; Map<整数,List 在(); List 列表=零; 尝试{ 反对=super.getConnection (); 如果(con !=null) { Set (); pt=con.prepareStatement (entry.getKey ()); this.bind (entry.getValue ()); rt=pt.executeQuery (); 而(rt.next ()) { list.add (this.toBean2 ()); } 地图。(+ +指数列表); } 其他}{ System.out.println(“数据库连接失败“); } }捕捉(SQLException e) { e.printStackTrace (); 最后}{ 超级。closeAll (con, pt, rt); } 返回地图; }/* * *将数据库查询到的数据进行封装封装成实体类之后再返回给调用者 * * @return */私人T toBean () { T T=零; 尝试{ t=c.newInstance (); 方法[]m=c.getMethods (); ResultSetMetaData rmt=rt.getMetaData (); for (int i=1,数=rmt.getColumnCount ();我& lt;=计数;我+ +){ 字符串columName=rmt.getColumnName(我); columName=皊et"+ columName。substring (0, 1) .toUpperCase () + columName.substring (1); for (int j=0;j & lt;m.length;j + +) { 如果(columName.equals (m [j] . getname ())) { m [j]。调用(t, rt.getObject (i)); 打破; } } } }捕捉(异常e) { e.printStackTrace (); } 返回t; } 私人T toBean2 () { T T=零; 尝试{//创建反射类的实例 t=c.newInstance ();//反射出所有字段 字段[]字段=c.getDeclaredFields (); (字段f:字段){//根据反射的字段名得到数据库中的字段值 对象价值=https://www.yisu.com/zixun/rt.getObject (f.getName ()); f.setAccessible(真正);//打开私有字段的操作权限 f。组(t值);//调用这个字段的公有组的方法封装字段的值 } }捕捉(异常e) { e.printStackTrace (); } 返回t; }/* * *绑定参数 * * @param obj */私人空间绑定(Object [] obj) { 尝试{ 如果(obj !=null) { (k=obj.length int i=0;我 如何正确的使用BaseJDBC与CRUDDAO方法