//UserBean.java
package net.z1w.DAO; import net.z1w.DAO.*; /** *UserBean **/ class UserBean{ private int ID; private String name; private String password; /** *构造方法 **/ public UserBean(){ } public void setID(int ID){ this.ID=ID; } public int getID(){ return ID; } public void setName(String name){ this.name=name; } public String getName(){ return name; } public void setPassword(String password){ this.password=password; } public String getPassword(){ return password; } public String toString(){ return "ID:"+ID+" name:"+name+" password:"+password; } }
//UserDAO.java
package net.z1w.DAO; import java.sql.*; import java.util.*; import net.z1w.DAO.*; /** *UserDAO接口,定义了User的数据库操作 **/ public interface UserDAO{ /** *添加用户 * @return either (1) the row count for INSERT, UPDATE, * or DELETE statements or (2) 0 for SQL statements * that return nothing **/ public int addUser() throws SQLException; /** *修改用户 * @return either (1) the row count for INSERT, UPDATE, * or DELETE statements or (2) 0 for SQL statements * that return nothing **/ public int updateUser() throws SQLException; /** *删除用户 * @return either (1) the row count for INSERT, UPDATE, * or DELETE statements or (2) 0 for SQL statements * that return nothing **/ public int deleteUser() throws SQLException; /** *查询用户 *@return 返回查询得到的User **/ public UserBean searchUser() throws SQLException; /** *查询所有用户 * @return 返回List类型,其中存放着所有用户 **/ public List searchAllUser() throws SQLException; /** *删除所有用户 * @return either (1) the row count for INSERT, UPDATE, * or DELETE statements or (2) 0 for SQL statements * that return nothing **/ public int deleteAllUser() throws SQLException; }
//UserDAOOperate.java
package net.z1w.DAO; import java.sql.*; import java.util.*; import net.z1w.DAO.*; /** *UserDAO的实现类 **/ public class UserDAOOperate implements UserDAO{ /** *用户Bean **/ private UserBean user; /** *构造方法 * @param user UserBean类型,表示一个用户 **/ public UserDAOOperate(UserBean user){ this.user=user; } /** *添加一个用户 * @return either (1) the row count for INSERT, UPDATE, * or DELETE statements or (2) 0 for SQL statements * that return nothing **/ public int addUser() throws SQLException{ int result=0; String sql="insert into Users values(?,?,?)"; Connection conn=ConnectionPool.getConnection(); PreparedStatement stat=conn.prepareStatement(sql); stat.setInt(1,user.getID()); stat.setString(2,user.getName()); stat.setString(3,user.getPassword()); result=stat.executeUpdate(); stat.close(); conn.close(); return result; } /** *修改用户 **/ public int updateUser() throws SQLException{ int result=0; Connection conn=ConnectionPool.getConnection(); String sql="update Users set ID=?,name=?,password=? where ID=?"; PreparedStatement stat=conn.prepareStatement(sql); stat.setInt(1,user.getID()); stat.setString(2,user.getName()); stat.setString(3,user.getPassword()); stat.setInt(4,user.getID()); result=stat.executeUpdate(); stat.close(); conn.close(); return result; } /** *删除用户 **/ public int deleteUser() throws SQLException{ int result=0; Connection conn=ConnectionPool.getConnection(); String sql="delete from Users where ID=?"; PreparedStatement stat=conn.prepareStatement(sql); stat.setInt(1,user.getID()); result=stat.executeUpdate(); stat.close(); conn.close(); return result; } /** *查询用户 * @return 返回查询得到的User对象 **/ public UserBean searchUser() throws SQLException{ UserBean userRes=new UserBean(); Connection conn=ConnectionPool.getConnection(); String sql="select ID,name,password from users where ID=?"; PreparedStatement stat=conn.prepareStatement(sql); stat.setInt(1,user.getID()); ResultSet res=stat.executeQuery(); if(res.next()){ userRes.setID(res.getInt("ID")); userRes.setName(res.getString("name")); userRes.setPassword(res.getString("password")); }else{ userRes=null; } res.close(); stat.close(); conn.close(); return userRes; } /** *查询所有用户 * @return 返回List类型,其中存放着查询到的用户 **/ public List searchAllUser() throws SQLException{ List result=new ArrayList(); Connection conn=ConnectionPool.getConnection(); String sql="select * from users"; Statement stat=conn.createStatement(); ResultSet res=stat.executeQuery(sql); while(res.next()){ UserBean userRes=new UserBean(); userRes.setID(res.getInt("ID")); userRes.setName(res.getString("name")); userRes.setPassword(res.getString("password")); result.add(userRes); } res.close(); stat.close(); conn.close(); return result; } /** *删除所有用户 * @return either (1) the row count for INSERT, UPDATE, * or DELETE statements or (2) 0 for SQL statements * that return nothing **/ public int deleteAllUser() throws SQLException{ int result=0; Connection conn=ConnectionPool.getConnection(); Statement stat=conn.createStatement(); String sql="delete from users"; result=stat.executeUpdate(sql); stat.close(); conn.close(); return result; } }
//DAOFactory.java
package net.z1w.DAO; import java.sql.*; import net.z1w.DAO.*; /** *DAOFactory **/ public class DAOFactory{ private DAOFactory(){ } /** * UserDAO工厂方法 * @param user UserBean类型,代表一个用户 * @return 返回UserDAO接口 **/ public static UserDAO getUserDAO(UserBean user){ return new UserDAOOperate(user); } } //ConnectionPool.java
package net.z1w.DAO; import java.sql.*; /** *连接池类 **/ public class ConnectionPool{ /** * 连接池中获得一个空闲连接 * @return 返回Connection类型连接对象 **/ public static Connection getConnection() throws SQLException{ try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); }catch(ClassNotFoundException classE){ System.out.println("驱动程序加载失败"); classE.printStackTrace(); } String odbcSourceName="BlogDB"; String url="jdbc:odbc:"+odbcSourceName; String user=""; String password=""; Connection conn=DriverManager.getConnection(url,user,password); return conn; } }
//TestDAO.java
package net.z1w.DAO; import java.util.*; import java.sql.*; import net.z1w.DAO.*; /** *测试DAO **/ public class TestDAO{ public static void main(String[] args){ UserBean user=new UserBean(); user.setID(1); user.setName("ZhangSan"); user.setPassword("123456"); try{ UserDAO dao=DAOFactory.getUserDAO(user); for(int i=0;i<10;i++){ dao.addUser(); System.out.println("添加了一个用户:"+user); user.setID(i+2); user.setName("Zhang"+i*987/34); user.setPassword("#$^"+i*i*3+"sdf$%"); } dao.deleteUser(); System.out.println("删除了一个用户:"+user); dao.addUser(); System.out.println("添加一个用户:"+user); user.setName("LiSi"); dao.updateUser(); System.out.println("修改了一个用户:"+user); System.out.println("将要查询ID=5的用户."); user.setID(5); UserBean newUser=dao.searchUser(); System.out.println("查询到了一个用户:"+newUser); List list=dao.searchAllUser(); System.out.println("查询所有用户信息,如下:"); Iterator i=list.iterator(); while(i.hasNext()){ System.out.println(i.next()); } dao.deleteAllUser(); System.out.println("删除所有用户成功。Over~~~!"); }catch(SQLException sqlE){ System.out.println("SQL语句出错"); sqlE.printStackTrace(); } } } 呵呵,昨天用了一下午写的。DAO的全称是数据访问对象,通过DAO可以封装数据库的底层操作,使开发人员不必关心对象向表关系的转换,专心于业务逻辑的开发。DAO属于持久层,具体详细的内容我就不介绍了,大家可以去查一些相关的资料,网上有很多。
当然DAO只是数据访问模式的一种,还有DTO,微软的ADO等等,还有Hibernate呵呵。。。DAO适合做一些小型或中型的系统。
|