java数据库edit_Java数据库连接——JDBC基础知识(操作数据库:增删改查)

一、JDBC简介

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

什么是JDBC?

Java语言访问数据库的一种规范,是一套API。

JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库。比如建立数据库连接、执行SQL语句进行数据的存取操作。

dc979af5f24b823d009f324418fba5af.png

JDBC代表Java数据库连接。

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

连接到数据库

创建SQL或MySQL语句

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

查看和修改记录

比如:

b903fc7e8ea05ffdb72134b94612c5ea.png

二、JDBC使用详解

1、打通数据库

19fe309ffd245204e6e6d36d2914d68b.png

05d3ba7c4b3cc62a503f3ed84d76e7fc.png

先新建Java 工程,将jar包导进去:

5bd7f62cddf75eb6e9209bd98de2faed.png

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

编写DBUtil.java

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 package com.study.db;

2

3 import java.sql.Connection;

4 import java.sql.DriverManager;

5 import java.sql.ResultSet;

6 import java.sql.Statement;

7

8 public class DBUtil {

9

10 private static final String URL="jdbc:mysql://localhost:3306/demo_jdbc";

11 private static final String NAME="root";

12 private static final String PASSWORD="root";

13

14 public static void main(String[] args) throws Exception{

15

16 //1.加载驱动程序

17 Class.forName("com.mysql.jdbc.Driver");

18 //2.获得数据库的连接

19 Connection conn = DriverManager.getConnection(URL, NAME, PASSWORD);

20 //3.通过数据库的连接操作数据库,实现增删改查

21 Statement stmt = conn.createStatement();

22 ResultSet rs = stmt.executeQuery("select user_name,age from imooc_goddess");//选择import java.sql.ResultSet;

23 while(rs.next()){//如果对象中有数据,就会循环打印出来

24 System.out.println(rs.getString("user_name")+","+rs.getInt("age"));

25 }

26 }

27 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

2、搭建模型层

2a66c67ec371ae1bfd86f0bf35a102bf.png

采用MVC三层架构:建议由下往上开发(DB->view,需求读懂以后,设计数据库,然后根据数据库映射模型,再写控制层,再写视图层)

View视图层——展示数据,反馈用户行为

Control控制层——控制数据流通过程,协调视图层和数据层

Model模型层——与数据库建立映射,与数据进行交互

(DB数据库)

5072d3ffae7016de0ee95070f1867a78.png

先新增对应的model层:按照数据库表对应的字段编写实体类。

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 package com.study.model;

2

3 import java.util.Date;

4

5 public class Goddess {

6 private Integer id;

7 private String userName;

8 private Integer sex;

9 private Integer age;

10 private Date birthday;

11 private String email;

12 private String mobile;

13 private String createUser;

14 private Date createDate;

15 private String updateUser;

16 private Date updateDate;

17 private Integer isDel;

18 public Integer getId() {

19 return id;

20 }

21 public void setId(Integer id) {

22 this.id = id;

23 }

24 public String getUserName() {

25 return userName;

26 }

27 public void setUserName(String userName) {

28 this.userName = userName;

29 }

30 public Integer getSex() {

31 return sex;

32 }

33 public void setSex(Integer sex) {

34 this.sex = sex;

35 }

36 public Integer getAge() {

37 return age;

38 }

39 public void setAge(Integer age) {

40 this.age = age;

41 }

42 public Date getBirthday() {

43 return birthday;

44 }

45 public void setBirthday(Date birthday) {

46 this.birthday = birthday;

47 }

48 public String getEmail() {

49 return email;

50 }

51 public void setEmail(String email) {

52 this.email = email;

53 }

54 public String getMobile() {

55 return mobile;

56 }

57 public void setMobile(String mobile) {

58 this.mobile = mobile;

59 }

60 public String getCreateUser() {

61 return createUser;

62 }

63 public void setCreateUser(String createUser) {

64 this.createUser = createUser;

65 }

66 public Date getCreateDate() {

67 return createDate;

68 }

69 public void setCreateDate(Date createDate) {

70 this.createDate = createDate;

71 }

72 public String getUpdateUser() {

73 return updateUser;

74 }

75 public void setUpdateUser(String updateUser) {

76 this.updateUser = updateUser;

77 }

78 public Date getUpdateDate() {

79 return updateDate;

80 }

81 public void setUpdateDate(Date updateDate) {

82 this.updateDate = updateDate;

83 }

84 public Integer getIsDel() {

85 return isDel;

86 }

87 public void setIsDel(Integer isDel) {

88 this.isDel = isDel;

89 }

90

91 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

然后开始新增Dao层,并修改DBUtil.java

DBUtil.java代码如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 package com.study.db;

2

3 import java.sql.Connection;

4 import java.sql.DriverManager;

5 import java.sql.ResultSet;

6 import java.sql.SQLException;

7 import java.sql.Statement;

8

9 public class DBUtil {

10

11 private static final String URL="jdbc:mysql://localhost:3306/demo_jdbc";

12 private static final String NAME="root";

13 private static final String PASSWORD="root";

14

15 private static Connection conn=null;

16 //静态代码块(将加载驱动、连接数据库放入静态块中)

17 static{

18 try {

19 //1.加载驱动程序

20 Class.forName("com.mysql.jdbc.Driver");

21 //2.获得数据库的连接

22 conn = DriverManager.getConnection(URL, NAME, PASSWORD);

23 } catch (ClassNotFoundException e) {

24 e.printStackTrace();

25 } catch (SQLException e) {

26 e.printStackTrace();

27 }

28 }

29 //对外提供一个方法来获取数据库连接

30 public static Connection getConnection(){

31 return conn;

32 }

33

34 public static void main(String[] args) throws Exception{

35

36 //3.通过数据库的连接操作数据库,实现增删改查

37 Statement stmt = conn.createStatement();

38 ResultSet rs = stmt.executeQuery("select user_name,age from imooc_goddess");//选择import java.sql.ResultSet;

39 while(rs.next()){//如果对象中有数据,就会循环打印出来

40 System.out.println(rs.getString("user_name")+","+rs.getInt("age"));

41 }

42 }

43 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

goddessDao.java 代码如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 package com.study.dao;

2

3 import java.sql.Connection;

4 import java.sql.ResultSet;

5 import java.sql.SQLException;

6 import java.sql.Statement;

7 import java.util.ArrayList;

8 import java.util.List;

9

10 import com.study.db.DBUtil;

11 import com.study.model.Goddess;

12

13 public class GoddessDao {

14

15 public void addGoddess(){

16

17 }

18

19 public void updateGoddess(){

20

21 }

22 public void delGoddess(){

23

24 }

25

26 public List query() throws Exception{

27 Connection con=DBUtil.getConnection();

28 Statement stmt=con.createStatement();

29 ResultSet rs=stmt.executeQuery("select user_name,age from imooc_goddess");

30 List gs=new ArrayList();

31 Goddess g=null;

32 while(rs.next()){//如果对象中有数据,就会循环打印出来

33 g=new Goddess();

34 g.setUserName(rs.getString("user_name"));

35 g.setAge(rs.getInt("age"));

36 gs.add(g);

37 }

38 return gs;

39 }

40

41 //查询单个女神

42 public Goddess get(){

43 return null;

44 }

45 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

新增Controller层:GoddessAction.java

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 package com.study.controller;

2

3 import java.util.List;

4

5 import com.study.dao.GoddessDao;

6 import com.study.model.Goddess;

7

8 public class GoddessAction {

9

10 public static void main(String[] args) throws Exception {

11 GoddessDao gd=new GoddessDao();

12 List gs=gd.query();

13 for (Goddess goddess : gs) {

14 System.out.println(goddess.getUserName()+","+goddess.getAge());

15 }

16

17 }

18

19 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

3、搭建模型层——CRUD操作

新增create操作:

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 //添加女神

2 public void addGoddess(Goddess g) throws Exception{

3 Connection con=DBUtil.getConnection();//首先拿到数据库的连接

4 String sql="" +

5 "insert into imooc_goddess"+

6 "(user_name,sex,age,birthday,email,mobile,"+

7 "create_user,create_date,update_user,update_date,isdel) "+

8 "values("+

9 "?,?,?,?,?,?,?,current_date(),?,current_date(),?)";//参数用?表示,相当于占位符;用mysql的日期函数current_date()来获取当前日期

10 //预编译sql语句

11 PreparedStatement psmt = con.prepareStatement(sql);

12 //先对应SQL语句,给SQL语句传递参数

13 psmt.setString(1, g.getUserName());

14 psmt.setInt(2, g.getSex());

15 psmt.setInt(3, g.getAge());

16 //注意:setDate()函数第二个参数需要的是java.sql.Date类型,我们传进来的是java.util.Date,类型不符,需要做一下转换

17 psmt.setDate(4, new Date(g.getBirthday().getTime()));

18 psmt.setString(5, g.getEmail());

19 psmt.setString(6, g.getMobile());

20 psmt.setString(7, g.getCreateUser());

21 psmt.setString(8, g.getUpdateUser());

22 psmt.setInt(9, g.getIsDel());

23 //执行SQL语句

24 psmt.execute();

25 /**

26 * prepareStatement这个方法会将SQL语句加载到驱动程序conn集成程序中,但是并不直接执行

27 * 而是当它调用execute()方法的时候才真正执行;

28 *

29 * 上面SQL中的参数用?表示,相当于占位符,然后在对参数进行赋值。

30 * 当真正执行时,这些参数会加载在SQL语句中,把SQL语句拼接完整才去执行。

31 * 这样就会减少对数据库的操作

32 */

33 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

测试:

48304ba5e6f9fe08f3fa1abda7d326ab.png

package com.study.controller;

import java.util.Date;

import java.util.List;

import com.study.dao.GoddessDao;

import com.study.model.Goddess;

public class GoddessAction {

public static void main(String[] args) throws Exception {

GoddessDao gd=new GoddessDao();

Goddess g1=new Goddess();

g1.setUserName("小夏");

g1.setAge(22);

g1.setSex(1);

g1.setBirthday(new Date());

g1.setEmail("xiaoxia@qq.com");

g1.setMobile("123456789");

g1.setCreateUser("admin");

g1.setUpdateUser("admin");

g1.setIsDel(1);

//添加女神

gd.addGoddess(g1);

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

修改、删除、查询(根据id)操作:

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 //更新女神

2 public void updateGoddess(Goddess g) throws SQLException{

3 Connection con=DBUtil.getConnection();//首先拿到数据库的连接

4 String sql="" +

5 "update imooc_goddess "+

6 "set user_name=?,sex=?,age=?,birthday=?,email=?,mobile=?,"+

7 "update_user=?,update_date=current_date(),isdel=?) "+

8 "where id=?";//参数用?表示,相当于占位符;用mysql的日期函数current_date()来获取当前日期

9 //预编译sql语句

10 PreparedStatement psmt = con.prepareStatement(sql);

11 //先对应SQL语句,给SQL语句传递参数

12 psmt.setString(1, g.getUserName());

13 psmt.setInt(2, g.getSex());

14 psmt.setInt(3, g.getAge());

15 //注意:setDate()函数第二个参数需要的是java.sql.Date类型,我们传进来的是java.util.Date,类型不符,需要做一下转换

16 psmt.setDate(4, new Date(g.getBirthday().getTime()));

17 psmt.setString(5, g.getEmail());

18 psmt.setString(6, g.getMobile());

19 psmt.setString(7, g.getUpdateUser());

20 psmt.setInt(8, g.getIsDel());

21 psmt.setInt(9, g.getId());

22 //执行SQL语句

23 psmt.execute();

24 }

25

26 //删除女神

27 public void delGoddess(Integer id) throws SQLException{

28 Connection con=DBUtil.getConnection();//首先拿到数据库的连接

29 String sql="" +

30 "delete from imooc_goddess "+

31 "where id=?";//参数用?表示,相当于占位符;用mysql的日期函数current_date()来获取当前日期

32 //预编译sql语句

33 PreparedStatement psmt = con.prepareStatement(sql);

34 //先对应SQL语句,给SQL语句传递参数

35 psmt.setInt(1, id);

36 //执行SQL语句

37 psmt.execute();

38 }

39

40 //查询单个女神(根据id去查询)

41 public Goddess get(Integer id) throws SQLException{

42 Goddess g=null;

43 Connection con=DBUtil.getConnection();//首先拿到数据库的连接

44 String sql="" +

45 "select * from imooc_goddess "+

46 "where id=?";//参数用?表示,相当于占位符;用mysql的日期函数current_date()来获取当前日期

47 //预编译sql语句

48 PreparedStatement psmt = con.prepareStatement(sql);

49 //先对应SQL语句,给SQL语句传递参数

50 psmt.setInt(1, id);

51 //执行SQL语句

52 /*psmt.execute();*///execute()方法是执行更改数据库操作(包括新增、修改、删除);executeQuery()是执行查询操作

53 ResultSet rs = psmt.executeQuery();//返回一个结果集

54 //遍历结果集

55 while(rs.next()){

56 g=new Goddess();

57 g.setId(rs.getInt("id"));

58 g.setUserName(rs.getString("user_name"));

59 g.setAge(rs.getInt("age"));

60 g.setSex(rs.getInt("sex"));

61 //rs.getDate("birthday")获得的是java.sql.Date类型。注意:java.sql.Date类型是java.util.Date类型的子集,所以这里不需要进行转换了。

62 g.setBirthday(rs.getDate("birthday"));

63 g.setEmail(rs.getString("email"));

64 g.setMobile(rs.getString("mobile"));

65 g.setCreateUser(rs.getString("create_user"));

66 g.setCreateDate(rs.getDate("create_date"));

67 g.setUpdateUser(rs.getString("update_user"));

68 g.setUpdateDate(rs.getDate("update_date"));

69 g.setIsDel(rs.getInt("isdel"));

70 }

71 return g;

72 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

查询(根据name\mobile等)操作

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 //查询单个女神(根据姓名等信息去查询)

2 public List get(String name,String mobile) throws SQLException{

3 List result=new ArrayList();

4 Connection con=DBUtil.getConnection();//首先拿到数据库的连接

5 StringBuffer sb=new StringBuffer();

6 sb.append("select * from imooc_goddess ");

7 sb.append("where user_name like ? and mobile like ?");

8 //预编译sql语句

9 PreparedStatement psmt = con.prepareStatement(sb.toString());

10 //先对应SQL语句,给SQL语句传递参数

11 psmt.setString(1, "%"+name+"%");

12 psmt.setString(2, "%"+mobile+"%");

13 System.out.println(sb.toString());

14 //执行SQL语句

15 /*psmt.execute();*///execute()方法是执行更改数据库操作(包括新增、修改、删除);executeQuery()是执行查询操作

16 ResultSet rs = psmt.executeQuery();//返回一个结果集

17 Goddess g=null;

18 //遍历结果集

19 while(rs.next()){

20 g=new Goddess();

21 g.setId(rs.getInt("id"));

22 g.setUserName(rs.getString("user_name"));

23 g.setAge(rs.getInt("age"));

24 g.setSex(rs.getInt("sex"));

25 //rs.getDate("birthday")获得的是java.sql.Date类型。注意:java.sql.Date类型是java.util.Date类型的子集,所以这里不需要进行转换了。

26 g.setBirthday(rs.getDate("birthday"));

27 g.setEmail(rs.getString("email"));

28 g.setMobile(rs.getString("mobile"));

29 g.setCreateUser(rs.getString("create_user"));

30 g.setCreateDate(rs.getDate("create_date"));

31 g.setUpdateUser(rs.getString("update_user"));

32 g.setUpdateDate(rs.getDate("update_date"));

33 g.setIsDel(rs.getInt("isdel"));

34

35 result.add(g);//将结果封装到对象中

36 }

37 return result;

38 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

测试:

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 package com.study.controller;

2

3 import java.util.Date;

4 import java.util.List;

5

6 import com.study.dao.GoddessDao;

7 import com.study.model.Goddess;

8

9 public class GoddessAction {

10

11 public static void main(String[] args) throws Exception {

12 GoddessDao gd=new GoddessDao();

13 /*//查询所有女神

14 List gs=gd.query();

15 for (Goddess goddess : gs) {

16 System.out.println(goddess.getUserName()+","+goddess.getAge());

17 }*/

18

19 Goddess g1=new Goddess();

20 g1.setUserName("小夏");

21 g1.setAge(22);

22 g1.setSex(1);

23 g1.setBirthday(new Date());

24 g1.setEmail("xiaoxia@qq.com");

25 g1.setMobile("123456789");

26 g1.setCreateUser("admin");

27 g1.setUpdateUser("admin");

28 g1.setIsDel(1);

29 //添加女神

30 // gd.addGoddess(g1);

31

32 //查询单个女神(根据id)

33 /*Goddess g2 = gd.get(4);

34 System.out.println(g2.toString());*/

35

36 //查询单个女神(根据姓名等信息)

37 List list = gd.get("小溪", "139");

38 //遍历结果集

39 for(int i=0;i

40 System.out.println(list.get(i).toString());

41 }

42 }

43

44 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

运行结果:

select * from imooc_goddess where user_name like ? and mobile like ?

Goddess [id=1, userName=小溪, sex=1, age=22, birthday=2000-12-12, email=xiaoxi@163.com, mobile=13911111111, createUser=ADMIN, createDate=2015-01-08, updateUser=ADMIN, updateDate=2015-01-08, isDel=0]

查询操作的进一步完善:

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 //查询单个女神(根据姓名等信息去查询)----->使用Map存储条件信息;防止条件为空可加一条where 1=1

2 public List get(List> params) throws SQLException{

3 List result=new ArrayList();

4 Connection con=DBUtil.getConnection();//首先拿到数据库的连接

5 StringBuffer sb=new StringBuffer();

6 sb.append("select * from imooc_goddess where 1=1 ");//注意where 1=1 的小技巧

7 if(params !=null && params.size()>0){//先判断集合是否为空

8 //遍历集合

9 for(int i=0;i

10 Map map=params.get(i);

11 sb.append("and "+map.get("name")+" " +map.get("rela")+" "+map.get("value")+" ");//查询什么?关系是什么?以及值是什么,我们都可以通过参数传进来。

12 }

13

14 }

15 //预编译sql语句

16 PreparedStatement psmt = con.prepareStatement(sb.toString());

17 System.out.println(sb.toString());

18 //执行SQL语句

19 /*psmt.execute();*///execute()方法是执行更改数据库操作(包括新增、修改、删除);executeQuery()是执行查询操作

20 ResultSet rs = psmt.executeQuery();//返回一个结果集

21 Goddess g=null;

22 //遍历结果集

23 while(rs.next()){

24 g=new Goddess();

25 g.setId(rs.getInt("id"));

26 g.setUserName(rs.getString("user_name"));

27 g.setAge(rs.getInt("age"));

28 g.setSex(rs.getInt("sex"));

29 //rs.getDate("birthday")获得的是java.sql.Date类型。注意:java.sql.Date类型是java.util.Date类型的子集,所以这里不需要进行转换了。

30 g.setBirthday(rs.getDate("birthday"));

31 g.setEmail(rs.getString("email"));

32 g.setMobile(rs.getString("mobile"));

33 g.setCreateUser(rs.getString("create_user"));

34 g.setCreateDate(rs.getDate("create_date"));

35 g.setUpdateUser(rs.getString("update_user"));

36 g.setUpdateDate(rs.getDate("update_date"));

37 g.setIsDel(rs.getInt("isdel"));

38

39 result.add(g);//将结果封装到对象中

40 }

41 return result;

42 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

测试:

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 //查询单个女神(根据姓名等信息去查询)----->使用Map存储条件信息

2 List> params=new ArrayList>();

3 Map param=new HashMap();

4 param.put("name", "user_name");

5 // param.put("rela", "=");

6 // param.put("value", "'小溪'");//注意加上单引号,因为这个变量是字符串的形式

7 param.put("rela", "like");

8 param.put("value", "'%小溪%'");//注意加上单引号,因为这个变量是字符串的形式

9 params.add(param);

10 param=new HashMap();

11 param.put("name", "mobile");

12 param.put("rela", "like");

13 param.put("value", "'%139%'");

14 params.add(param);

15 List list1 = gd.get(params);

16 //遍历结果集

17 for(int i=0;i

18 System.out.println(list1.get(i).toString());

19 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

运行结果:

select * from imooc_goddess where 1=1 and user_name like '%小溪%' and mobile like '%139%'

Goddess [id=1, userName=小溪, sex=1, age=22, birthday=2000-12-12, email=xiaoxi@163.com, mobile=13911111111, createUser=ADMIN, createDate=2015-01-08, updateUser=ADMIN, updateDate=2015-01-08, isDel=0]

这个查询的亮点在于:使用get(List> params) 和 where 1=1;

jdbc传参数过多的时候:用List> params双泛型作为参数.

我们查询的每一个条件都是一个键值对。键值对的数据结构就是Map。

然后是因为查询的条件可能是多个,数量不确定,所以用List 比较好,所以就会是List>这样的数据结构了。

上面使用where 1=1的原因主要是下面的语句直接就跟着一个and。SQL语句后面需要跟着where,但不确定where后面是否有语句,就要加上1=1,保证语法不会出错。

一般用于构造动态SQL语句,"SELECT ... FROM ... WHERE 1=1 "+动态构造条件子句。

4、搭建控制层

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 package com.study.controller;

2

3 import java.util.List;

4 import java.util.Map;

5

6 import com.study.dao.GoddessDao;

7 import com.study.model.Goddess;

8

9 public class GoddessAction1 {

10

11 //添加女神

12 public void add(Goddess goddess) throws Exception{

13 GoddessDao dao=new GoddessDao();

14 goddess.setSex(1);

15 goddess.setIsDel(0);

16 dao.addGoddess(goddess);

17 }

18

19 //修改女神

20 public void edit(Goddess goddess) throws Exception{

21 GoddessDao dao=new GoddessDao();

22 dao.updateGoddess(goddess);

23 }

24

25 //删除女神

26 public void del(Integer id) throws Exception{

27 GoddessDao dao=new GoddessDao();

28 dao.delGoddess(id);

29 }

30

31 //查询所有女神信息

32 public List query() throws Exception{

33 GoddessDao dao=new GoddessDao();

34 return dao.query();

35 }

36

37 //查询单个女神信息(根据id)

38 public Goddess get(Integer id) throws Exception{

39 GoddessDao dao=new GoddessDao();

40 return dao.get(id);

41 }

42

43 //查询单个女神信息(根据姓名等信息)

44 public List get(List> params) throws Exception{

45 GoddessDao dao=new GoddessDao();

46 return dao.get(params);

47 }

48 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

5、搭建视图层

d07b28eee448b627ce44a253f6e0a32a.png

代码实例:

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 package com.study.view;

2

3 import java.text.ParseException;

4 import java.text.SimpleDateFormat;

5 import java.util.Date;

6 import java.util.List;

7 import java.util.Scanner;

8

9 import com.study.controller.GoddessAction1;

10 import com.study.model.Goddess;

11

12 public class View {

13

14 //提示语

15 private static final String CONTEXT="欢迎来到女神禁区:\n" +

16 "下面是女神禁区的功能列表:\n" +

17 "[MAIN/M]:主菜单\n" +

18 "[QUERY/Q]:查看全部女神的信息\n" +

19 "[GET/G]:查看某位女神的详细信息\n" +

20 "[ADD/A]:添加女神信息\n" +

21 "[UPDATE/U]:更新女神信息\n" +

22 "[DELETE/D]:删除女神信息\n" +

23 "[SEARCH/S]:查询女神信息(根据姓名、手机号来查询)\n" +

24 "[EXIT/E]:退出女神禁区\n" +

25 "[BREAK/B]:退出当前功能,返回主菜单";

26

27 //操作标记

28 private static final String OPERATION_MAIN="MAIN";

29 private static final String OPERATION_QUERY="QUERY";

30 private static final String OPERATION_GET="GET";

31 private static final String OPERATION_ADD="ADD";

32 private static final String OPERATION_UPDATE="UPDATE";

33 private static final String OPERATION_DELETE="DELETE";

34 private static final String OPERATION_SEARCH="SEARCH";

35 private static final String OPERATION_EXIT="EXIT";

36 private static final String OPERATION_BREAK="BREAK";

37

38 public static void main(String[] args) {

39 //输出提示

40 System.out.println(CONTEXT);

41 //怎么保持程序的一直运行:while(true){}

42 Scanner scanner=new Scanner(System.in);//接受控制台的输入

43 Goddess goddess=new Goddess();

44 GoddessAction1 action=new GoddessAction1();

45

46 String prenious=null;//标记,记住上一次请求

47 Integer step=1;//步骤标记

48 while(scanner.hasNext()){//scanner.hasNext()有数值时才进行循环,没有就不进行循环

49 String in=scanner.next().toString();

50 if(OPERATION_EXIT.equals(in.toUpperCase())

51 || OPERATION_EXIT.substring(0, 1).equals(in.toUpperCase())){

52 System.out.println("您已成功退出女神禁区。");

53 break;//退出当前while循环

54 }else if(OPERATION_QUERY.equals(in.toUpperCase())

55 ||OPERATION_QUERY.substring(0, 1).equals(in.toUpperCase())){

56 try {

57 List list=action.query();

58 for (Goddess go : list) {

59 System.out.println(go.getId()+",姓名:"+go.getUserName());

60 }

61 } catch (Exception e) {

62 e.printStackTrace();

63 }

64 }else if(OPERATION_ADD.equals(in.toUpperCase())

65 || OPERATION_ADD.substring(0, 1).equals(in.toUpperCase())

66 || OPERATION_ADD.equals(prenious)){

67 prenious=OPERATION_ADD;

68 //新增女神

69 if(1==step){//如果是第一次进来

70 System.out.println("请输入女神的[姓名]");

71 }else if(2==step){

72 goddess.setUserName(in);

73 System.out.println("请输入女神的[年龄]");

74 }else if(3==step){

75 goddess.setAge(Integer.valueOf(in));//string转换为int型

76 System.out.println("请输入女神的[生日],格式如:yyyy-MM-dd");

77 }else if(4==step){

78 SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");

79 Date birthday=null;

80 try {

81 birthday = sf.parse(in);

82 goddess.setBirthday(birthday);

83 System.out.println("请输入女神的[邮箱]");

84 } catch (ParseException e) {

85 e.printStackTrace();

86 System.out.println("您输入的格式有误,请重新输入");

87 step=3;

88 }

89 }else if(5==step){

90 goddess.setEmail(in);

91 System.out.println("请输入女神的[手机号]");

92 }else if(6==step){

93 goddess.setMobile(in);

94 try {

95 action.add(goddess);

96 System.out.println("新增女神成功");

97 } catch (Exception e) {

98 e.printStackTrace();

99 System.out.println("新增女神失败");

100 }

101 }

102 if(OPERATION_ADD.equals(prenious)){

103 step++;

104 }

105 }else{

106 System.out.println("您输入的值为:"+in);

107 }

108 }

109 }

110 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

运行结果:

75ed8da9dc00daa493ee38baf32ad251.gif

三、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与数据库分开,开发者只需关心内部逻辑的实现而不需注重数据库连接的具体实现。(没有中间环节,是推荐方式!)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529195.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java ssm 系统的搭建_SSM框架下的javaweb学生管理系统--搭建系统结构

业务需求:一个登录页面,一个学生展示页面,添加、修改、删除三个功能目的是给大家了解一个初级系统的构造,不写那么复杂的需求了。从第一步开始:创建项目打开eclipse,点击右上角的File-->New-->Dynami…

opencv 高通滤波和低通滤波_滤波电路合集(低通滤波,CLCП滤波,DLC滤波,CRC П滤波)...

常见低通滤波电路L 一阶滤波C 一阶滤波CL 二阶滤波RC 二阶滤波LC 二阶滤波RCR T型三阶滤波LCL T型三阶滤波CRC π三阶滤波CLC π三阶滤波开关电源 单级低通滤波回路DLC 型二阶滤波器开关电源 双级串联式低通滤波回路CLC П型滤波器1、工作原理介绍a.输入正脉冲时,先给C1充电,充…

matlab语音信号处理实验_现代通信综合实验系统平台

现代通信综合实验系统平台近30年来,随着我国电信行业的迅猛发展,该行业的发展水平已成为衡量一个国家实力的一大关键因子。行业的发展同时,为当代相关专业大学生创造了极大的就业市场,市场对通信类人才有着极大的需求。培养一代全面型通信类人…

iphone储存空间系统怎么清理_教你快速清理 iPhone 系统缓存垃圾,拒绝卡顿!

「 改变能改变的一切,接受不能改变的一切!」▼“iPhone存储空间”里的系统为何占用了几十G的甚至上百G的内存,如何清理?当我们使用 iPhone 一段时间之后,系统或应用中会出现一些多余的缓存数据,如果长时间不…

倒N字形排列java_Java排序8大算法实现

概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。当n较大,则应采用时间复…

cross_val_score 如何对孤立森林_【收藏】森林防火手抄报素材汇总!

森林防火手抄报模板参考【文字素材参考】01森林防火根据森林火灾燃烧中央地点,蔓延速度,受害部位和程度,大致可把森林火灾分为三大类:一.地表火 二.树冠火 三.地下火。以受害森林面积大小为标准,森林火灾分为以下四类:1.森林火警:…

pb9 调用系统语音_成都电销系统一个月多少钱_选择灵狐传媒_收费透明

灵狐传媒表示:成都电销系统一个月多少钱_选择灵狐传媒_收费透明,在成都想要找一家专业的电销系统,今天小编带您看看该怎么选择吧,和研发实践,融合互联网、云计算及人工智能、通信、大数据等技术,研发推出了以人工智能为…

java thread 线程销毁_手把手带你了解Java线程的实现方式及生命周期原理

前言我们在工作中线程技术很多情况下都能用的到,而且我们在面试的时候,线程技术基本上也是必问的。今天我来从线程的实现方式以及线程的生命周期做一个全面的讲解与分析,帮助大家能更好的去了解线程技术。概念我们先来了解下线程和进程的概念…

python自动化_python自动化测试-Behave框架的用法介绍 - python测试学习

测码学院 Behave框架的用法介绍众所周知:行为驱动开发((behavior-drivendevelopment,BDD)是一种基于敏捷软件开发的方法。它可以鼓励开发人员,业务参与者和QA人员之间的协作。作为另一个Python自动化测试框架,“Behave”允许团队…

diskgeniusv4.4.0_入门TensorFlow2.0

今天老师带领我们入门TensorFlow2.0。至于tensorflow2.0是啥嘛,详细的可以度娘一下。我简述一下,就是一个end-to-end machine-Learning open source plantform(端对端的开源机器学习的平台)。学习tensorflow需要引入tensor这个概念,tensor的汉语意思就是…

php 其他页面获取session_PHP五十个提升执行效率的小技巧,和常见问题

在项目开发过程中,经常遇到了一些PHP处理程序性能底下的情况,程序运行在centosnginx环境,虽然这个有很多的原因如:服务器本身配置,运行环境nginx服务,php-fpm配置等等,更多有一点仍然是PHPer没有…

java怎么设置404界面_如何使用Spring MVC显示自定义的404 Not Found页面

本篇文章给大家带来的内容是关于如何使用Spring MVC显示自定义的404 Not Found页面,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。不知道大家对千篇一律的404 Not Found的错误页面是否感到腻歪了?其实通过很简单…

蓝牙解码格式哪个最好_拆解报告:山灵UP2 蓝牙音频接收器

主流手机逐步取消3.5mm接口,不再内置解码芯片,习惯使用有线耳机、对音质有一定要求的朋友只能选择音频转换线或者蓝牙耳机功率放大器这类产品替代。与转换线相比,蓝牙耳机功率放大器采用蓝牙无线连接更加自由,体积一般也比较小巧。…

项目助理这个工作怎么样_分析微信清理僵尸粉这个项目怎么样?

做微信清理僵尸粉做微信清理僵尸粉做微信清理僵尸粉本人利用这个方式一年副业赚了10万01 项目介绍(为什么这个项目受欢迎)现在每个人几乎都会用到微信,但是时间长了,微信好友都是几百上千好友(5000是上限)了。但是你有没有发现,每次跟你微信沟…

java 线程安全list_JAVA并发编程实战-线程安全性

线程安全性:对象的状态是指存储在状态变量(例如实例和静态域)中的数据。对象的状态可能包括其他依赖对象的域。例如:某个HashMap的状态不仅存储在HashMap对象本身,还存储在许多Map.Entry对象中。“共享”意味变量可以由…

日文转换为罗马音_手把手教你掌握韩语40音!入门必备哦

其实学习韩语还是蛮简单的,平时看韩剧也能学会几句比较常用的话~那么接下来我们进入正题,首先你可以根据自己的韩语学习经验和全网搜集,整理出以下能够快速学习韩语40音的方法,希望能帮助到更多面对韩语40音迷茫无措的…

win7一直显示正在启动_win7系统中提高启动速度并且禁用某些软件启动的操作小技巧...

我们在启动系统时,会出现启动速度过慢,甚至达到假死机状态,就是鼠标一直在转圈圈的等待状态。出现这个问题,一般是我们电脑中自启动的软件过多造成的,解决这个问题我们只要进入系统配置工具中,对系统进行相…

站怎么点都是一样_抖音怎么做?这几样一样都不能少,你都做到了吗?

有人说去年是内容爆发年,也有人说今年是内容元年,其实不管哪年都好,反正电商平台是越来越倾向于内容化运营,包括618都对入场商家的内容化运营有要求,特别是短视频内容。下面就给大家分享一下如何去做好一个抖音账号。分…

只能获取fixed语句初始值_因用了Insert into select语句,美女同事被开除了!

点击上方 web项目开发,选择 设为星标优质文章,及时送达--Insert into select请慎用。这天xxx接到一个需求,需要将表A的数据迁移到表B中去做一个备份。本想通过程序先查询查出来然后批量插入。但xxx觉得这样有点慢,需要耗费大量的网…

mybatis依赖_这大概就是公司一直用Mybatis的原因!真的太强了

01 什么是MyBatis、Spring?MyBatis是什么?它是一个SQL Mapping框架,它是一个持久化技术框架。再说得简单一点,它只不过是一个操作数据库的框架。Spring是什么?Spring就是一个大容器,不管是IoC还是AOP&#…