BaseJDBC和CRUDDAO的写法实例代码

我们首先看下BASEJDBC的写法实例:

package com.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mysql.jdbc.Driver;
public class BaseJDBC {
 // 表示你要操作的是哪种类型的数据库
 private final String DRIVER = "com.mysql.jdbc.Driver";
 // 表示你要连接的是哪一台电脑的服务器端口号是多少数据库的名字是什么
 private final String URL = "jdbc:mysql://localhost:3306/zzy";//有时这里需要加上字符集
 // 登录数据库的用户名
 private final String USERNMAE = "root";
 // 登录数据库的密码
 private final String PASSWORD = "root";
 /**
  * 注册驱动 获取连接
  *
  * @return
  */
 public Connection getConnection() {
  try {
   //Driver d=new Driver();
   // 注册驱动:反射(是一项很高深的技术)
   Class.forName(DRIVER);
   // 由连接大管家创建连接对象
   return DriverManager.getConnection(URL, USERNMAE, PASSWORD);
  } catch (ClassNotFoundException e) {
   //e.printStackTrace("数据库的驱动文件没有找到");
  } catch (SQLException e) {
   //数据库的连接错误
   e.printStackTrace();
  }
  return null;
 }
 /**
  * 关闭连接释放资源
  * @param con
  * @param st
  * @param rt
  */
 public void closeAll(Connection con, Statement st, ResultSet rt) {
  try {
   if (rt != null) {
    rt.close();
    rt = null;
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }
  try {
   if (st != null) {
    st.close();
    st = null;
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }
  try {
   if (con != null) {
    con.close();
    con = null;
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
}

CRUDDAO 写法代码实例:

package com.dao;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.*;
import java.util.*;
import java.util.Map.Entry;
/**
 *
 * @author zzy
 *
 * 2016年12月1日下午1:49:49
 */
public class CRUDDAO<T> extends BaseJDBC {
 private Connection con = null;
 private PreparedStatement pt = null;
 private Statement st = null;
 private ResultSet rt = null;
 private Class<T> c;
 public CRUDDAO() {
 }
 public CRUDDAO(Class<T> c) {
  this.c = c;
 }
 /**
  * 查询操作要改造的地方 第一:参数必须抽象 第二:返回类型必须抽象
  *
  * @param <T>
  * @param <T>
  *
  * @return Map<Integer, List<T>>
  */
 public Map<Integer, List<T>> selectAll(Map<String, Object[]> m) {
  int index = 0;
  Map<Integer, List<T>> map = new LinkedHashMap<Integer, List<T>>();
  List<T> list = null;
  try {
   con = super.getConnection();
   if (con != null) {
    Set<Entry<String, Object[]>> set = m.entrySet();
    for (Entry<String, Object[]> entry : set) {
     list = new ArrayList<T>();
     pt = con.prepareStatement(entry.getKey());
     this.bind(entry.getValue());
     rt = pt.executeQuery();
     while (rt.next()) {
      list.add(this.toBean2());
     }
     map.put(++index, list);
    }
   } else {
    System.out.println("数据库连接失败");
   }
  } catch (SQLException e) {
   e.printStackTrace();
  } finally {
   super.closeAll(con, pt, rt);
  }
  return map;
 }
 /**
  * 将数据库查询到的数据进行封装 封装成实体类之后再返回给调用者
  *
  * @return
  */
 private T toBean() {
  T t = null;
  try {
   t = c.newInstance();
   Method[] m = c.getMethods();
   ResultSetMetaData rmt = rt.getMetaData();
   for (int i = 1, count = rmt.getColumnCount(); i <= count; i++) {
    String columName = rmt.getColumnName(i);
    columName = "set" + columName.substring(0, 1).toUpperCase()
      + columName.substring(1);
    for (int j = 0; j < m.length; j++) {
     if (columName.equals(m[j].getName())) {
      m[j].invoke(t, rt.getObject(i));
      break;
     }
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  return t;
 }
 private T toBean2() {
  T t = null;
  try {
   // 创建反射类的实例
   t = c.newInstance();
   // 反射出所有字段
   Field[] field = c.getDeclaredFields();
   for (Field f : field) {
    // 根据反射的字段名得到数据库中的字段值
    Object value = rt.getObject(f.getName());
    f.setAccessible(true);// 打开私有字段的操作权限
    f.set(t, value);// 调用这个字段的公有的set方法封装字段的值
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  return t;
 }
 /**
  * 绑定参数
  *
  * @param obj
  */
 private void bind(Object[] obj) {
  try {
   if (obj != null) {
    for (int i = 0, k = obj.length; i < k; i++) {
     pt.setObject(i + 1, obj[i]);
    }
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
 /**
  * 修改操作 进行的事务的控制 所有命令要么同时提交成功 要么同时回滚
  *
  * @param name
  * @param id
  * @return
  */
 public int[] updateAll(Map<String, Object[]> map) {
  int[] row = new int[map.size()];
  int index = 0;
  int error = 0;
  try {
   con = super.getConnection();
   if (con != null) {
    Set<Entry<String, Object[]>> set = map.entrySet();
    // 关闭连接对象的自动提交的功能
    con.setAutoCommit(false);
    for (Entry<String, Object[]> entry : set) {
     pt = con.prepareStatement(entry.getKey());
     this.bind(entry.getValue());
     row[index] = pt.executeUpdate();
     if (row[index] == 0) {
      throw new Exception("修改失败,数据回滚!");
     }
     index++;
    }
   } else {
    System.out.println("数据库连接失败");
   }
  } catch (Exception e) {
   error++;
   e.printStackTrace();
  } finally {
   if (error > 0) {
    try {
     // 将前面已经执行的命令回滚
     con.rollback();
    } catch (SQLException e) {
     e.printStackTrace();
    }
   } else {
    try {
     // 全部提交
     con.commit();
    } catch (SQLException e) {
     e.printStackTrace();
    }
   }
   super.closeAll(con, st, null);
  }
  return row;
 }
}

总结

以上就是本文关于BaseJDBC和CRUDDAO的写法实例代码的全部内容,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • 使用JDBC实现数据访问对象层(DAO)代码示例

    JAVA是面向对象的语言,开发者在操作数据的时候,通常更习惯面对一个特定类型的对象,如一个用户就是一个User类的对象.DAO层需要做的,就是为上层提供充分的对象支持,让上层再也看不到具体的数据,而是一个个活生生的对象. 增加,删除,查询和修改操作是DAO需要做的最基本的4项操作.查询一般需要提供遍历查询和id查询,对于遍历查询,DAO需要提供User泛型的list对象,对于id查询则提供已经装配好数据的User对象,至于增加和修改操作,上层一般会提供一个User对象,DAO把User对象中的数

  • 基于JDBC封装的BaseDao(实例代码)

    最近闲暇时萌发写一写dao的封装的例子,就将以前写的整理一下. public class BaseDao<T> { Connection conn; PreparedStatement st; ResultSet rs; JdbcUtil jdbcUtil = new JdbcUtil(); int result = 0; private Class<T> persistentClass; @SuppressWarnings("unchecked") publi

  • spring的jdbctemplate的crud的基类dao

    复制代码 代码如下: import java.util.List; /*** * 基本接口 *  * @author xyq * @param <T> *  */public interface BaseDaoInf<T> { /***  * 查询接口  *   * @return  */ public List<T> find(String sql, Object[] parameters, Class<T> cl); /***  *  添加,更新,删除接

  • BaseJDBC和CRUDDAO的写法实例代码

    我们首先看下BASEJDBC的写法实例: package com.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import com.mysql.jdbc.Driver; public class BaseJDBC { // 表示你要操作的是哪种类型

  • Django中间件工作流程及写法实例代码

    熟悉web开发的同学对hook钩子肯定不陌生,通过钩子可以方便的实现一些触发和回调,并且做一些过滤和拦截. django中的中间件(middleware)就是类似钩子的一种存在.下面我们来介绍一下,并且给出一些实例. 1.Middleware的工作流程 我盗了一个图,看网上很多人用这个图,来源已经追不明白了.简单声明一下,这个图不是我的.看着图我们分析一下: 1)django的请求相应流程:HttpRequest -> RequestMiddleware -> view function -&

  • javascript中函数的写法实例代码详解

    具体代码如下所述: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible

  • django中瀑布流写法实例代码

    django中瀑布流初探 img.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .w{ width: 1000px; margin: 0 auto; } .item{ width: 25%; float: left; } .item im

  • Jtable和JTree的写法示例代码

    我们首先看看Jtable和JTree的基本概念和常用构造方法. 一:表格(JTable): 1.基本概念: 表格(JTable)是Swing新增加的组件,主要是为了将数据以表格的形式显示.给显示大块数据提供了简单的机制. 2.常用构造方法: * JTable():使用系统默认的模型创建一个JTable 实例. * JTable(int numRows,int numColumns):创建一个使用DefaultTableModel 指定行.列的空表格. * JTable(Object[ ][ ]

  • C++ 中strcpy标准写法实例详解

    strcpy标准写法 实例代码: // CppReference.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" using namespace std; /* * 说明:字符串拷贝版本1 * 参数:dest目标地址,src源地址 * 返回:返回拷贝好的地址:如果出错或者有重叠,无定义 * 异常:可能出现字符串溢出,及dest所占空间不如src所占空间大. */ char *strcpy_v1(char *dest , const char *s

  • AngularJs表单验证实例代码解析

    常用的表单验证指令如下详情: 1. 必填项验证 某个表单输入是否已填写,只要在输入字段元素上添加HTML5标记required即可: <input type="text" required /> 2. 最小长度 验证表单输入的文本长度是否大于某个最小值,在输入字段上使用指令ng-minleng= "{number}": <input type="text" ng-minlength="5" /> 3.

  • Java使用正则表达式(regex)匹配中文实例代码

    只能输入中文 /** * 22.验证汉字 * 表达式 ^[\u4e00-\u9fa5]{0,}$ * 描述 只能汉字 * 匹配的例子 清清月儿 */ @Test public void a1() { Scanner sc = new Scanner(System.in); String input = sc.nextLine(); String regex = "^[\\u4e00-\\u9fa5]*$"; Matcher m = Pattern.compile(regex).matc

  • jQuery实现table中的tr上下移动并保持序号不变的实例代码

    jQueryMoveTr.html 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE>jQuery-bhang</TITLE> <script type="text/javascript" src="jquery-1.6.2.js"></sc

  • Angularjs 1.3 中的$parse实例代码

    这次我们来看一下angular的Sandboxing Angular Expressions.关于内置方法的,核心有两块:Lexer和Parser.其中大家对$parse可能更了解一点.好了不多废话,先看Lexer的内部结构: 1.Lexer //构造函数 var Lexer = function(options) { this.options = options; }; //原型 Lexer.prototype = { constructor: Lexer, lex: function(){}

随机推荐