有关JDBC--运用接口

通过接口对数据库的增删改查进行代码改良:

第一步是创建代码与数据库进行的一系列连接:
package com.jdbc.util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class JdbcUtil {
    private static String driver;
    private static String url;
    private static String username;
    private static String password;

    static {
        //创建properties对象,获取属性文件的内容
        Properties p=new Properties();
        //动态获取属性文件的读取流对象,,防止jdbc.properties移动位置找不到该文件
        //其中JdbcUtil.class.getResourceAsStream动态定位到项目的bin文件
        InputStream is=JdbcUtil.class.getResourceAsStream("/jdbc.properties");

        try{

            //加载属性配置文件
            p.load(is);

            //获取jdbc参数
            driver=p.getProperty("driver");
            url=p.getProperty("url");
            username=p.getProperty("username");
            password=p.getProperty("password");
            //加载驱动,以便后续调用Connection方法
            Class.forName(driver);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    //获取Connection对象
    public static Connection getConnection() {
        Connection conn=null;
        try {
            conn= DriverManager.getConnection(url,username,password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

    //封装获取PreparedStatement对象
    public static PreparedStatement getPreparedStatement(Connection conn,String sql) {
        PreparedStatement ps=null;
        try {
            //由于一些时候我们需要设置手动提交及回滚,所以此处一般不要写成ps=getConnection().prepareStatement(sql);
            ps=conn.prepareStatement(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return ps;
    }

    //封装获取Statement对象
    public static Statement getStatement(Connection conn) {
         Statement stmt=null;
         try {
             stmt=conn.createStatement();
         } catch (SQLException e) {
             e.printStackTrace();
         }
         return stmt;
    }

    //关闭资源
    //由于PreparedStatement是Statement的子对象,所以只创建stmt参数即可
    public static void closeAll(ResultSet rs,Statement stmt,Connection conn) {
        try {
            rs.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        try{
            stmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    public static void close(Statement stmt,Connection conn) {
        try{
            stmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    //封装DML,由于不确定sql中含有待传入的实参,因此采用可变参数
    public static int executeDML(String sql,Object...objs) {
        Connection conn=getConnection();
        PreparedStatement ps=JdbcUtil.getPreparedStatement(conn,sql);
        int i=-1;

        try {
            conn.setAutoCommit(false);
            for (int j=0;j<objs.length;j++) {
                //给占位符赋值
                ps.setObject(j+1,objs[j]);
            }
            //执行sql命令
            i=ps.executeUpdate();
            conn.commit();
        } catch (SQLException e) {
            try {
                conn.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
        } finally {
            //关闭资源
            JdbcUtil.close(ps, conn);
            return i;
        }
    }
}
第二步是创建sql语句的相关操作:
package com.jdbc.dao;

import com.jdbc.pojo.User;

import java.util.ArrayList;

public interface UserDao {
    //查询所有账户信息
    public ArrayList<User> selAllUserInfo();
    //根据id查询账户信息
    public User selUserById(int id);
    //添加账户信息
    public int insUser(int id,String name,String password);
    //修改账户信息
    public int upUser(String newName,int id);
    //删除账户信息
    public int delUser(String name);
}
package com.jdbc.DaoImpl;

import com.jdbc.dao.UserDao;
import com.jdbc.pojo.User;
import com.jdbc.util.JdbcUtil;

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

public class UserDaoImpl implements UserDao {
    //查询所有用户信息
    public ArrayList<User> selAllUserInfo() {
        //声明Jdbc对象
        Connection conn=null;
        PreparedStatement ps = null;
        ResultSet rs=null;
        //声明集合对象
        ArrayList<User> list=null;
        try {
            //获取连接对象
            conn= JdbcUtil.getConnection();
            //创建sql命令
            String sql="select * from data";
            //创建sql命令对象
            ps=JdbcUtil.getPreparedStatement(conn,sql);
            //执行sql
            rs=ps.executeQuery();
            list=new ArrayList<>();
            //遍历查询结果
            while (rs.next()) {
                User u=new User();
                u.setId(rs.getInt("id"));
                u.setName(rs.getString("name"));
                u.setPassword(rs.getString("password"));
                list.add(u);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //关闭资源
            JdbcUtil.closeAll(rs,ps,conn);
        }
        //返回结果
        return list;
    }
    //根据id查询用户信息
    public User selUserById(int id) {
        //声明JDBC变量
        Connection conn=null;
        PreparedStatement ps=null;
        ResultSet rs=null;
        //声明User对象
        User u=null;
        try {
            //获取连接对象
            conn=JdbcUtil.getConnection();
            //创建sql命令
            String sql="select * from data where id=?";
            //获取sql命令对象
            ps=JdbcUtil.getPreparedStatement(conn,sql);
            //给占位符赋值
            ps.setInt(1,id);
            //执行sql
            rs=ps.executeQuery();
            //遍历结果
            while (rs.next()) {
                u=new User();
                u.setId(rs.getInt("id"));
                u.setName(rs.getString("name"));
                u.setPassword(rs.getString("password"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭资源
            JdbcUtil.closeAll(rs,ps,conn);
        }
        //返回结果
        return u;
    }
    //添加用户信息
    public int insUser(int id,String name,String password) {
        //创建sql语句
        String sql="insert into data values(?,?,?)";
        int i=JdbcUtil.executeDML(sql,id,name,password);
        return i;
    }
    //修改用户信息
    public int upUser(String newPassword,String name) {
        return JdbcUtil.executeDML("update data set password=? where name=?",newPassword,name);
    }
    //删除用户信息
    public int delUser(String name) {
        return JdbcUtil.executeDML("delete from data where name=?",name);
    }
}
第三步是进行业务具体操作:
package com.jdbc.service;

public interface UserService {
    //查询全部账户信息
    public void selAllUserInfo();
    //根据id查询用户信息
    public void selUserInfoById();
    //添加用户信息
    public void insUserInfo();
    //删除用户信息
    public void delUserInfo();
    //更新用户信息
    public void upUserInfo();
}
package com.jdbc.serviceImpl;

import com.jdbc.DaoImpl.UserDaoImpl;
import com.jdbc.dao.UserDao;
import com.jdbc.pojo.User;
import com.jdbc.service.UserService;

import java.util.ArrayList;
import java.util.Scanner;

public class serviceImpl implements UserService {
    //声明数据库层对象
    UserDao user=new UserDaoImpl();
    //查询全部账户信息
    public void selAllUserInfo() {
        ArrayList<User> list=user.selAllUserInfo();
        System.out.println("id\tname\tpassword");
        for (int i=0;i<list.size();i++) {
            User u=list.get(i);
            System.out.println(u.getId()+"\t"+u.getName()+"\t"+u.getPassword());
        }
    }
    //根据id查询用户信息
    public void selUserInfoById() {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入要查询的员工编号:");
        int id=sc.nextInt();
        User u=user.selUserById(id);
        if (u!=null) {
            System.out.println("id\tname\tpassword");
            System.out.println(u.getId()+"\t"+u.getName()+"\t"+u.getPassword());
        } else {
            System.out.println("查无此人");
        }
    }
    //添加用户信息
    public void insUserInfo() {
        //获取用户数据
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入用户编号");
        int id=sc.nextInt();
        System.out.println("请输入用户名");
        String name=sc.next();
        System.out.println("请输入用户密码");
        String password=sc.next();
        //调用数据库操作数据库
        //创建数据库层对象
        int i=user.insUser(id,name,password);
        if (i>0) {
            System.out.println("注册成功");
        } else {
            System.out.println("注册失败");
        }
    }
    //删除用户信息
    public void delUserInfo(){
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入需删除的用户名:");
        String name=sc.next();
        int i=user.delUser(name);
        if (i>0) {
            System.out.println("注销成功");
        } else {
            System.out.println("注销失败");
        }
    }
    //更新用户密码
    public void upUserInfo() {
        //获取用户数据
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入用户名");
        String name=sc.next();
        System.out.println("请输入用户新的密码");
        String newPassword=sc.next();
        //调用数据库操作数据库
        //创建数据库层对象
        int i=user.upUser(newPassword,name);
        if (i>0) {
            System.out.println("更新成功");
        } else {
            System.out.println("更新失败");
        }
    }
}
第四步是声明类用户(其实这个步骤应该放在最前面的,但是本次学习的重点是第二步和第三步吖)
package com.jdbc.test;

import com.jdbc.service.UserService;
import com.jdbc.serviceImpl.serviceImpl;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        UserService es=new serviceImpl();
        do{
            System.out.println("1. 查询所有账户信息");
            System.out.println("2. 根据编号查询账户信息");
            System.out.println("3. 新增用户信息");
            System.out.println("4. 修改用户密码");
            System.out.println("5. 注销用户信息");
            System.out.println("6. 退出系统");

            Scanner sc=new Scanner(System.in);
            int ch=sc.nextInt();
            switch (ch) {
                case 1:
                    es.selAllUserInfo();break;
                case 2:
                    es.selUserInfoById();break;
                case 3:
                    es.insUserInfo();break;
                case 4:
                    es.upUserInfo();break;
                case 5:
                    es.delUserInfo();break;
                case 6:
                    System.out.println("谢谢使用");return;
                default:
                    System.out.println("输入有误,请重新输入。");
                    break;
            }
        } while (true);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值