JDBC封装学习笔记(二)---面向对象的JDBC

上一篇是针对连接数据库以及释放数据库资源进行的基本封装练习,这一次就是实战操作了,实际的操作一张表,数据表的信息如下图所示

一 、添加、更新、删除其实都是用的executeUpdate()方法,所以除了SQL语句不同,其他的基本一样,这里写的是一个添加操作:

 1 // 添加一个运动员,传入一个运动员对象
 2 public void addPlayers(Players player) {
 3 // 给出一个SQL
 4 String sql = "insert into userinfo" + " values (" + player.getId() + ",'" + player.getPlayerID() + "','"
 5 + player.getName() + "','" + player.getTeam() + "','" + player.getCity() + "'," + player.getMaxScore()
 6 + ",'" + player.getDraftyear() + "')";
 7 System.out.println(sql);
 8 // 调用更新方法
 9 JDBCUtils.updateData(sql);
10 }

因为是面向对象,所以添加操作添加一个完整的对象进去,这时就是需要我们创建一Players类:并且需要有对应的get(),set()方法,重写toString()是为了测试方便。另外updateData()方法的实现在上一篇文章中

 1 package com.jdbc.bean;
 2 
 3 public class Players {
 4 private int id; // ID
 5 private String playerID;
 6 private String name; // 名字
 7 private String team; // 球队
 8 private String city; // 城市
 9 private int maxScore; // 个人单场最高分
10 private String draftyear; // 选秀年
11 
12 public int getId() {
13 return id;
14 }
15 
16 public void setId(int id) {
17 this.id = id;
18 }
19 
20 public String getName() {
21 return name;
22 }
23 
24 public void setName(String name) {
25 this.name = name;
26 }
27 
28 public String getTeam() {
29 return team;
30 }
31 
32 public void setTeam(String team) {
33 this.team = team;
34 }
35 
36 public String getCity() {
37 return city;
38 }
39 
40 public void setCity(String city) {
41 this.city = city;
42 }
43 
44 public int getMaxScore() {
45 return maxScore;
46 }
47 
48 public void setMaxScore(int maxScore) {
49 this.maxScore = maxScore;
50 }
51 
52 public String getDraftyear() {
53 return draftyear;
54 }
55 
56 public void setDraftyear(String draftyear) {
57 this.draftyear = draftyear;
58 }
59 
60 public String getPlayerID() {
61 return playerID;
62 }
63 
64 public void setPlayerID(String playerID) {
65 this.playerID = playerID;
66 }
67 
68 public Players(int id, String playerID, String name, String team, String city, int maxScore, String draftyear) {
69 super();
70 this.id = id;
71 this.playerID = playerID;
72 this.name = name;
73 this.team = team;
74 this.city = city;
75 this.maxScore = maxScore;
76 this.draftyear = draftyear;
77 }
78 
79 public Players() {
80 super();
81 // TODO Auto-generated constructor stub
82 }
83 
84 @Override
85 public String toString() {
86 return "Players [id=" + id + ", playerID=" + playerID + ", name=" + name + ", team=" + team + ", city=" + city
87 + ", maxScore=" + maxScore + ", draftyear=" + draftyear + "]";
88 }
89 
90 }

我这里测试的时候使用的Junit框架,测试添加方法的方法如下所示:

1 @Test
2 public void testAddPlayers() {
3 Players player = getFromConsole();
4 addPlayers(player);
5 }

其中getFromConsole是从控制台获取的用户输入的信息,方法如下:

 1 // 从控制台获取输入的运动员信息
 2 private Players getFromConsole() {
 3 // TODO Auto-generated method stub
 4 Scanner input = new Scanner(System.in);
 5 Players player = new Players();
 6 System.out.println("请输入球员信息");
 7 // 这里因为主键在数据表中设置了自增,所以拼接的SQL中只获取,而不用再一次输入ID
 8 System.out.print("球员ID:");
 9 player.setPlayerID(input.next());
10 System.out.print("球员姓名:");
11 player.setName(input.next());
12 System.out.print("球队名称:");
13 player.setTeam(input.next());
14 System.out.print("球队城市:");
15 player.setCity(input.next());
16 System.out.print("个人单场最高分:");
17 player.setMaxScore(input.nextInt());
18 System.out.println("选秀年:");
19 player.setDraftyear(input.next());
20 
21 return player;
22 }

这些写完,就可以去测试那个testAddPlayers() 方法了,Junit框架的使用就不说了,然后运行结果附上:

二:查询操作,这里还是根据用户的输入去执行的查询:

1 @Test
2 public void testGetPlayer() {
3 // 获取查询类型
4 int searchType = getTypeFromConsole();
5 // 执行查询
6 Players players = searchPlayer(searchType);
7 // 打印运动员信息
8 printPlayer(players);
9 }

Junit的测试方法一共就调用了几个方法,然后每个方法的具体实现看一下:

  1 getTypeFromConsole():获得查询类型,用户可以根据playID和名字去查询,所以要判断用户在控制台的选择
  2 
  3 // 从控制台读入一个整数,返回1,用球员ID 查询,2,用姓名查询,其他的无效并提示让用户重新输入
  4 private int getTypeFromConsole() {
  5 // TODO Auto-generated method stub
  6 // 1 根据提示让用户输入查询类型,返回1,用球员ID 查询,2,用姓名查询
  7 System.out.println("请输入查询类型:1.使用球员ID查询,2.使用姓名查询");
  8 Scanner input = new Scanner(System.in);
  9 int type = input.nextInt();
 10 // 判断
 11 if (type != 1 && type != 2) {
 12 System.out.println("输入不合法,请重新输入....");
 13 throw new RuntimeException(); // 中断程序
 14 
 15 }
 16 return type;
 17 }
 18 
 19 searchPlayer(searchType):传入获取到的查询类型,然后进行查询
 20 
 21 // 具体查询运动员信息方法
 22 private Players searchPlayer(int searchType) {
 23 // TODO Auto-generated method stub
 24 // select * 的写法不好,这里为了偷懒
 25 String sql = "select * from userinfo" + " where ";
 26 Scanner scanner = new Scanner(System.in);
 27 // 根据确定的type,提示用户输入查询的类型
 28 //// 最终确认SQL语句
 29 if (searchType == 1) {
 30 System.out.print("请输入球员ID编号:");
 31 String playerID = scanner.next();
 32 sql = sql + "playID='" + playerID + "'";
 33 } else {
 34 System.out.print("请输入球员姓名:");
 35 String name = scanner.next();
 36 sql = sql + "username='" + name + "'";
 37 }
 38 // 执行查询
 39 Players player = getPlayer(sql);
 40 
 41 return player;
 42 }
 43 
 44 其中调用了getPlayer(sql)的方法,具体实现如下图所示:
 45 
 46 // 执行查询的方法,根据SQL语句执行查询
 47 private Players getPlayer(String sql) {
 48 // TODO Auto-generated method stub
 49 Players player = null;
 50 Connection conn = null;
 51 Statement statement = null;
 52 ResultSet rs = null;
 53 
 54 try {
 55 conn = JDBCUtils.getConnection();
 56 statement = conn.createStatement();
 57 rs = statement.executeQuery(sql);
 58 if (rs.next()) {
 59 player = new Players(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5),
 60 rs.getInt(6), rs.getString(7));
 61 int id = rs.getInt(1);
 62 String playID = rs.getString(2);
 63 String name = rs.getString(3);
 64 String team = rs.getString(4);
 65 String city = rs.getString(5);
 66 int maxScore = rs.getInt(6);
 67 String draftYear = rs.getString(7);
 68 
 69 System.out.println("ID:" + id);
 70 System.out.println("playID:" + playID);
 71 System.out.println("名字:" + name);
 72 System.out.println("球队:" + team);
 73 System.out.println("城市:" + city);
 74 System.out.println("个人单场最高分:" + maxScore);
 75 System.out.println("选秀年:" + draftYear);
 76 
 77 }
 78 } catch (ClassNotFoundException e) {
 79 // TODO Auto-generated catch block
 80 e.printStackTrace();
 81 } catch (IOException e) {
 82 // TODO Auto-generated catch block
 83 e.printStackTrace();
 84 } catch (SQLException e) {
 85 // TODO Auto-generated catch block
 86 e.printStackTrace();
 87 } finally {
 88 JDBCUtils.closeSource(rs, statement, conn);
 89 }
 90 // System.out.println(sql);
 91 return player;
 92 }
 93 
 94 printPlayer(player):打印运动员信息,如果运动员信息存在,打印出来。不存在就显示查无此人
 95 
 96 // 打印运动员信息
 97 private void printPlayer(Players players) {
 98 // TODO Auto-generated method stub
 99 if (players != null) {
100 System.out.println(players);
101 } else {
102 System.out.println("查无此人....");
103 }
104 }

上述这些代码写完,就可以执行testGetPlayer()方法了。

原文地址:https://www.cnblogs.com/yaoruozi/p/8521016.html