(12)案例----数据库访问JavaBean的设计

例题:数据库操作在一个Web应用程序中的后台处理中占有大比重,设计一组JavaBean封装数据库的基本操作供上层模块调用,提高程序的可移植性。

【分析】:假设操作的数据库名是test,表格是user(userid、username、sex),封装的基本操作包括记录的添加、修改查询全部、按userid查找用户、按userid删除用户

【设计】需要设计以下组件

1.数据库test及其数据库表userUtil.java

2.在类路径(src)下建立属性文件db.properties,存放数据库的基本信息。

3.建立一个获取连接和释放资源的工具类JdbcUtil.java

4. 建立类Uesr.java实现信息对象化,体现面向编程

5. 在上面的基础建立类UserDao.java封装基本的数据库。其操作如下:

5.1. 向数据库中添加用户记录方法:public void add(User user)

5.2. 修改数据库用户记录方法:public void update (User user)

5.3. 删除数据库用户记录方法:public void delete(String uesrId)

5.4.根据id查询用户的方法:public Uesr findUesrById(String userId)

5.5 查询全部用户的方法:public List<User/ QueryAll()


【实现】

1.先建立一个“db.properties”文件,在该文件中存放的基本信息有:数据库驱动程序名、数据库连接字符串、数据库用户名、数据库用户密码。
driver=com.mysql.jdbc.Driver //驱动程序名
url=jdbc:mysql://localhost/test?user?userUnicode=true&characterEncoding=utf-8 //String url的字符串
username=root //数据库用户名
password=123456 //数据库密码
2.建立一个获取连接和释放类的工具类JdbcUil.java
package dbc;
import java.sql.*;
import java.util.Properties;
public final class JdbcUtil {
private static String driver;
private static String url;
private static String user;
private static String password;
private static Properties pr=new Properties();
@SuppressWarnings("unused")
private void JdbcUtils(){}
//设计该工具类的静态初始化器中的代码,该代码再装入类时执行,且执行一次 static {
try{
pr.load(JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties"));
driver=pr.getProperty("driver");
url=pr.getProperty("url");
user=pr.getProperty("username");
password=pr.getProperty("password");
Class.forName(driver);
}catch (Exception e){
throw new ExceptionInInitializerError(e);
}
} //设计获得连接对象的方法getConnection()
public static Connection getConnection()throws SQLException{
return DriverManager.getConnection(url,user,password);
} //设计释放结果集、语句和连接的方法free()
public static void free(ResultSet rs,Statement st,Connection conn){
try {
if (rs!=null)
rs.close();
}catch(SQLException e){e.printStackTrace();
}finally {try {if(st!=null)
st.close();
}catch(SQLException e){e.printStackTrace();
}finally {
if(conn!=null)
try{conn.close();
}catch(SQLException e){e.printStackTrace();
}
}
}
}
}
3.建立类User.java 实现记录信息化,基于对象对数据库关系表进行操作
package vo;
public class User {
private String userid; //设计User类的三个私有属性
private String username;
private String sex;
public String getUserid() //Userid属性的get方法
{
return userid;
}
public void setUserid(String userid) //Uesrid属性的set方法
{
this.userid=userid;
}
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username=username;
}
public String getSex()
{
return sex;
}
public void setSex(String sex)
{
this.sex=sex;
}
}
4.建立类UserDao.java 封装基本的数据库操作
package dao;
import java.sql.*;
import java.util.ArrayList;
import java.util.List; import vo.User;
import dbc.JdbcUtil;
public class UserDao { //向数据库中添加用户记录方法 add()
public void add(User user)throws Exception{
Connection conn=null;
PreparedStatement ps=null;
try{
conn=JdbcUtil.getConnection();
String sql="insert into user values(?,?,?)";
ps=conn.prepareStatement(sql);
ps.setString(1, user.getUserid());
ps.setString(2, user.getUsername());
ps.setString(3, user.getSex());
ps.executeUpdate();
}finally{JdbcUtil.free(null, ps, conn);}
} //修改数据库用户记录的方法 update()
public void update(User user)throws Exception{
Connection conn=null;
PreparedStatement ps=null;
try{
conn=JdbcUtil.getConnection();
String sql="update user set username=?,sex=?,where userid=?";
ps=conn.prepareStatement(sql);
ps.setString(1, user.getUsername());
ps.setString(2, user.getSex());
ps.setString(3, user.getUserid());
ps.executeUpdate();
}finally{JdbcUtil.free(null, ps, conn);}
} //删除数据库用户记录的方法delete()
public void deletes(String userid)throws Exception{
Connection conn=null;
PreparedStatement ps=null;
try{
conn=JdbcUtil.getConnection();
String sql="delete from user where userid=?";
ps=conn.prepareStatement(sql);
ps.setString(1,userid);
ps.executeUpdate();
}finally{JdbcUtil.free(null, ps, conn);}
} //根据id查询用户的方法 fingUserById()
public User findUserById(String userid)throws Exception{
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
User user=null;
try{
conn=JdbcUtil.getConnection();
String sql="selete * from user where userid=?";
ps=conn.prepareStatement(sql);
ps.setString(1, userid);//
rs=ps.executeQuery();
if(rs.next()){
user=new User();
user.setUserid(rs.getString(1));
user.setUsername(rs.getString(2));
user.setSex(rs.getString(3));
}
}finally{JdbcUtil.free(rs, ps, conn);}
return user;
} //查询全部用户的方法QueryAl()
public List<User>QueryAll()throws Exception{
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
List<User>userList=new ArrayList<User>();
try{
conn=JdbcUtil.getConnection();
String sql="select *from user";
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
while(rs.next()){
User user=new User();
user.setUserid(rs.getString(1));
user.setUsername(rs.getString(2));
user.setSex(rs.getString(3));
userList.add(user);
}
}finally{JdbcUtil.free(rs,ps,conn);}
return userList;
}
}

2017.11.5 Java Web ----案例:数据库访问JavaBean的设计的更多相关文章

  1. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1)框架搭建 前言:这 ...

  2. Java SE 之 数据库操作工具类(DBUtil)设计

    JDBC创建数据库基本连接 //1.加载驱动程序 Class.forName(driveName); //2.获得数据库连接 Connection connection = DriverManager ...

  3. Java Web的数据库操作(一)

    一.JDBC技术 1.JDBC简介 JDBC是Java程序与数据库系统通信的标准API,它定义在JDK的API中,通过JDBC技术,Java程序可以非常方便地与各种数据库交互,JDBC在Java程序与 ...

  4. 7.Java Web的数据库操作

    一.环境配置(基于MySQL数据库) 1.下载MySQL数据库 2.下载安装 Navicat,破解方法去吾爱破解网站查询 第一次连接mysql时可能会出现错误,可能是因为二者对密码的编码方法不一致,可 ...

  5. java web程序 上机考试登陆界面设计实现

    今天是java web上机.做一个登陆注册的界面.要求:jsp.mysql数据库,js做一个美观的界面.功能.可以添加 更多啊.我做的界面被老师狠狠的扣了分.问题在于.当用户没有输入任何信息(没有输入 ...

  6. java web中Jdbc访问数据库步骤通俗解释(吃饭),与MVC的通俗解释(做饭)

    一.Jdbc访问数据库步骤通俗解释(吃饭) 1)加载驱动 Class.forName(“com.microsoft.jdbc.sqlserver.SQLServer”); 2) 与数据库建立连接 Co ...

  7. java web 向数据库插入中文数据乱码问题

    一.先检查下是 页面返回数据时已经乱码了,还是在插入数据库的时候乱的码. 二.页面返回乱码: 1.  Web.XML  文件配置 <!-- 配置编码过滤器 --> <filter&g ...

  8. java web工程 数据库操作报驱动类找不到的错误

    这几天在进行数据库的操作,写好数据库操作类后,用测试类测试成功通过,但是部署到tomcat后,从页面访问就会报异常. 最后终于发现是tomcat使用了连接池的数据连接方式. 解决方法是把jdbc ja ...

  9. java web 获取 网页访问次数

    ServletContext context = request.getServletContext(); /** * 从ServletContext中获取计数器对象 */Integer count ...

随机推荐

  1. 1.1 Go安装与项目结构初始化

    软件安装安装包下载地址为:https://golang.org/dl/ 如果打不开可以: https://golang.google.cn/dl/ https://dl.google.com/go/g ...

  2. thinkPHP5.0表单令牌使用

    表单令牌的作用:避免表单的重复提交(如在tp5提交成功等待跳转页面刷新页面会在次提交表单) 原理:在初始化表单时,生成一个session标识‘token’,提交表单时将这个token一起提交过去,然后 ...

  3. Python数据可视化--matplotlib

    抽象化|具体化: 如盒形图 | 现实中的图 功能性|装饰性:没有装饰和渲染 | 包含艺术性美学上的装饰 深度表达|浅度表达:深入层次的研究探索数据 | 易于理解的,直观的表示 多维度|单一维度:数据的 ...

  4. gitlab 优化

    gitlab-ctl reconfigure #初次配置服务 gitlab-ctl start #启动服务 gitlab-ctl stop #停止服务 gitlab-ctl restart #重启服务 ...

  5. pod基本操作

    目录 创建Pod 查询Pod 删除Pod 更新Pod @(kernetes虚拟化学习)[pod基本操作] pod基本操作 ---- 创建Pod kubectl create -f test_pod.y ...

  6. WEB服务器、网站、域名、IP地址、DNS服务器之间的关系

    域名首先指向你的服务器,这个过程叫解析.  服务器分成好多小块,每小块叫一个空间或者一个虚拟主机.  所以当你输入你的域名以后,服务器收到你域名的访问信息,但不知道要打开这么多个小块中的那一个.所以要 ...

  7. Apache和PHP的相关配置

      一.Apache2.4的配置和安装a. 打开Apache24/conf/httpd.conf文件进行编辑.1).38行改为Define SRVROOT "D:/myphp2017/Apa ...

  8. 深入.NET框架。

    1.Microsoft.NET框架结构是一个面向网络,支持各种用户终端的开发平台. 2..NET框架的主要内容有CLR,FCL,ADO.NET,XML,ASP.NET,WinForms和WebSeri ...

  9. WinPcap抓取数据包

    #WinPcap和Libpcap的最强大的特性之一,是拥有过滤数据包的引擎. 它提供了有效的方法去获取网络中的某些数据包,这也是WinPcap捕获机制中的一个组成部分. 用来过滤数据包的函数是#

  10. BZOJ1563: [NOI2009]诗人小G(决策单调性 前缀和 dp)

    题意 题目链接 Sol 很显然的一个dp方程 \(f_i = min(f_j + (sum_i - sum_j - 1 - L)^P)\) 其中\(sum_i = \sum_{j = 1}^i len ...