如何使用JDBC实现数据访问对象层(DAO)

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;
			}
		}

	}
  }

  

时间: 2024-11-15 10:43:33

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

SSH.net之数据访问对象(DAO)

一.新建一个类库,命名为:DAO 二.新建接口:IRepository using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Repository { public interface IRepository<T> { void Delete(T entity); T Get(object id); object Save(T entity); void U

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

摘自Yii官网:http://www.yiiframework.com/doc/guide/1.1/zh_cn/database.dao Yii提供了强大的数据库编程支持.Yii数据访问对象(DAO)建立在PHP的数据对象(PDO)extension上,使得在一个单一的统一的接口可以访问不同的数据库管理系统(DBMS).使用Yii的DAO开发的应用程序可以很容易地切换使用不同的数据库管理系统,而不需要修改数据访问代码. 数据访问对象(DAO) 对访问存储在不同数据库管理系统(DBMS)中的数据提

PHP-------PDO:数据访问抽象层

PDO:数据访问抽象层 它是用来做数据访问的,和数据库之间连接,执行一些SQL语句 这种方式比之前的,Mysqli的方式功能更大一些 用一张图来说明: 人为写了一条SQL语句,是通过Mysqli的对象(封装好的类),通过Mysql驱动,然后在操作Mysql数据库.这是以前的方式. 如果这条SQL语句,想访问另外一个数据库,不是Mysql了,想用一下Oracle Call数据库或者SQL Server数据库,根据逻辑,应该还要有一个类是专门操作Oracle Call 数据库的类 同一张图来表示:

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

PDO:数据访问抽象层 具有三大特点: 1.可以访问其它数据库  所有数据库都可以 2.具有事务功能 3.带有预处理语句功能(防止SQL注入攻击) 实例操作代码如下: <?php //1.造PDO对象$dsn ="mysql:dbname=mydb;host=localhost";//数据库类型:dbname=数据库名称;host=链接的ip或本机$pdo =new PDO($dsn,"root","root");//$dsn,帐号,密码

PDO 数据访问抽象层

//PDO //数据访问抽象层 <?php //1.操作其它数据库 //2.事务功能 //3.防止SQL注入攻击 //造PDO对象 //$dsn = "mysql:dbname=mydb;host=localhost"; //数据源 //$pdo = new PDO($dsn,"root","123"); //写SQL语句 //$sql = "select * from nation"; //$sql = "i

在Spring中基于JDBC进行数据访问时如何控制超时

超时分类 超时根据作用域可做如下层级划分: Transaction Timeout > Statement Timeout > JDBC Driver Socket Timeout Transaction Timeout指一组SQL操作执行时应在设定的时间内完成(提交或回滚),否则将引发超时.它的值应大于 N(语句数) * Statement Timeout Statement Timeout指完成单条SQL语句执行的最大允许时间.它的值应小于JDBC Driver Socket Timeou

PDO:数据访问抽象层

<?php //PDO:数据访问抽象层 //带有事务功能: //dsn:数据源 $dsn="mysql:host=localhost;dbname=aaas"; //造pdo对象 $pdo=new PDO($dsn,"root","");//数据源,用户名,密码 //启动事务 $pdo->beginTransaction(); //写SQL语句 $sql="select * form Info"; //执行SQL语

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

之前所学的数据访问都是用mysqli做成类来访问的,但是mysqli这个类只是针对mysql这个数据库的:那么如果访问其他类型的数据库呢? 那么这就用到了PDO(数据访问抽象层). 一.关于PDO基本语句(以MySQL数据库为例,因为电脑没有其他的数据库) (1)造PDO对象 $dsn = "mysql:dbname=mydb;host=localhost"; $pdo = new PDO($dsn,"root","123"); 格式: $dsn

winform中利用反射实现泛型数据访问对象基类

考虑到软件使用在客户端,同时想简化代码的实现,就写了一个泛型的数据访问对象基类,并不是特别健全,按道理应该参数化的方式实现insert和update,暂未使用参数化,抽时间改进. /// <summary> /// DAO基类 实体名必须要与数据表字段名一致 /// </summary> /// <typeparam name="T"></typeparam> public class BaseDao<T> where T :