码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2018-03-07 11:40:32      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:打印   pac   select   输入   ext   png   创建   封装   不用   

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

技术分享图片

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

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

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

package com.jdbc.bean;

public class Players {
private int id; // ID
private String playerID;
private String name; // 名字
private String team; // 球队
private String city; // 城市
private int maxScore; // 个人单场最高分
private String draftyear; // 选秀年

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getTeam() {
return team;
}

public void setTeam(String team) {
this.team = team;
}

public String getCity() {
return city;
}

public void setCity(String city) {
this.city = city;
}

public int getMaxScore() {
return maxScore;
}

public void setMaxScore(int maxScore) {
this.maxScore = maxScore;
}

public String getDraftyear() {
return draftyear;
}

public void setDraftyear(String draftyear) {
this.draftyear = draftyear;
}

public String getPlayerID() {
return playerID;
}

public void setPlayerID(String playerID) {
this.playerID = playerID;
}

public Players(int id, String playerID, String name, String team, String city, int maxScore, String draftyear) {
super();
this.id = id;
this.playerID = playerID;
this.name = name;
this.team = team;
this.city = city;
this.maxScore = maxScore;
this.draftyear = draftyear;
}

public Players() {
super();
// TODO Auto-generated constructor stub
}

@Override
public String toString() {
return "Players [id=" + id + ", playerID=" + playerID + ", name=" + name + ", team=" + team + ", city=" + city
+ ", maxScore=" + maxScore + ", draftyear=" + draftyear + "]";
}

}

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

@Test
public void testAddPlayers() {
Players player = getFromConsole();
addPlayers(player);
}

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

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

return player;
}

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

技术分享图片

技术分享图片

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

@Test
public void testGetPlayer() {
// 获取查询类型
int searchType = getTypeFromConsole();
// 执行查询
Players players = searchPlayer(searchType);
// 打印运动员信息
printPlayer(players);
}

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

getTypeFromConsole():获得查询类型,用户可以根据playID和名字去查询,所以要判断用户在控制台的选择

// 从控制台读入一个整数,返回1,用球员ID 查询,2,用姓名查询,其他的无效并提示让用户重新输入
private int getTypeFromConsole() {
// TODO Auto-generated method stub
// 1 根据提示让用户输入查询类型,返回1,用球员ID 查询,2,用姓名查询
System.out.println("请输入查询类型:1.使用球员ID查询,2.使用姓名查询");
Scanner input = new Scanner(System.in);
int type = input.nextInt();
// 判断
if (type != 1 && type != 2) {
System.out.println("输入不合法,请重新输入....");
throw new RuntimeException(); // 中断程序

}
return type;
}

searchPlayer(searchType):传入获取到的查询类型,然后进行查询

// 具体查询运动员信息方法
private Players searchPlayer(int searchType) {
// TODO Auto-generated method stub
// select * 的写法不好,这里为了偷懒
String sql = "select * from userinfo" + " where ";
Scanner scanner = new Scanner(System.in);
// 根据确定的type,提示用户输入查询的类型
//// 最终确认SQL语句
if (searchType == 1) {
System.out.print("请输入球员ID编号:");
String playerID = scanner.next();
sql = sql + "playID=‘" + playerID + "‘";
} else {
System.out.print("请输入球员姓名:");
String name = scanner.next();
sql = sql + "username=‘" + name + "‘";
}
// 执行查询
Players player = getPlayer(sql);

return player;
}

其中调用了getPlayer(sql)的方法,具体实现如下图所示:

// 执行查询的方法,根据SQL语句执行查询
private Players getPlayer(String sql) {
// TODO Auto-generated method stub
Players player = null;
Connection conn = null;
Statement statement = null;
ResultSet rs = null;

try {
conn = JDBCUtils.getConnection();
statement = conn.createStatement();
rs = statement.executeQuery(sql);
if (rs.next()) {
player = new Players(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5),
rs.getInt(6), rs.getString(7));
int id = rs.getInt(1);
String playID = rs.getString(2);
String name = rs.getString(3);
String team = rs.getString(4);
String city = rs.getString(5);
int maxScore = rs.getInt(6);
String draftYear = rs.getString(7);

System.out.println("ID:" + id);
System.out.println("playID:" + playID);
System.out.println("名字:" + name);
System.out.println("球队:" + team);
System.out.println("城市:" + city);
System.out.println("个人单场最高分:" + maxScore);
System.out.println("选秀年:" + draftYear);

}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
JDBCUtils.closeSource(rs, statement, conn);
}
// System.out.println(sql);
return player;
}

printPlayer(player):打印运动员信息,如果运动员信息存在,打印出来。不存在就显示查无此人

// 打印运动员信息
private void printPlayer(Players players) {
// TODO Auto-generated method stub
if (players != null) {
System.out.println(players);
} else {
System.out.println("查无此人....");
}
}

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

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

标签:打印   pac   select   输入   ext   png   创建   封装   不用   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!