JAVA是面向对象的语言,开发者在操作数据的时候,通常更习惯面对一个特定类型的对象,如一个用户就是一个
User类的对象。DAO层需要做的,就是为上层提供充分的对象支持,让上层再也看不到具体的数据,而是一个个活生生的对象。

增加,删除,查询和修改操作是DAO需要做的最基本的4项操作。查询一般需要提供遍历查询和id查询,对于遍历查询,DAO需要提供
User泛型的list对象,对于id查询则提供已经装配好数据的User对象,至于增加和修改操作,上层一般会提供一个User对象,DAO把
User对象中的数据使用Insert语句插入到表格中。删除操作则只需提供一个id即可

 class User{
private long id;
private String name;
private String gender;
public User(){
super();
}
public User(long id,String name,String gender){
super();
this.id = id;
this.name = name;
this.gender = gender;
}
//get,set方法
} //DAO类
public class jdbcDao{
static{
try{
Class.forName("com.mysql.jdbc.Driver");
}catch(Exception e){
e.printStackTrace();
}
}
private Connection getConn(){
try{
return DriverManager.getConnection("jdbc:mysql://localhost:3306:xe","root","password"); }catch(Exception e){
e.printStackTrace();
}
}
return null;
}
private void release(ResultSet rs,Statement ps,Connection conn){
if(rs!=null){
try{
rs.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(ps!=null){
try{
ps.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(conn!=null){
try{
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
//用ID获取用户对象
public User getUserById(long id){
ResultSet rs = null;
PreparedStatement ps = null;
Connection conn = null;
String sql = "select * from user where id = ?";
try{
conn = this.getConnection();
ps = conn.prepareStatement(sql);
ps.setLong(1,id);
rs = ps.executeQuery();
if(rs.next()){
//如果存在,则直接构建并返回用户对象
User user = new User(rs.getLong("id"),rs.getString("name"),rs.getString("gender"));
return user;
}
}catch(Exception e){
e.printStackTrace();
}finally{
this.release(rs,ps,conn);
}
return null;
}
//查询所有用户
public List<User> getAllUsers(){
List<User> list = new ArrayList<User>();
ResultSet rs = null;
PreparedStatement ps = null;
Connection conn = null;
String sql = "select * from user ";
try{
conn = this.getConnection();
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
//循环添加用户对象
while(rs.next()){
User user = new User(rs.getLong("id"),rs.getString("name"),rs.getString("gender"));
list.add(user);
}
}catch(Exception e){
e.printStackTrace();
}finally{
this.release(rs,ps,conn);
}
return list;
}
//修改用户数据
public User updateUser(User user){
PreparedStatement ps = null;
Connection conn = null;
String sql = "update user set id =?,name=?,gender=?";
try{
conn = this.getConnection();
conn.setAutoCommit(false);
ps = conn.prepareStatement(sql);
ps.setLong(1,user.getId());
ps.setString(2,user.getName());
ps.setString(3,user.getGender());
int rst = ps.executeUpdate();
if(rst>0){
return new User(user.getId(),user.getName(),user.getGender()); }
conn.commit();
}catch(Exception e){
e.printStackTrace();
try{
conn.rollback();
}catch(Exception e1){
e1.printStackTrace();
}
}finally{
this.release(null,ps,conn);
}
return null;
}
} //删除用户数据
public boolean deleteUser(long id){
PreparedStatement ps = null;
Connection conn = null;
String sql = "delete from user where id =?;
try{
conn = this.getConnection();
conn.setAutoCommit(false);
ps = conn.prepareStatement(sql);
ps.setLong(1,user.getId());
ps.setString(2,user.getName());
ps.setString(3,user.getGender());
int rst = ps.executeUpdate();
if(rst>0){
return user;
}
conn.commit();
}catch(Exception e){
e.printStackTrace();
try{
conn.rollback();
}catch(Exception e1){
e1.printStackTrace();
}
}finally{
this.release(null,ps,conn);
}
return null;
}
} //插入用户数据
public User insertUser(User user){
PreparedStatement ps = null;
Connection conn = null;
String sql = "insert into user values(?,?,?)";
try{
conn = this.getConnection();
conn.setAutoCommit(false);
ps = conn.prepareStatement(sql);
ps.setLong(1,user.getId());
ps.setString(2,user.getName());
ps.setString(3,user.getGender());
int rst = ps.executeUpdate();
if(rst>0){
return user;
}
conn.commit();
}catch(Exception e){
e.printStackTrace();
try{
conn.rollback();
}catch(Exception e1){
e1.printStackTrace();
}
}finally{
this.release(null,ps,conn);
}
return null;
}
} }
}

  

如何使用JDBC实现数据访问对象层(DAO)的更多相关文章

  1. Yii的学习(2)--数据访问对象 (DAO)

    摘自Yii官网:http://www.yiiframework.com/doc/guide/1.1/zh_cn/database.dao Yii提供了强大的数据库编程支持.Yii数据访问对象(DAO) ...

  2. php PDO:数据访问抽象层

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. winform中利用反射实现泛型数据访问对象基类(1)

    考虑到软件使用在客户端,同时想简化代码的实现,就写了一个泛型的数据访问对象基类,并不是特别健全,按道理应该参数化的方式实现insert和update,暂未使用参数化,抽时间改进. /// <su ...

  4. 【转】在Spring中基于JDBC进行数据访问时怎么控制超时

    http://www.myexception.cn/database/1651797.html 在Spring中基于JDBC进行数据访问时如何控制超时 超时分类 超时根据作用域可做如下层级划分: Tr ...

  5. PDO数据访问抽象层

    PDO数据访问抽象层: 我们使用的mysqli是针对mysql这个数据库扩展的一个类,如果要用到别的数据库的话就可以用PDO来做 1.操作数据库 先来代码 <!--PDO--> <! ...

  6. PDO(数据访问抽象层)、pdo事务功能和预处理功能---2017-05-05

    之前所学的数据访问都是用mysqli做成类来访问的,但是mysqli这个类只是针对mysql这个数据库的:那么如果访问其他类型的数据库呢? 那么这就用到了PDO(数据访问抽象层). 一.关于PDO基本 ...

  7. JS设计模式(三) 数据访问对象模式

    引言 HTML5 提供了两种在客户端存储数据的新方法:localStorage.sessionStorage,他们是Web Storage API 提供的两种存储机制,区别在于前者属于永久性存储,而后 ...

  8. PHP中关于PDO数据访问抽象层的功能操作

    PDO:数据访问抽象层 具有三大特点: 1.可以访问其它数据库  所有数据库都可以 2.具有事务功能 3.带有预处理语句功能(防止SQL注入攻击) 实例操作代码如下: <?php //1.造PD ...

  9. PHP设计模式系列 - 数据访问对象模式

    数据访问对象模式 数据访问对象模式描述了如何创建透明访问数据源的对象. 场景设计 设计一个BaseDao基类,实现数据库操作基本的一些query,insert,update方法 在实际使用的过程中,继 ...

随机推荐

  1. Linux 设置定时任务crontab命令

    1.  crontab命令概念 crontab命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行. cron 系统调度进程. 可以使 ...

  2. 自定义EL表达式的函数

    编写描述的tld文件放到web-inf/目录下,才能在jsp页面上调用 <?xml version="1.0" encoding="UTF-8" ?> ...

  3. AngularJS 2.0

    https://angular.io/docs/ts/latest/guide/learning-angular.html QuickStart: git clone https://github.c ...

  4. php计算字符串长度

    /** * 计算字符串的长度(非字节) * 先用正则将字符串分解为个体单元,然后再计算单元的个数即得出字符串的长度 * from wordpress * @param string $string * ...

  5. workerman centos 7 开机自动启动

    第一步: vim /lib/systemd/system/workerman.service 第二步:复制以下代码保存退出,注意修改你的workerman路径 [Unit] Description=w ...

  6. c3p0连接池]

    <c3p0-config> <!-- 默认配置 --> <default-config> <property name="jdbcUrl" ...

  7. (转)如何学习Java技术?谈Java学习之路

    51CTO编者注:这篇文章已经是有数年“网龄”的老文,不过在今天看来仍然经典.如何学习Java?本篇文章可以说也是面对编程初学者的一篇指导文章,其中对于如何学习Java的步骤的介绍,很多也适用于开发领 ...

  8. Docker镜像的管理和创建

    1. Docker镜像和Docker容器:      Docker镜像实际上是一系列的文件系统,通常的Linux系统一般是两层文件系统,bootfs和rootfs,bootfs就是bootloader ...

  9. Foundation框架

    1.框架是由许多类.方法.函数.文档按照一定的逻辑组织起来的集合,以便使研发程序变的更容易 清除缓存,删除这个文件夹下的所有文件/Users/fanyafang/Library/Developer/X ...

  10. 【转】安装mysql 出现:Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist

    来源:http://blog.csdn.net/dapeng0112/article/details/37053407 本来初始化配置是这样的: scripts/mysql_install_db -- ...