文档章节

Java中数据库的使用提高篇

Romanceling
 Romanceling
发布于 2016/04/28 20:37
字数 1184
阅读 50
收藏 2

封装加载驱动、建立连接、关闭连接的方法的类DBUtil;与数据库表Emp相对应的实体类;封装了对表Emp进行增删改查方法的类Dao;测试类Dao中方法的Test类


---------------------------------------------------------------------------------
package util;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import org.apache.commons.dbcp.BasicDataSource;

/**
 * 封装了加载驱动的静态块,与数据库建立连接和关闭连接的静态方法
 * 用来管理数据库的连接数据库的链接信息保存在属性文件中
 * @author Administrator
 *
 */
public class DBUtil {
    public static void main(String[] args) throws Exception {
        Connection conn = getConnection();
        System.out.println(conn.getClass().getName());
        close(conn);
    }
    private static BasicDataSource ds;
    
    static {
        
        try {
            //加载属性文件数据
            Properties prop = new Properties();
            prop.load(DBUtil.class.getClassLoader().getResourceAsStream("db.properties"));                    
            String driverclass = prop.getProperty("jdbc.driverclass");
            String url = prop.getProperty("jdbc.url");
            String user = prop.getProperty("jdbc.user");
            String password = prop.getProperty("jdbc.password");
            String strMaxActive = prop.getProperty("dbcp.MaxActive");
            String strInitialSize = prop.getProperty("dbcp.InitialSize");            
            //1、加载驱动            
            //实例化并初始化连接池。
            ds = new BasicDataSource();
            ds.setDriverClassName(driverclass);
            ds.setUrl(url);
            ds.setUsername(user);
            ds.setPassword(password);
            ds.setMaxActive(Integer.parseInt(strMaxActive));
            ds.setInitialSize(Integer.parseInt(strInitialSize));
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("读取属性文件异常!",e);
        }
    }
    //2、创建连接
    /*
     * 定义一个方法需要什么?
     * 1、返回值类型:
     * 是否有运算结果?如果有,结果的类型就是返回值类型。
     * 2、参数列表:
     * 方法中是否有不确定的参数参与运算?如果有,即为参数。
     */
    public static Connection getConnection() throws SQLException{
        return ds.getConnection();
    }
    //3、归还连接
    public static void close(Connection conn){
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
                throw new RuntimeException("归还连接异常!",e);
            }
        }
    }
}

属性文件:db.properties

jdbc.driverclass=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost :1521:xe
jdbc.user=system
jdbc.password=zjz1992
#dbcp param
dbcp.MaxActive=1
dbcp.InitialSize=1
----------------------------------------------------------------------------------------
JavaBean
满足如下规范的类:
        - 有package
        - 有无参构造器
        - 实现序列化接口
        - 有get/set方法

实体类:
package entity;

import java.io.Serializable;
import java.sql.Date;
/**
 * 1.通常实体类名和表名一致
 * 2.通常该类中的属性名和字段名一致
 * 3.通常该类中的属性都使用封装类型(封装类型可以为null)
 * @author Administrator
 *
 */
public class Emp implements Serializable {
    private static final long serialVersionUID = 1L;
    private Integer empno;
    private String ename;
    private String job;
    private Integer mgr;
    private Date hirdate;
    private Double sal;
    private Double comm;
    private Integer depton;
    public Emp(){        
    }
    public Emp(Integer empno, String ename, String job, Integer mgr, Date hirdate,            Double sal, Double comm,Integer depton) {
        super();
        this.empno = empno;
        this.ename = ename;
        this.job = job;
        this.mgr = mgr;
        this.hirdate = hirdate;
        this.sal = sal;
        this.comm = comm;
        this.depton = depton;
    }
    public Integer getEmpno() {
        return empno;
    }
    public void setEmpno(Integer empno) {
        this.empno = empno;
    }
    public String getEname() {
        return ename;
    }
    public void setEname(String ename) {
        this.ename = ename;
    }
    public String getJob() {
        return job;
    }
    public void setJob(String job) {
        this.job = job;
    }
    public Integer getMgr() {
        return mgr;
    }
    public void setMgr(Integer mgr) {
        this.mgr = mgr;
    }
    public Date getHirdate() {
        return hirdate;
    }
    public void setHirdate(Date hirdate) {
        this.hirdate = hirdate;
    }
    public Double getSal() {
        return sal;
    }
    public void setSal(Double sal) {
        this.sal = sal;
    }
    public Double getComm() {
        return comm;
    }
    public void setComm(Double comm) {
        this.comm = comm;
    }
    public Integer getDepton() {
        return depton;
    }
    public void setDepton(Integer depton) {
        this.depton = depton;
    }    
}

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import entity.Emp;
import util.DBUtil;

public class EmpDao {
    /**
     * 查询所有员工
     * @return List<Emp>
     */
    public List<Emp> findAll(){
        Connection con = null;
        try {
            con = DBUtil.getConnection();
            String sql = "SELECT * FROM emp ";
            PreparedStatement ps= con.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            List<Emp> emps = new ArrayList<Emp>();
            while(rs.next()){
                Emp e = new Emp();
                e.setEmpno(rs.getInt("empno"));
                e.setEname(rs.getString("ename"));
                e.setJob(rs.getString("job"));
                e.setMgr(rs.getInt("mgr"));
                e.setHirdate(rs.getDate("hirdate"));
                e.setSal(rs.getDouble("sal"));
                e.setComm(rs.getDouble("comm"));
                e.setDepton(rs.getInt("depton"));
                emps.add(e);
            }
            return emps;            
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException("查询员工失败!",e);
        }finally{
            DBUtil.close(con);
        }                
    }

    /**
     * 根据Id查询员工
     * @return Emp
     */
    public Emp findById(int id){
        Connection con = null;
        try {
            con = DBUtil.getConnection();
            String sql = "SELECT * FROM emp "
                    + "WHERE empno=?";
            PreparedStatement ps= con.prepareStatement(sql);
            ps.setInt(1, id);
            ResultSet rs = ps.executeQuery();
            if(rs.next()){
                Emp e = new Emp();
                e.setEmpno(rs.getInt("empno"));
                e.setEname(rs.getString("ename"));
                e.setJob(rs.getString("job"));
                e.setMgr(rs.getInt("mgr"));
                e.setHirdate(rs.getDate("hirdate"));
                e.setSal(rs.getDouble("sal"));
                e.setComm(rs.getDouble("comm"));
                e.setDepton(rs.getInt("depton"));
                return e;
            }            
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException("根据Id查询员工失败!",e);
        }finally{
            DBUtil.close(con);
        }
                
        return null;
    }

    /**
     * 修改员工
     */
    public void save(Emp emp){
        Connection con = null;
        try {
            con = DBUtil.getConnection();
            String sql =
                "update emp set "
                + "ename=?,"
                + "job=?,"
                + "mgr=?,"
                + "hirdate=?,"
                + "sal=?,"
                + "comm=?,"
                + "depton=? "
                + "where empno=?";
            PreparedStatement ps =
                con.prepareStatement(sql);
            ps.setString(1, emp.getEname());
            ps.setString(2, emp.getJob());
            ps.setInt(3, emp.getMgr());
            ps.setDate(4, emp.getHirdate());
            ps.setDouble(5, emp.getSal());
            ps.setDouble(6, emp.getComm());
            ps.setInt(7, emp.getDepton());
            ps.setInt(8, emp.getEmpno());
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException("修改员工失败!",e);
        }finally{
            DBUtil.close(con);
        }
    }

    /**
     * 根据Id删除员工
     */
    public void delete(int id){
        Connection con = null;
        try {
            con = DBUtil.getConnection();
            String sql = "DELETE FROM emp "
                    + "WHERE empno=?";
            PreparedStatement ps= con.prepareStatement(sql);
            ps.setInt(1, id);
            int i = ps.executeUpdate();
            if(i>0){
                System.out.println("删除员工成功!");
            }else{
                System.out.println("没有此人!");
            }            
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException("根据Id删除员工失败!",e);
        }finally{
            DBUtil.close(con);
        }
    }
}

package test;
/**
*测试EmpDao中的方法
*/
public class Test {

    /**
     *测试EmpDao的findAll方法
     */
    @Test
    public void testfindAll(){
        EmpDao dao = new EmpDao();
        List<Emp> emps = dao.findAll();
        for(Emp e:emps){
            System.out.println(e.getEmpno()+","+e.getEname());
        }
    }

    /**
     *测试EmpDao的findById方法
     */
    @Test
    public void testfindById(){
        EmpDao dao = new EmpDao();    
        Emp e = dao.findById(1);
        if(e!=null){
            System.out.println(e.getEname()+","+e.getJob());
        }else{
            System.out.println("没有此人!");
        }
    }
    
    /**
     * 测试EmpDao的save方法
     */
    @Test
    public void testsave(){
        EmpDao dao = new EmpDao();
        Emp e = new Emp(2,"小花","咬人",13,null,5000.0,250.0,45);
        dao.save(e);
        System.out.println(e.getEname()+","+e.getJob());
    }
    /**
     * 测试EmpDao的delete方法
     */
    @Test
    public void testdelete(){
        //假设要查询的员工的id为:
        int id = 1;
        EmpDao dao = new EmpDao();    
        dao.delete(id);
    }
}
--------------------------------------------------------------------------------------------

© 著作权归作者所有

Romanceling
粉丝 14
博文 166
码字总数 91809
作品 0
无锡
程序员
私信 提问
【目录导航】JAVA零基础进阶之路

【JAVA零基础入门系列】(已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day6 Java字符串 Day7 Java输入与输出...

MFrank
2018/06/21
0
0
【Java学习路线】新手该如何一步步的学习 Java

新手该如何一步步的学习 Java? 如果真的想学Java,最好要循序渐进,有章有法的学习它! 今天小慕就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容。 首先,给大家分享一张以 企业...

Eddie_yang
2018/11/15
131
0
论Java程序猿的自我价值提升,BATJ资深架构体系助你飞跃瓶颈区!

Java那句广为人知的口号“一次编写,处处运行”也体现出Java价值的关键所在—强大的Java虚拟机使得Java具有跨平台兼容性。 目前流行的Java职业路径包括后端开发员、大数据开发员,嵌入式系统...

Java填坑之路
2018/10/30
0
0
Java程序设计经典300例

《Java程序设计经典300例》共分为3篇。 第1篇 基础篇(第1~5章)本篇主要内容包括:Java语言基础、流程控制、数组、字符串和面向对象编程。通过本篇的学习,读者可以掌握Java开发环境的配置...

请叫我院长
2013/12/03
402
0
Spring之jdbc Template实现CRUD操作

Spring为各种持久化技术都提供了简单操作的模板回调。比如jdbc、hibernate、Mybatis以及JPA等。 这里我们就以JDBC为例,看看JDBC template怎么实现CRUD操作。 JdbcTemplate主要提供以下几类方...

Java攻城玩家
2018/05/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Android双向绑定原理简述

Android双向绑定原理简述 双向绑定涉及两个部分,即将业务状态的变化传递给UI,以及将用户输入信息传递给业务模型。 首先我们来看业务状态是如何传递给UI的。开启dataBinding后,编译器为布局...

tommwq
今天
3
0
Spring系列教程八: Spring实现事务的两种方式

一、 Spring事务概念: 事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。...

我叫小糖主
今天
7
0
CentOS 的基本使用

1. 使用 sudo 命令, 可以以 root 身份执行命令, 必须要在 /etc/sudoers 中定义普通用户 2. 设置 阿里云 yum 镜像, 参考 https://opsx.alibaba.com/mirror # 备份mv /etc/yum.repos.d/CentO...

北漂的我
昨天
3
0
Proxmox VE技巧 移除PVE “没有有效订阅” 的弹窗提示

登陆的时候提示没有有效的订阅You do not have a valid subscription for this server. Please visit www.proxmox.com to get a list of available options. 用的是免费版的,所以每次都提示......

以谁为师
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部