1. DAO简介
    DAO设计模式是属于J2EE数据库层的操作,使用DAO设计模式可以简化大量代码,
增强程序的可移植性。

2. DAO各部分详解
    DAO设计模式包括5个重要的部分,分别为数据库连接类,VO类,DAO接口,
DAO实现类以及DAO工厂类。

  2-1 数据库连接类:
    数据库连接类的主要功能就是连接数据库并获得连接对象,
以及关闭数据库。通过数据库连接类可以大大地简化开发,在需要进行数据库连接时,
只需要创建该类的实例,并调用其中的方法就可以获得数据库连接对象和关闭数据库而不必进行重复操作。

  2-2 VO类
    VO类是一个包含属性和表中字段完全对应的类。并在该类中提供setter和getter方法
来设置并获取该类中的属性。

  2-3 DAO接口
    DAO接口中定义了所有的用户操作,如添加记录,删除记录以及查询记录等。不过因为是接口
所以仅仅是定义,还需要子类来实现。

  2-4 DAO实现类
    DAO实现类实现了DAO接口,并实现了DAO接口中定义的所有方法。在DAO实现中
通过连接数据库进行数据库操作。

  2-5 DAO工厂类
    在没有DAO工厂类的情况下,必须通过创建DAO实现类的实例才能完成数据库的操作。
这是就必须知道具体的子类,对于后期的修改非常不方便。如后期需要创建一个操作Oracle
的DAO实现类,这是就必须修改所有使用DAO实现类的代码。
    使用DAO工厂类可以比较方便地对代码进行管理,而且可以很好滴解决后期修改的问题,。
通过DAO工厂类的一个静态方法来获得DAO实现类的实例。这是如果需要替换DAO实现类,
只需要修改DAO工厂类中的方法代码,而不必修改所有的操作数据库代码。

3.示例:构建一个用户数据操作的DAO,要求如下:

  1)数据库连接类:DatabaseConnection.java,用于连接mysql中javaweb数据库。
  2)VO类:User.java,其中的属性名对应于user表中的字段名
  3)DAO接口类: UserDAO.java,实现对user表的添加、修改、删除、查询等操作。
  4)DAO实现类:UserDAOImpl.java
  5)DAO工厂类:DAOFactory.java ;
  并根据这个DAO实现添加记录的数据库操作:


DataBaseConnection.java

  1. package com.mhb;
  2. import java.sql.*;
  3.  
  4. //主要功能就是连接数据库,关闭数据库
  5. public class DataBaseConnection {
  6. //定义数据库驱动类
  7. private final String DBDRIVER = "com.mysql.jdbc.Driver";
  8. //定义数据库连接URL
  9. private final String DBURL = "jdbc:mysql://localhost/bbs";
  10. //定义数据库连接用户名
  11. private final String DBUSER = "root";
  12. //定义数据库连接密码
  13. private final String DBPASSWORD = "123456";
  14. //定义数据库连接对象
  15. private Connection conn = null;
  16. //构造方法,加载驱动
  17. public DataBaseConnection(){
  18. try{
  19. Class.forName(DBDRIVER);
  20. this.conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
  21. System.out.println("数据库连接成功!");
  22. }catch(Exception e){
  23. System.out.println("加载驱动失败!");
  24. }
  25. }
  26.  
  27. //取得数据库连接
  28. public Connection getConnection(){
  29. return conn;
  30. }
  31.  
  32. //关闭数据库
  33. public void close(){
  34.  
  35. try {
  36. conn.close();
  37. } catch (SQLException e) {
  38. System.out.println("数据库连接关闭失败!");
  39. }
  40. }
  41. }

User.java

  1. package com.mhb;
  2.  
  3. public class User {
  4. //用户ID
  5. private int userid;
  6. //用户姓名
  7. private String username;
  8. //用户密码
  9. private String password;
  10.  
  11. public int getUserid() {
  12. return userid;
  13. }
  14. public void setUserid(int userid) {
  15. this.userid = userid;
  16. }
  17. public String getUsername() {
  18. return username;
  19. }
  20. public void setUsername(String username) {
  21. this.username = username;
  22. }
  23. public String getPassword() {
  24. return password;
  25. }
  26. public void setPassword(String password) {
  27. this.password = password;
  28. }
  29. }

UserDAO.java

  1. package com.mhb;
  2. import java.util.*;
  3.  
  4. //定义数据库操作方法
  5. public interface UserDAO {
  6. //增加操作
  7. public void insert (User user) throws Exception;
  8. //修改操作
  9. public void update (User user) throws Exception;
  10. //删除操作
  11. public void delete (int userid) throws Exception;
  12. //按ID查询
  13. public User queryById(int userid) throws Exception;
  14. //查询全部
  15. public List queryAll() throws Exception;
  16.  
  17. }

UserDAOImpl.java

  1. package com.mhb;
  2.  
  3. import java.sql.PreparedStatement;
  4. import java.util.List;
  5.  
  6. public class UserDAOImpl implements UserDAO {
  7.  
  8. //添加操作
  9. public void insert(User user) throws Exception {
  10. String sql = "INSERT INTO user(username,password) VALUES (?,?)";
  11. PreparedStatement pstmt = null;
  12. DataBaseConnection dbc = null;
  13. //下面是针对数据库的具体操作
  14. try{
  15. dbc= new DataBaseConnection();
  16. pstmt = dbc.getConnection().prepareStatement(sql);
  17. pstmt.setString(1, user.getUsername());
  18. pstmt.setString(2, user.getPassword());
  19. //进行数据库更新
  20. pstmt.executeUpdate();
  21. pstmt.close();
  22. }catch(Exception e){
  23. throw new Exception ("操作出现异常");
  24. }finally{
  25. //关闭数据库
  26. dbc.close();
  27. }
  28. }
  29.  
  30. public void delete(int userid) throws Exception {
  31.  
  32. }
  33.  
  34. public List queryAll() throws Exception {
  35. return null;
  36. }

DAOFactory.java

  1. package com.mhb;
  2.  
  3. public class DAOFactory {
  4. public static UserDAO getUserDAOInstance(){
  5. return new UserDAOImpl();
  6. }
  7. }

MySql数据库中user表语句

  1. CREATE TABLE `user` (
  2. `userid` int(11) NOT NULL AUTO_INCREMENT,
  3. `username` varchar(20) DEFAULT NULL,
  4. `password` varchar(20) DEFAULT NULL,
  5. PRIMARY KEY (`userid`)
  6. ) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8

至此,DAO的5个部分就以全部结束,接下来通过DAO工厂获得DAO实现类实例。

通过DAO实现类中的方法就可以完成添加记录的数据库操作了。

添加记录AddUserDemo.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <%@ page import="com.mhb.*" %>
  3.  
  4. <html>
  5. <head><title>添加用户</title></head>
  6.  
  7. <body>
  8. <form action="" method="post">
  9. <table>
  10. <tr>
  11. <td colspan="2">添加用户</td>
  12. </tr>
  13. <tr>
  14. <td>用户姓名:</td>
  15. <td><input type="text" name="username"></td>
  16. </tr>
  17. <tr>
  18. <td>用户密码</td>
  19. <td><input type="password" name="password"></td>
  20. </tr>
  21. <tr>
  22. <td colspan="2">
  23. <input type="submit" value="添加">
  24. <input type="reset" value="重置">
  25. </td>
  26. </tr>
  27. </table>
  28. </form>
  29.  
  30. <%
  31. //获取表单中输入的用户名以及密码
  32. String userName = (String)request.getParameter("username");
  33. String password = (String)request.getParameter("password");
  34. //通过DAO工厂获得DAO实现类的实例
  35. UserDAO userDAO = DAOFactory.getUserDAOInstance();
  36. //设置需要添加的用户
  37. User user = new User();
  38. user.setUsername(userName);
  39. user.setPassword(password);
  40. //如果用户名密码不为空则添加入数据库
  41. if(userName != null && userName != ""){
  42. if(password != null && password != ""){
  43. userDAO.insert(user);
  44. }
  45. }else{
  46. out.print("用户名或密码不能为空!");
  47. }
  48. %>
  49. </body>
  50. </html>

浏览器显示


username:admin,password:123456

数据库显示

DAO设计模式 -- 使用数据库连接类连接MySql数据库并实现添加用户的更多相关文章

  1. Myeclipse WEB工程JSP使用JNDI 数据库连接池连接Mysql数据库

    在网上查了很多,最后实现了.下面写一下过程: 首先,在WEBROOT/META-INF下建一个文件context.xml,内容为: <?xml version="1.0" e ...

  2. Java连接MySQL数据库。编写一个应用程序,在主类Test_4类中,通过JDBC访问stu数据库,显示t_student表中的内容(表结构见表1),显示效果自己设计。

    题目2:编写一个应用程序,在主类Test_4类中,通过JDBC访问stu数据库,显示t_student表中的内容(表结构见表1),显示效果自己设计.之后,可根据显示的内容进行某条记录的删除(以id为条 ...

  3. java jdbc 连接mysql数据库 实现增删改查

    好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...

  4. jsp-2 简单的servlet连接mysql数据库 增删改查

    连接mysql数据库的操作 有增删改查 用的包有 commons-lang3-3.5 mysql-connector-java-5.1.40-bin 但是实际上也就是 数据查询和数据处理两种 所以对数 ...

  5. jsp-3 简单的servlet连接mysql数据库 使用mvc的登录注册

    简单的servlet连接mysql数据库 使用mvc的登录注册 commons-dbutils-1.6 mysql-connector-java-5.1.40-bin c3p0-0.9.5.2 mch ...

  6. Java进阶(二十五)Java连接mysql数据库(底层实现)

    Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜 ...

  7. Spring Boot连接MySQL数据库

    上篇 只需两步!Eclipse+Maven快速构建第一个Spring Boot项目 已经构建了一个Spring Boot项目,本文在此基础上进行连接MySQL数据库的操作. 1. pom.xml添加依 ...

  8. 分页查询信息(使用jdbc连接mysql数据库实现分页查询任务)

             分页查询信息       使用jdbc连接mysql数据库实现分页查询任务 通过mysql数据库提供的分页机制,实现商品信息的分页查询功能,将查询到的信息显示到jsp页面上. 本项目 ...

  9. hibernate简单连接mysql数据库配置

    使用hibernate连接mysql数据库 1:项目搭建好之后,在lib包中添加必要的jar包,和mysql数据库驱动jar包: jar包可以在hibernate的下载包(hibernate3.3.2 ...

随机推荐

  1. MvvmLight for Xamarin.Forms

    一.Xamarin.Forms 不使用框架时的绑定 需要注意的是BindingContent,不是DataContent <ContentPage xmlns="http://xama ...

  2. java 格式化日期(DateFormat)

    import java.text.DateFormat; import java.util.Date; /** * 格式化时间类 DateFormat.FULL = 0 * DateFormat.DE ...

  3. 帝国cms后台不停的登录成功

    http://bbs.phome.net/showthread-13-305985-1.html 感谢各位的支持与帮助! e/data/adminlogin目录权限没有问题 问题在:计划任务中,刷新自 ...

  4. [WinForm]- 设置DataGridView单元格内根据不同值显示图片

    首先设置要显示图片的列 DataGridViewImageColumn status = new DataGridViewImageColumn(); status.DisplayIndex = ; ...

  5. matlab实现雅可比、高斯塞德尔、后项误差计算

    稀疏矩阵生成: function [a, b] = aparsesetup(n) e = ones(n, 1); n2 = n / 2; a = spdiags([-e 3*e -e], -1:1, ...

  6. SQLServer2005:在执行批处理时出现错误。错误消息为: 目录名无效

    删除数据时忘了想delete删除的话会记录日志,更何况是我删除百万条数据,结果还没删完服务器内存就占慢了,一切数据都进不来了,估计这种情况导致我的数据库有问题了,右键打开表提示:目录名无效,执行SQL ...

  7. adb 选择设备

    在adb中有多个设备时,可以先adb devices列举出设备,然后可以通过adb -s <设备名>  [其他参数] 对某个设备进行操作. 例如: adb -s 0123456789ABC ...

  8. SQL Server数据库文件存储目录转移

    USE master GO DECLARE @DBName sysname, ) DECLARE @DB table( name sysname, physical_name sysname) BEG ...

  9. 3563: DZY Loves Chinese - BZOJ

    Description神校XJ之学霸兮,Dzy皇考曰JC.摄提贞于孟陬兮,惟庚寅Dzy以降.纷Dzy既有此内美兮,又重之以修能.遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图,其上有N座祭 ...

  10. 第五周技术博客发表 web 网页开发

    <html><head> <title> HTML</title></head><body > <h1>会员注册界面 ...