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
- jdbc实战:实现女神的增删改查
- JDBC 实现 数据库的增删改查
- JDBC实现数据库的增删改查
- JDBC 实现增删改查
- jdbc的增删改查
- JDBC的增删改查
- jdbc的增删改查
- JDBC的增删改查
- 巧用JDBC实现对MySQL的“增删改查”
- 用JDBC实现对MySQL的“增删改查”
- Java JDBC实现数据库的增删改查操作
- jqgrid+struts2+jdbc实现的增删改查
- Hibernate实现增删改查以及和JDBC的关系
- 使用JDBC实现对数据的增删改查
- jsp+servlet+jdbc实现对数据库的增删改查
- JDBC 实现 含参的增删改查操作
- Java实现mysql增删改查--我的JDBC学习
- JDBC结合MySQL实现数据的增删改查
- Codeforces Round #340 (Div. 2)E-XOR and Favorite Number(莫队算法)
- GDOI2016酱油记
- 电阻的色环识别
- JSON 和JSONP 分析
- bzoj 2038(莫队)
- jdbc实战:实现女神的增删改查
- HTTP 协议中 Vary 的一些研究
- 数据库连接池
- CSS3实现无缝滚动
- 山东省第三届ACM省赛
- 对Activity的一些简单的理解
- Ajax表单提交插件jquery form
- LeetCode 之 Remove Duplicates from Sorted Array
- Hadoop和Spark分别实现二次排序