jdbc实战:实现女神的增删改查

来源:互联网 发布:相同名字的数据求和 编辑:程序博客网 时间:2024/05/21 09:09

jdbc实现女神的增删改查


最近在学数据库和jdbc编程方面的东西,本人利用空暇时间来写了个小项目,也算是练练自己的水平吧,其中里面也用到了mvc架构,这对新人来说可以熟悉熟悉,这也算蛮重要的吧。

在这里呢 先来简单的阐述一下什么是mvc架构,m当然是指model(模型层),v 是指view(视图层),c 是control(控制层)。个人理解就是将程序设计层层分开,有利于分工合作,也降低类编程难度

用这张图简单描述一下这里写图片描述

了解了mvc,接下来开始我的项目讲解吧!


首先配置数据库,在这里我把数据库的配置先给出

//检查数据表是否已存在DROP TABLE IF EXISTS `imooc_goddess`;//添加数据表CREATE TABLE `imooc_goddess` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `user_name` varchar(30) NOT NULL,  `sex` int(11) DEFAULT NULL,  `age` int(11) DEFAULT NULL,  `birthday` date DEFAULT NULL,  `email` varchar(30) DEFAULT NULL,  `mobile` varchar(11) DEFAULT NULL,  `create_user` varchar(30) DEFAULT NULL,  `create_date` date DEFAULT NULL,  `update_user` varchar(30) DEFAULT NULL,  `update_date` date DEFAULT NULL,  `isdel` int(11) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;//添加数据表信息INSERT INTO `imooc_goddess` VALUES ('1', '小溪', '1', '22', '2000-12-12', 'xiaoxi@163.com', '13911111111', 'ADMIN', '2015-01-08', 'ADMIN', '2015-01-08', '0');

ok!接下来就交给eclipse吧!

创建model包,创建女神类goddess。

package com.jeker.model;import java.util.Date;public class Goddess {//设置goddess的各种属性    private Integer id;    private String user_name;    private Integer age;    private Date birthday;    private String email;    private String mobile;    private String create_user;    private String updata_user;    private Date create_date;    private Date update_date;    //设置各元素的setter getter方法    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 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 getUpdata_user() {        return updata_user;    }    public void setUpdata_user(String updata_user) {        this.updata_user = updata_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;    }//重写tostring方法    @Override    public String toString(){        return "id:"+id+"|"+"姓名:"+user_name+"|"+"邮箱:"+email+"|"    +"手机号:"+mobile+"|"+"生日:"+birthday+"|"+"年龄:"+age;    }}

这个model类应该不难,这里就直接跳过。


接下来来写一个获取connection的类 如下:

package com.jeker.db;import java.io.FileInputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;import java.util.Properties;public class DBUtil {    //定义常量    private static String driver="com.mysql.jdbc.Driver";    private static String user="root";    private static String url="jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=GBK";    private static String pass="chen476668757";    //定义一个connection对象    static Connection conn=null;    //此处为代码块    static{        try {            Class.forName(driver);            conn=DriverManager.getConnection(url, user, pass);        }         catch (ClassNotFoundException e) {            e.printStackTrace();        }        catch (SQLException e) {            e.printStackTrace();        }    }    //定义一个获取数据库连接的方法    public static Connection getconnection(){        return conn;    }}

接下来写一个数据库的操作控制类,来控制操作数据库
代码如下:

package com.jeker.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 com.jeker.db.DBUtil;import com.jeker.model.Goddess;public class GoddessDao {    //往数据表中添加女神的方法    public void addgoddess(Goddess g) throws SQLException{        //获取数据库连接对象        Connection conn=DBUtil.getconnection();        String sql="insert into imooc_goddess"+                    " (user_name,age,birthday,email,mobile,"+                    " create_user,create_date,update_user,update_date)"+                    " values (?,?,?,?,?,?,current_date(),?,current_date());";        //使用预编译statement来运行sql语句        PreparedStatement pstmt=conn.prepareStatement(sql);        pstmt.setString(1, g.getUser_name());        pstmt.setInt(2, g.getAge());        pstmt.setDate(3, new Date(g.getBirthday().getTime()));        pstmt.setString(4, g.getEmail());        pstmt.setString(5, g.getMobile());        pstmt.setString(6, g.getCreate_user());        pstmt.setString(7, g.getUpdata_user());        pstmt.execute();    }    //更新数据表中女神的数据方法    //此处和addgoddess()方法差不多,不再解释。    public void updategoddess(Goddess g) throws SQLException {        Connection conn=DBUtil.getconnection();        String sql="update imooc_goddess"+                    " set user_name=?,age=?,birthday=?,email=?,mobile=?,"+                    " update_user=?,update_date=current_date()"+                    " where id=?";        PreparedStatement pstmt=conn.prepareStatement(sql);        pstmt.setString(1, g.getUser_name());        pstmt.setInt(2, g.getAge());        pstmt.setDate(3, new Date(g.getBirthday().getTime()));        pstmt.setString(4, g.getEmail());        pstmt.setString(5, g.getMobile());        pstmt.setString(6, g.getUpdata_user());        pstmt.setInt(7, g.getId());        pstmt.execute();    }    //定义删除数据表中女神的方法    //根据女神的id来删除    public void delgoddess(Integer id) throws SQLException{        Connection conn=DBUtil.getconnection();         String sql="delete from imooc_goddess"+                    " where id=?";        PreparedStatement pstmt=conn.prepareStatement(sql);        pstmt.setInt(1, id);        pstmt.execute();    }    //定义查询数据表中女神信息的方法    public List<Goddess> querygoddess() throws SQLException{        Connection conn=DBUtil.getconnection();        Statement stmt=conn.createStatement();        ResultSet rs=stmt.executeQuery("select * from imooc_goddess ");         //利用集合来储存表中各个女神的信息        List<Goddess> gs=new ArrayList<>();        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.setBirthday(rs.getDate("birthday"));            g.setMobile(rs.getString("mobile"));            g.setEmail(rs.getString("email"));            gs.add(g);        }        //返回此全部女神的集合        return gs;    }    //定义查指定一个女神的详细信息    //根据id来查    public Goddess getgoddess(Integer id) throws SQLException{        Connection conn=DBUtil.getconnection();        String sql="select * from imooc_goddess"+                    " where id=?";        //采用预编译        PreparedStatement pstmt=conn.prepareStatement(sql);        pstmt.setInt(1, id);        ResultSet rs=pstmt.executeQuery();        //创建一个女神对象        Goddess g=new Goddess();        //将要查找的女的的详细信息全传给新创建的女神对象        while(rs.next()){            g.setId(rs.getInt("id"));            g.setAge(rs.getInt("age"));            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.setUpdata_user(rs.getString("update_user"));            g.setUpdate_date(rs.getDate("update_date"));        }        //返回新的女神对象        return g;    }    //根据女神的姓名查找女神的信息    public List<Goddess> querygoddess(String name) throws SQLException{        Connection conn=DBUtil.getconnection();        StringBuilder sql=new StringBuilder();        sql.append("select * from imooc_goddess");        sql.append(" where user_name=?");        PreparedStatement pstmt=conn.prepareStatement(sql.toString());        pstmt.setString(1,name);        ResultSet rs=pstmt.executeQuery();        List<Goddess> result =new ArrayList<>();        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.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.setUpdata_user(rs.getString("update_user"));            g.setUpdate_date(rs.getDate("update_date"));            result.add(g);        }        return result;    }    public List<Goddess> querygoddess(String name,String mobile) throws SQLException{        Connection conn=DBUtil.getconnection();        StringBuilder sql=new StringBuilder();        sql.append("select * from imooc_goddess");        sql.append(" where user_name like ? and mobile like ?");        PreparedStatement pstmt=conn.prepareStatement(sql.toString());        pstmt.setString(1,"%"+name+"%");        pstmt.setString(2, "%"+mobile+"%");        ResultSet rs=pstmt.executeQuery();        List<Goddess> result =new ArrayList<>();        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.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.setUpdata_user(rs.getString("update_user"));            g.setUpdate_date(rs.getDate("update_date"));            result.add(g);        }        return result;    }    //此处为传入一个list类型的参数    //list的泛型类型又为map,此处读者可能有困惑,不急 慢慢来    public List<Goddess> querygoddess(List<Map<String, Object>> params) throws SQLException{        Connection conn=DBUtil.getconnection();        StringBuilder sql=new StringBuilder();        sql.append("select * from imooc_goddess where 1=1");        //如果传入的参数不为null并且size大于0        if(params!=null||params.size()>0){            for(int i=0;i<params.size();i++){                //遍历里面的map元素                Map<String, Object> map=params.get(i);                //map里面为键值对  就看下面的sql语句我们可知此map里有三对键值对                //第一队为 key=name   value=map.get("name")                //第二队为key=rela   value=map.get("rela")此处map.get("rela")可以为"=";                //第三队为key=value  value=map.get("value")                sql.append(" and "+map.get("name")+" "+map.get("rela")+" "+map.get("value"));            }        }        PreparedStatement pstmt=conn.prepareStatement(sql.toString());        ResultSet rs=pstmt.executeQuery();        List<Goddess> result =new ArrayList<>();        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.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.setUpdata_user(rs.getString("update_user"));            g.setUpdate_date(rs.getDate("update_date"));            result.add(g);        }        return result;    }}

接下来就是在操作数据库类goddessdao类的基础上来写一个控制层面的类

package com.jeker.action;import java.sql.SQLException;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import com.jeker.dao.GoddessDao;import com.jeker.model.Goddess;//那这就是控制层 控制数据表的数据增删改查//定义控制类public class goddessAction {    //控制数据表增加女神    public void add(Goddess goddess) throws SQLException{        GoddessDao dao=new GoddessDao();        //那此处增加女神是调用(直接操作数据表的goddessdao类)的addgoddess方法        dao.addgoddess(goddess);    }    //修改表中女神的方法    public void edit(Goddess goddess) throws SQLException{        GoddessDao dao=new GoddessDao();        //调用goddessdao类的updategoddess方法        dao.updategoddess(goddess);    }    //查询表中女神的方法    public List<Goddess> query() throws SQLException{        GoddessDao dao=new GoddessDao();        //调用goddessdao类的querygoddess方法        return dao.querygoddess();    }    //查询表中女神的方法    //传一个list参数    public List<Goddess> query(List<Map<String, Object>> params) throws SQLException{        GoddessDao dao=new GoddessDao();        return dao.querygoddess(params);    }    //删除女神的方法    public void del(Integer id) throws SQLException{        GoddessDao dao=new GoddessDao();        dao.delgoddess(id);    }    //根据女神id获取女神详细信息的方法    public Goddess get(Integer id) throws SQLException{        GoddessDao dao=new GoddessDao();        return dao.getgoddess(id);    }}

额! 现在已经把基本逻辑都写完了,最后我们要写一个视图层,用于交互

package com.jeker.test;import java.sql.SQLException;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.Scanner;import com.jeker.action.goddessAction;import com.jeker.model.Goddess;//那此处为视图层public class view {    private static final String CONTEXT="欢迎来到女神禁区:\n"+            "下面是女神禁区的功能列表\n"            +"[MAIN/M]:主菜单\n"            +"[QUERY/Q]:查询全部女神的信息\n"            +"[GET/G]:查询某位女神的详细信息\n"            +"[ADD/A]:添加女神信息\n"            +"[UPDATE/U]:更新女神信息\n"            +"[DELETE/D]:删除女神信息\n"            +"[EXIT/E]:退出女神禁区\n"            +"[BREAK/B]:退出当前功能,返回主菜单\n";            //为各功能定义字符串            private static final String OPERATION_MAIN="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_EXIT="EXIT";            private static final String OPERATION_BREAK="BREAK";    public static void main(String[] args) throws NumberFormatException, SQLException {        //new 一个action对象        goddessAction action=new goddessAction();        System.out.println(CONTEXT);        Scanner scan=new Scanner(System.in);        //定义一个标记        //来记录当前是什么操作        String prenious="";        //定义步骤        //需要多步操作的时候要用到        Integer step=1;        Goddess godd=new Goddess();        while(scan.hasNext()){            //将输入信息转换为字符串            String in=scan.nextLine().toString();            //退出功能            if(OPERATION_EXIT.equals(in.toUpperCase())                    ||OPERATION_EXIT.substring(0,1).equals(in.toUpperCase())){                System.out.println("成功退出!");                break;            }            //更新功能            else if(OPERATION_UPDATE.equals(in.toUpperCase())                    ||OPERATION_UPDATE.substring(0,1).equals(in.toUpperCase())                    ||prenious.equals(OPERATION_UPDATE)){                prenious=OPERATION_UPDATE;                if(1==step){                                        System.out.println("请输入姓名:");                }else if(2==step){                    godd.setUser_name(in);                    System.out.println("请输入年龄:");                }else if(3==step){                    godd.setAge(Integer.valueOf(in));                    System.out.println("请输入手机号:");                }else if(4==step){                    godd.setMobile(in);                    System.out.println("请输入邮箱:");                }else if(5==step){                    godd.setEmail(in);                    System.out.println("请输入改写人:");                }                else if(6==step){                    godd.setCreate_user(in);                    System.out.println("请输入ID:");                }else if(7==step){                    godd.setId(Integer.parseInt(in));                    System.out.println("请输入生日:");                }                else if(8==step){                    DateFormat df=new SimpleDateFormat("yyyy-MM-dd");                    String str=in;                    Date date;                    try {                        date = df.parse(str);                        godd.setBirthday(date);                    } catch (ParseException e) {                        e.printStackTrace();                    }                    try{                        action.edit(godd);                        System.out.println("更新女神成功!");                        //将步骤重新变为1                        step=1;                        //将操作标记去除                        prenious="";                    }catch(Exception e){                        e.printStackTrace();                        System.out.println("更新失败");                    }                }                //如果操作标记为update                if(OPERATION_UPDATE.equals(prenious)){                    //下一步操作                    step++;                }            }            //删除功能            else if(OPERATION_DELETE.equals(in.toUpperCase())                    ||OPERATION_DELETE.substring(0,1).equals(in.toUpperCase())){                System.out.println("请输入要删除的id");                Scanner sc=new Scanner(System.in);                String s=sc.nextLine();                prenious=OPERATION_DELETE;                action.del(Integer.parseInt(s));                System.out.println("删除成功");            }            //查询功能            else if(OPERATION_QUERY.equals(in.toUpperCase())||                    OPERATION_QUERY.substring(0, 1).equals(in.toUpperCase())){                System.out.println("查询结果:");                List<Goddess> list=new ArrayList<>();                try {                    list=action.query();                    for(int i=0;i<list.size();i++){                        System.out.println(list.get(i).toString());                    }                } catch (SQLException e) {                    e.printStackTrace();                }            }            //查询详细信息            else if(OPERATION_GET.equals(in.toUpperCase())                    ||OPERATION_GET.substring(0, 1).equals(in.toUpperCase())){                System.out.println("请输入要查看女神的id");                Scanner sc=new Scanner(System.in);                String s=sc.nextLine();                prenious=OPERATION_GET;                Goddess g1=action.get(Integer.valueOf(s));                System.out.println(g1.toString());            }            //返回主菜单            else if(OPERATION_MAIN.equals(in.toUpperCase())                    ||OPERATION_MAIN.substring(0, 1).equals(in.toUpperCase())){                System.out.println("下面是女神禁区的功能列表\n"            +"[MAIN/M]:主菜单\n"            +"[QUERY/Q]:查询全部女神的信息\n"            +"[GET/G]:查询某位女神的详细信息\n"            +"[ADD/A]:添加女神信息\n"            +"[UPDATE/U]:更新女神信息\n"            +"[DELETE/D]:删除女神信息\n"            +"[SEARCH/S]:查询女神信息\n"            +"[EXIT/E]:退出女神禁区\n"            +"[BREAK/B]:退出当前功能,返回主菜单\n");            }            //退出当前功能            else if(OPERATION_BREAK.equals(in.toUpperCase())                    ||OPERATION_BREAK.substring(0, 1).equals(in.toUpperCase())                    ){                step=1;                System.out.println("已退出当前功能");            }            //添加信息            else if(OPERATION_ADD.equals(in.toUpperCase())                    ||OPERATION_ADD.substring(0,1).equals(in.toUpperCase())                    ||prenious.equals(OPERATION_ADD)){                prenious=OPERATION_ADD;                if(1==step){                                        System.out.println("请输入姓名:");                }else if(2==step){                    godd.setUser_name(in);                    System.out.println("请输入年龄:");                }else if(3==step){                    godd.setAge(Integer.valueOf(in));                    System.out.println("请输入手机号:");                }else if(4==step){                    godd.setMobile(in);                    System.out.println("请输入邮箱:");                }else if(5==step){                    godd.setEmail(in);                    System.out.println("请输入生日:");                }else if(6==step){                    DateFormat df=new SimpleDateFormat("yyyy-MM-dd");                    String str=in;                    Date date;                    try {                        date = df.parse(str);                        godd.setBirthday(date);                    } catch (ParseException e) {                        e.printStackTrace();                    }                    try{                        action.add(godd);                        System.out.println("新增女神成功!");                        step=1;                        prenious="";                    }catch(Exception e){                        e.printStackTrace();                        System.out.println("新增失败");                    }                }                if(OPERATION_ADD.equals(prenious)){                    step++;                }            }else{                System.out.println("你输入的值为:"+in);            }        }    }}

ok,此上位view层的类。

—————————————————-

此上为全部代码
这里写图片描述
代码按此图分布,view包中为view类 此为视图层;model包中为goddess类 是一个女神模型 此为模型层; action包中为goddessaction类 此为控制层,控制女神在数据表中的操作。

另外dao和db包中分别为goddessdao类和dbutil类 为数据库操作类,控制层通过操纵这两个类来实现对数据表的控制。

到此 mvc’架构初步的介绍就到这 其实并没那么简单。需要读者自己体会。

1 0
原创粉丝点击