Java数据库-JDBC基础知识(对女屌丝操作实例)

Java数据库-JDBC基础知识

一、JDBC简介

JDBC是连接java应用程序和数据库之间的桥梁。

1、什么是JDBC?

   为支持Java程序的数据库操作功能,Java语言采用了专门的Java数据库编程接口JDBC(Java Database Connectivity)。JDBC类库中的类依赖于驱动程序管理器,不同数据库需要不同的驱动程序。驱动程序管理器的作用是通过JDBC驱动程序建立与数据库的连接。

2、什么是JDBC API?

    Java应用程序通过JDBC API(java.sql)与数据库连接,而实际的动作则由JDBC驱动程序管理器(JDBC Driver Manager)通过JDBC驱动程序与数据库系统进行连接。

这里写图片描述

JDBC库中所包含的API任务通常与数据库使用:

* 连接到数据库

* 创建SQL或MySQL语句

* 在数据库中执行SQL或MySQL查询

* 查看和修改记录

比如:这里写图片描述


二、JDBC女屌丝实例详解

1、编程准备

1、编程准备

* 明确目的:需求(做什么)
            -拥有女神禁区,享有查看,添加,修改,删除等功能。
* 指导思想:概设详设(怎么做)
* 工具准备:MySQL,MyEclipse,Navicat
* 埋头苦干:编码
* 实战演练:测试
* 大功告成:系统上线

2、JDBC使用详解

JDBC编程步骤:
* 加载驱动程序:Class.forName(driverClass)
  加载Mysql驱动:Class.forName("com.mysql.jdbc.Driver");
  加载Oracle驱动:Class.forName("oracle。jdbc.driver.OracleDriver");

* 获得数据库连接:
  DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/imooc","root","root");

* 创建Statement对象:
  conn.createStatement();

4、详细设计

这里写图片描述

这里写图片描述


2、打通数据库


先新建Java 工程,将jar包导进去:
加载驱动到Eclipse中

*  复制驱动到项目的lib下--> 右键BuildPath --> Add to Build Path

然后新建相应的数据库和表。

编写DBUtil.java

package Girl.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * 这个工具类提供数据库的连接
 * @author 小灰灰
 */
public class DBUtil {
    private static final String URL="jdbc:mysql://127.0.0.1:3306/test";
    private static final String USER="root";
    private static final String PASSWORD="root";

    private static Connection conn=null;

    //写一个静态块,最早执行
    static{
        try {
            //加载驱动程序
            Class.forName("com.mysql.jdbc.Driver");
            //获得数据库的连接
            conn = DriverManager.getConnection(URL, USER, PASSWORD);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    //对外提供一个方法,以获取这个连接
    public static  Connection getConnection(){
        return conn;
    }
}

3、搭建模型层


编写Goddess.java
文件:封装数据表字段,方便数据的存取

package Girl.model;
import java.util.Date;

/**
 * 封装数据表字段
 * @author 小灰灰
 *
 */
public class Goddess {
    //数据表字段
    private Integer id;
    private String user_name;
    private Integer sex=1; //给性别一个默认值为1
    private Integer age;
    private Date birthday;
    private String email;
    private String mobile;
    private String create_user;
    private String update_user;
    private Date create_date;
    private Date update_date;
    private Integer isdel=0;

    //生成get()和set()方法
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUser_name() {
        return user_name;
    }

    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

    public Integer getSex() {
        return sex;
    }

    public void setSex(Integer sex) {
        this.sex = sex;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String getCreate_user() {
        return create_user;
    }

    public void setCreate_user(String create_user) {
        this.create_user = create_user;
    }

    public String getUpdate_user() {
        return update_user;
    }

    public void setUpdate_user(String update_user) {
        this.update_user = update_user;
    }

    public Date getCreate_date() {
        return create_date;
    }

    public void setCreate_date(Date create_date) {
        this.create_date = create_date;
    }

    public Date getUpdate_date() {
        return update_date;
    }

    public void setUpdate_date(Date update_date) {
        this.update_date = update_date;
    }

    public Integer getIsdel() {
        return isdel;
    }

    public void setIsdel(Integer isdel) {
        this.isdel = isdel;
    }

    @Override
    public String toString() {
        return "Goddess [id=" + id + ", user_name=" + user_name + ", sex=" + sex + ", age=" + age + ", birthday="+ birthday + ", email=" + email + ", mobile=" + mobile + ", create_user=" + create_user+ ", update_user=" + update_user + ", create_date=" + create_date + ", update_date=" + update_date+ ", isdel=" + isdel + "]";
    }
}

然后编写模型层的数据处理类:GoddessDao.java–(CRUD操作)

package Girl.dao;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import Girl.db.DBUtil;
import Girl.model.Goddess;

/**
 * 模型层:主要是通过对数据的操作
 *      1、在操作之前必须连接数据库
 *      2、新增女屌丝方法
 *      3、修改女屌丝方法
 *      4、删除女屌丝方法
 *      5、查找女屌丝方法
 *      6、根据名字模糊查找女屌丝方法
 * @author 小灰灰
 */
public class GoddessDao {
    //新增女神
    public void addGoddess(Goddess g) throws SQLException{
        Connection conn=DBUtil.getConnection();
        //参数用?占位符占用
        String sql="" + 
                  "insert into imooc_goddess" +
                  "(user_name,sex,age,birthday,email,mobile," +
                  "create_user,create_date,update_user,update_date,isdel)" +
                  "values(" +
                  "?,?,?,?,?,?,?,current_date(),?,current_date(),?)";

        //预编译SQL语句
        //这个方法会将这个SQL语句加载到驱动程序的执行程序中,但是并不直接执行
        //当调用Excute()方法时真正执行
        PreparedStatement ptmt=conn.prepareStatement(sql);

        //传参,给预编译符赋值
        ptmt.setString(1, g.getUser_name());
        ptmt.setInt(2, g.getSex());
        ptmt.setInt(3, g.getAge());
        //因为我们传进的是java.util类型的值,但是需要java.sql类型的值,因此要进行转换
        ptmt.setDate(4, new Date(g.getBirthday().getTime()));
        ptmt.setString(5, g.getEmail());
        ptmt.setString(6, g.getMobile());
        ptmt.setString(7, g.getCreate_user());
        ptmt.setString(8, g.getUpdate_user());
        ptmt.setInt(9, g.getIsdel());
        ptmt.execute();
    }

    //修改女神
    public void updateGoddess(Goddess g) throws SQLException{
        Connection conn=DBUtil.getConnection();
        //参数用?占位符占用
        String sql="" + 
                  " update imooc_goddess " +
                  " set user_name=?,sex=?,age=?,birthday=?,email=?,mobile=?, " +
                  " update_user=?,update_date=current_date(),isdel=? " +
                  " where id=?";

        //预编译SQL语句
        PreparedStatement ptmt=conn.prepareStatement(sql);

        //传参,给预编译符赋值
        ptmt.setString(1, g.getUser_name());
        ptmt.setInt(2, g.getSex());
        ptmt.setInt(3, g.getAge());
        //因为我们传进的是java.util类型的值,但是需要java.sql类型的值,因此要进行转换
        ptmt.setDate(4, new Date(g.getBirthday().getTime()));
        ptmt.setString(5, g.getEmail());
        ptmt.setString(6, g.getMobile());
        ptmt.setString(7,g.getUpdate_user());
        ptmt.setInt(8, g.getIsdel());
        ptmt.setInt(9,g.getId());
        ptmt.execute();
    }

    //删除女神
    public void delGoddess(Integer[] ids) throws SQLException{
        Connection conn=DBUtil.getConnection();
        //参数用?占位符占用
        String sql="" + 
                  " delete from imooc_goddess " +
                  " where id=?";

        //预编译SQL语句
        PreparedStatement ptmt=conn.prepareStatement(sql);

        //同时删除多个数据
        for(int i=0; i<ids.length; i++){
            ptmt.setInt(1,ids[i]);
            ptmt.execute();
        }
    }

    //查询女神
    public List<Goddess> query() throws Exception{
        Connection conn=DBUtil.getConnection();
        //通过数据库的连接操作数据库,实现增删改查
            Statement stmt = conn.createStatement();

            //执行查询语句
            ResultSet rs=stmt.executeQuery("select id,user_name,age from imooc_goddess");

            //返回一个List
            List<Goddess> gs=new ArrayList<Goddess>();
            Goddess g=null;
            while(rs.next()){
                g=new Goddess();
                //把在数据库中查询到的值通过类Goddess获取到
                g.setId(rs.getInt("id"));
                g.setUser_name(rs.getString("user_name"));
                g.setAge(rs.getInt("age"));

                gs.add(g);
            }
            return gs;
    }

        //根据姓名查询女神
        public List<Goddess> query(List<Map<String, Object>> params) throws Exception{
            List<Goddess> gs=new ArrayList<Goddess>();

            Connection conn=DBUtil.getConnection();
            StringBuilder sb=new StringBuilder();

            //注意这里加一个1=1很重要的一个点,也是开发中经常用到的一个点
            sb.append("select * from imooc_goddess where 1=1");

            if(params!=null && params.size()>0){
                for(int i=0; i<params.size(); i++){
                    Map<String, Object> map=params.get(i);
                    sb.append(" and "+map.get("name")+" "+map.get("rela")+" "+map.get("value")+" ");
                }
            }

            PreparedStatement ptmt=conn.prepareStatement(sb.toString());
            ResultSet rs=ptmt.executeQuery();

            Goddess g=null;
            while(rs.next()){
                g=new Goddess();
                g.setId(rs.getInt("id"));
                g.setUser_name(rs.getString("user_name"));
                g.setAge(rs.getInt("age"));
                g.setSex(rs.getInt("sex"));
                g.setBirthday(rs.getDate("birthday"));
                g.setEmail(rs.getString("email"));
                g.setMobile(rs.getString("mobile"));
                g.setCreate_date(rs.getDate("create_date"));
                g.setCreate_user(rs.getString("create_user"));
                g.setUpdate_date(rs.getDate("update_date"));
                g.setUpdate_user(rs.getString("update_user"));
                g.setIsdel(rs.getInt("isdel"));

                gs.add(g);
            }
            return gs;
        }

    //查询单个女神
    public Goddess get(Integer id) throws SQLException{
        Goddess g=null;
        Connection conn=DBUtil.getConnection();
        //参数用?占位符占用
        String sql="" + 
                  " select * from imooc_goddess " +
                  " where id=?";
        //预编译SQL语句
        PreparedStatement ptmt=conn.prepareStatement(sql);

        //传参,给预编译符赋值
        ptmt.setInt(1,id);
        //此地不能使用execute()这个是执行操作,我们要使用查询操作
        //然后会得到一个结果集
        ResultSet rs=ptmt.executeQuery();
        while(rs.next()){
            g=new Goddess();
            g.setId(rs.getInt("id"));
            g.setUser_name(rs.getString("user_name"));
            g.setAge(rs.getInt("age"));
            g.setSex(rs.getInt("sex"));
            g.setBirthday(rs.getDate("birthday"));
            g.setEmail(rs.getString("email"));
            g.setMobile(rs.getString("mobile"));
            g.setCreate_date(rs.getDate("create_date"));
            g.setCreate_user(rs.getString("create_user"));
            g.setUpdate_date(rs.getDate("update_date"));
            g.setUpdate_user(rs.getString("update_user"));
            g.setIsdel(rs.getInt("isdel"));
        }
        return g;
    }
}

PS:CRUD:增加(Create)、读取(Retrieve)(重新得到数据–>高级应用:报表、分页)、更新(Update)和删除(Delete)


4、搭建控制层


控制层起到一个桥梁的作用,连接模型层和视图层

编写GoddessAction.java

package Girl.action;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import Girl.dao.GoddessDao;
import Girl.model.Goddess;

/**
 * 控制层:主要逻辑处理,接收视图层的请求,控制模型层数据处理
 * @author 小灰灰
 */
public class GoddessAction {
    //添加
    public void add(Goddess goddess) throws Exception{
        GoddessDao dao=new GoddessDao();
        dao.addGoddess(goddess);
    }

    //得到一个女神
    public Goddess get(Integer id) throws SQLException{
        GoddessDao dao=new GoddessDao();
        return dao.get(id);
    }

    //修改
    public void edit(Goddess goddess) throws Exception{
        GoddessDao dao=new GoddessDao();
        dao.updateGoddess(goddess);
    }

    //删除
    public void del(Integer[] ids) throws Exception{
        GoddessDao dao=new GoddessDao();
        dao.delGoddess(ids);
    }

    //查询
    public List<Goddess> query() throws Exception{
        GoddessDao dao=new GoddessDao();
        return dao.query();
    }

    //模糊匹配
    public List<Goddess> queryname(List<Map<String, Object>> params) throws Exception{
        GoddessDao dao=new GoddessDao();
        return dao.query(params);
    }
}

5、搭建视图层


1、流程:
* 程序启动后,一直保持在运行状态
* 循环接收控制台的输入参数
* 调用Action(控制层)响应,并将返回结果展示在控制台中
* 直到输入特定的输入标记(如EXIT)后,程序退出

2、问题点
    * 循环接收参数
    * 某个功能的保持

编写类View.java

package Girl.view;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

import Girl.action.GoddessAction;
import Girl.model.Goddess;

/**
 * 视图层:该层主要解决2个问题
 *      1、怎么让程序一直运行
 *          while循环,scan.hasNext()函数是当有输入时一直循环,否则不循环
 *      2、怎么保证一个功能运行完在执行其他功能
 *          * 定义一个步数,然后一步步增加
 *          * 定义一个常量,标记当前功能操作
 * @author 小灰灰
 */
public class View {
    //提示语
    private static final String CONTEXT="欢迎来到女屌丝禁区:\n" +
                                        "[M]:主菜单\n" +
                                        "[Q]:查看全部女屌丝的信息\n" +
                                        "[G]:查看某位女屌丝的详细信息\n" +
                                        "[S]:根据姓名模糊查询女屌丝信息\n" +
                                        "[A]:添加女屌丝信息\n" +
                                        "[U]:更新女屌丝信息\n" +
                                        "[D]:删除女屌丝信息\n" +
                                        "[B]:退出当前功能,返回主菜单\n" +
                                        "[E]:退出女屌丝禁区\n" +
                                        "请输入您要体验的项目:";

    //操作标记
    private static final String OPERATION_MIAN="MAIN";
    private static final String OPERATION_QUERY="QUERY";
    private static final String OPERATION_GET="GET";
    private static final String OPERATION_ADD="ADD";
    private static final String OPERATION_UPDATE="UPDATE";
    private static final String OPERATION_DELETE="DELETE";
    private static final String OPERATION_SEARCH="SEARCH";
    private static final String OPERATION_EXIT="EXIT";
    private static final String OPERATION_BREAK="BREAK";

    public static void main(String[] args) throws SQLException {
        System.out.println(CONTEXT);

        @SuppressWarnings("resource")
        Scanner scan=new Scanner(System.in);
        Goddess goddess=new Goddess();
        GoddessAction action=new GoddessAction();
        //定义一个记忆变量,记忆上一次是请求的哪一个模块
        String prenious=null;
        //步骤标记
        Integer step=1;

        //while循环,scan.hasNext()函数是当有输入时一直循环,否则不循环
        while(scan.hasNext()){
            String in=scan.next().toString();
            //退出女屌丝禁区
            if(OPERATION_EXIT.equals(in.toUpperCase()) || OPERATION_EXIT.substring(0, 1).equals(in.toUpperCase())){
                System.out.println("您以成功退出女屌丝禁区");
                break;
            }

            //返回当前主菜单
            if(OPERATION_MIAN.equals(in.toUpperCase()) || OPERATION_MIAN.substring(0, 1).equals(in.toUpperCase())){
                step = 1;
                prenious = null;
                System.out.println(CONTEXT);
            }

            //退出当前功能,返回主菜单
            if(OPERATION_BREAK.equals(in.toUpperCase()) || OPERATION_BREAK.substring(0, 1).equals(in.toUpperCase())){
                //返回当前主菜单
                step = 1;
                prenious = null;
                System.out.println(CONTEXT);
            }

            //查看全部女屌丝功能
            if(OPERATION_QUERY.equals(in.toUpperCase()) || OPERATION_QUERY.substring(0, 1).equals(in.toUpperCase())){
                try {
                    List<Goddess> list=action.query();
                    //然后将返回内容输出
                    for (Goddess goddess2 : list) {
                        System.out.println("编号:" + goddess2.getId()+ " 姓名:"+goddess2.getUser_name());
                    }
                    System.out.println("请输入您要体验的项目:");
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            //查看某位女神的详细信息
            if(OPERATION_GET.equals(in.toUpperCase()) || OPERATION_GET.substring(0, 1).equals(in.toUpperCase())
                    || OPERATION_GET.equals(prenious)){
                prenious=OPERATION_GET;
                if(1==step){
                    System.out.println("请输入要查看女屌丝的[ID]:");
                }else if(2==step){
                    try {
                        goddess=action.get(Integer.valueOf(in));
                        if (goddess != null) { 
                            step = 1;
                            prenious = null;
                            System.out.println("编号:" + goddess.getId() +
                                    "\n姓名:" + goddess.getUser_name() +
                                    "\n性别:" + (goddess.getSex() == 1 ? "女":"男") +
                                    "\n年龄:" + goddess.getAge() + "\n生日:" +
                                    goddess.getBirthday() + "\n邮箱:" +
                                    goddess.getEmail() + "\n手机号:" +
                                    goddess.getMobile()); 
                        }else {
                            step = 1; 
                            prenious = null; 
                            System.out.println("查询的女神不存在!"); 
                        }
                    } catch (NumberFormatException e) {
                        step = 1;
                        prenious = null;
                        System.out.println("请输入正确的女屌丝[ID]:");
                    } catch (Exception e) {
                        e.printStackTrace();
                        step = 1;
                        prenious = null;
                        System.out.println("查询女屌丝详细信息失败!!!");
                    }
                }
                //步数加1
                if(OPERATION_GET.equals(prenious)){
                    step++;
                }
            }

            //根据姓名,模糊查询
            if(OPERATION_SEARCH.equals(in.toUpperCase()) || OPERATION_SEARCH.substring(0, 1).equals(in.toUpperCase())
                    || OPERATION_SEARCH.equals(prenious)){
                prenious=OPERATION_SEARCH;
                if(1==step){
                    System.out.println("请输入要查询的女屌丝的姓名,以查看详细信息:");
                }else if(2==step){
                    List<Map<String, Object>> params=new ArrayList<Map<String, Object>>();

                    Map<String, Object> map=new HashMap<String, Object>();
                    //追加的SQL语句字段
                    map.put("name", "user_name");
                    map.put("rela", "=");
                    map.put("value", "'"+in+"'");

                    params.add(map);
                    List<Goddess> result;
                    try {
                        result = action.queryname(params);
                        for(int i=0; i<result.size(); i++){
                            System.out.println("编号:" + result.get(i).getId() +
                                    "\n姓名:" + result.get(i).getUser_name() +
                                    "\n性别:" + (result.get(i).getSex() == 1 ? "女":"男") +
                                    "\n年龄:" + result.get(i).getAge() + "\n生日:" +
                                    result.get(i).getBirthday() + "\n邮箱:" +
                                    result.get(i).getEmail() + "\n手机号:" +
                                    result.get(i).getMobile()); 
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        step = 1;
                        prenious = null;
                        System.out.println("查询女屌丝信息失败");
                    }
                }
                if(OPERATION_SEARCH.equals(prenious)){
                    step++;
                }
            }

            //新增女屌丝
            if(OPERATION_ADD.equals(in.toUpperCase()) || OPERATION_ADD.substring(0, 1).equals(in.toUpperCase())
                    || OPERATION_ADD.equals(prenious)){
                prenious=OPERATION_ADD;
                if(1==step){
                    System.out.println("请输入女屌丝的[姓名]");
                }else if(2==step){
                    goddess.setUser_name(in);
                    System.out.println("请输入女屌丝的[年龄]");
                }else if(3==step){
                    goddess.setAge(Integer.valueOf(in));
                    System.out.println("请输入女屌丝[生日],格式:yyyy-MM-dd");
                }else if(4==step){
                    SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");
                    Date birthday=null;
                    try {
                        birthday = sf.parse(in);
                        goddess.setBirthday(birthday);
                        System.out.println("请输入女屌丝的[邮箱]");
                    } catch (ParseException e) {
                        e.printStackTrace();
                        System.out.println("您输入的格式有误,请重新输入");
                        step=3;
                    }
                }else if(5==step){
                    goddess.setEmail(in);
                    System.out.println("请输入女屌丝的[手机号]");
                }else if(6==step){
                    goddess.setMobile(in); 

                    try {
                        action.add(goddess);
                        System.out.println("新增女屌丝成功");
                    } catch (Exception e) {
                        e.printStackTrace();
                        System.out.println("新增女屌丝失败");
                    }
                }

                if(OPERATION_ADD.equals(prenious)){
                    step++;
                }
            }

            //女屌丝更新功能   
            if(OPERATION_UPDATE.equals(in.toUpperCase()) || OPERATION_UPDATE.substring(0, 1).equals(in.toUpperCase())
                    || OPERATION_UPDATE.equals(prenious)){

                prenious = OPERATION_UPDATE;
                if(1==step){
                    System.out.println("请输入要修改的女屌丝的[ID]:");
                }else if(2==step){
                    try{
                        Integer id = Integer.valueOf(in);
                        goddess = action.get(id);
                        if(goddess == null){
                            step = 1;
                            System.out.println("您要更新的"+ id +"号女屌丝不存在");
                        }
                    }catch (NumberFormatException e){
                        step = 1;
                        System.out.println("请输入正确的女屌丝[ID]:");
                    }catch (Exception e){
                        step = 1;
                        System.out.println("您要更新的[ID]女屌丝不存在");
                    }

                    System.out.println("请输入女屌丝[姓名],如不更新此字段,输入null");
                }else if(step == 3){
                    if(!"null".equalsIgnoreCase(in)){
                        goddess.setUser_name(in);
                    }

                    System.out.println("请输入女屌丝[年龄],如不更新此字段,输入null");
                }else if(step == 4){
                    try {
                        if(!"null".equalsIgnoreCase(in)){
                            Integer age = Integer.valueOf(in);
                            goddess.setAge(age);
                        }
                    } catch (NumberFormatException e) {
                        step = 3;
                        System.out.println("请输入正确的女屌丝[年龄]:");
                    }
                    System.out.println("请输入女神[生日],格式为yyyy-MM-dd:(如不更新该字段,则输入null)");
                }else if(step == 5){
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    try {
                        if (!"null".equalsIgnoreCase(in)) { 
                            goddess.setBirthday(sdf.parse(in));
                        }
                        System.out.println("请输入女神[邮箱]:(如不更新该字段,则输入null)"); 
                    } catch (ParseException e) { 
                        step = 4; 
                        System.out.println("请输入正确的女神的[生日]:"); 
                    }
                }else if (step == 6){
                    if(!"null".equalsIgnoreCase(in)){
                        goddess.setEmail(in);
                    }
                    System.out.println("请输入女神[手机号],如果不更新此项输入null!");
                }else if (step == 7){
                    if(!"null".equalsIgnoreCase(in)){
                        goddess.setMobile(in);
                    }

                    try {
                        action.edit(goddess);
                        System.out.println("更新女屌丝信息成功!");
                        step = 1;
                        prenious = null;
                    } catch (Exception e) {
                        e.printStackTrace();
                        step = 1;
                        prenious = null;
                        System.out.println("更新女屌丝信息失败!");
                    }
                }
                if(OPERATION_UPDATE.equals(prenious)){
                    step++;
                }
            }

            //删除女屌丝功能
            if(OPERATION_DELETE.equals(in.toUpperCase()) || OPERATION_DELETE.substring(0, 1).equals(in.toUpperCase())
                    || OPERATION_DELETE.equals(prenious)){
                prenious = OPERATION_DELETE;
                if(step == 1){
                    System.out.println("请输入要删除的女屌丝的[ID]:(删除多个用逗号隔开,如1,2,...)");
                }else if(step == 2){
                    try {
                        String[]  ss = in.split(",");
                        Integer[] ids = new Integer[ss.length];
                        for(int i=0; i<ss.length; i++){
                            ids[i] = Integer.parseInt(ss[i]);
                        }
                        action.del(ids);
                        System.out.println("删除女屌丝成功!");
                        step = 1;
                        prenious = null;
                    } catch (NumberFormatException e) {
                        step = 1;
                        System.out.println("请输入正确的女屌丝[ID]");
                    } catch (Exception e) {
                        e.printStackTrace();
                        step = 1;
                        prenious = null;
                        System.out.println("删除女屌丝失败");
                    }

                }
                if(OPERATION_DELETE.equals(prenious)){
                    step++;
                }
            }
        }
    }
}

6、测试结果

这里写图片描述


三、JDBC总结


1、JDBC的基本概念:

JDBC是连接数据库的桥梁;
是由Java语言编写的类和接口组成,可以为多种数据库提供统一的访问。

2、采用MVC三层结构:

DB(数据库)、Model(模型层)、Control(控制层)、View(视图层)

模型层(DB + DAO):封装了实现类
控制层:负责调用模型层
视图层调用控制层

3、JDBC各种连接方式的对比:

1、JDBC + ODBC桥的方式。特点:需要数据库的ODBC驱动,仅适用于微软的系统
    这种方式,JDBC将调用传递给ODBC,然后ODBC再调用本地的数据库驱动代码。

2、JDBC + 厂商API的形式。特点:厂商API一般使用C编写
    这种方式,JDBC将调用直接传递给厂商API的服务,然后在调用本地的数据库驱动。

3、JDBC + 厂商Database Connection Server + DataBase的形式。
    特点:在JAVA与DATABASE之间架起了一台专门用于数据库连接的服务器(一般有数据库厂商提供)
    这种方式,JDBC将调用传递给中间服务器,中间服务器再将调用转换成数据库能够被调用的形式,在调用数据库服务器。中间增设数据库服务器能够提升效率,但不如直接操作数据库便捷。

4、JDBC + DATABASE的连接方式。
    特点:这使得Application与数据库分开,开发者只需关心内部逻辑的实现而不需注重数据库连接的具体实现。(没有中间环节,是推荐方式!)

本实例参考慕课网视频


代码详见https://github.com/xhhqyh/JavaDemo/tree/master/JdbcTest

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值