• 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()方法了。

  • 相关阅读:
    Windows下MongoDB安装与PHP扩展
    仿Smarty替换模板标签时遇到的问题
    class ha_innobase: public handler
    类handler
    类Item_field
    函数buf_pool_init_instance
    函数buf_pool_init
    安装php,nginx 带debug
    gdb调试SAPI方式的php
    重启php-fpm
  • 原文地址:https://www.cnblogs.com/yaoruozi/p/8521016.html
Copyright © 2020-2023  润新知