一、前言
这是本学期我的课程设计最早编写出的版本,主要是通过Java语言实现对MySQL数据库的调用,完成对数据库中数据的增、删、改、查。在这里难点是连接数据库和数据库操作,需要有一定的Java语言基础和SQL语言基础。
二、数据结构描述
2.1 数据结构和存储结构
1.ArrayList
ArrayList是一个数组队列,相当于动态数组。相比于Java中的数组,它的容量能动态增长。ArrayList继承了AbstractList,实现了List。提供了相关的添加、删除、修改、遍历等功能。在ArrayList中,可以通过元素的序号快速获取元素对象;动态数组底层是基于数组来实现容量大小变化的线性数据结构,数组是用于储存多个相同类型数据的集合。数组的顺序存储结构,在逻辑上相邻的两个元素,他们的物理位置也是相邻的,即线性关系利用物理上的相邻关系来体现,并且不需要为数组中元素之间的逻辑关系而增加额外的存储空间。在加入数据是不需要考虑数组的长度大学,但是在输出时采用循环输出的方式,具有更高的效率。
2.2 主要算法
1.Sort排序
是改进的快速排序算法。用于对list中的元素进行排序,并返回一个list,默认的排序方法是根据字符串Unicode码。在本系统中用sort排序根据球员的年龄或者表现评级从大到小的排序。
2.顺序查找
顺序查找算法是按照序列原有顺序对数组进行遍历比较查询的基本算法。
注:由于这个版本涉及到数据库的连接与使用,所以在数据结构和算法上有所减少。更多的操作是用SQL语言实现。
三、重要的代码部分
1.数据库连接
private static final String DROVER_NAME="com.mysql.jdbc.Driver";
private static final String URL="jdbc:mysql://localhost/PLAYER";
private static final String USER="root";
private static final String PASS="root";
public static Connection getCon() throws ClassNotFoundException,
SQLException{
Connection con=null;
Class.forName(DROVER_NAME);
con= DriverManager.getConnection(URL,USER,PASS);
return con;
}
public static void close(Connection con, Statement stmt, ResultSet rs){
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
在连接数据库之前需要在lib包下加入mysql-connector-java-5.1.38.jar文件。
在这里建议将DROVER_NAME、URL、USER、PASS单独定义,这样可以减少getCon()中的代码复杂程度,并且可以便于问题的修改。URL的形式是jdbc:mysql://localhost/数据库名称
这里定义一个close()用于关闭数据库的连接,在这里建立之后可以减少后续代码编写中要关闭数据库连接的代码长度。
2.数据库的操作
这里使用添加球员为例
public boolean add(Player player){
String sql="insert into player(P_ID,P_NAME,P_SEX,P_AGE,P_CLASS,P_PHONE,P_PERFORMANCE,P_GRADE) values(?,?,?,?,?,?,?,?)";
try{
con = DBUtil.getCon();
pstmt=con.prepareStatement(sql);
pstmt.setString(1, player.getID());
pstmt.setString(2, player.getNAME());
pstmt.setString(3, player.getSEX());
pstmt.setInt(4, player.getAGE());
pstmt.setString(5, player.getCLASS());
pstmt.setString(6, player.getPHONE());
pstmt.setString(7, player.getPERFORMANCE());
pstmt.setString(8, player.getGRADE());
pstmt.executeUpdate();
}catch (ClassNotFoundException e){
e.printStackTrace();
return false;
}catch (SQLException e){
e.printStackTrace();
return false;
}finally {
DBUtil.close(con,pstmt,rs);
}
return true;
}
首先是定义sql语句 intsert into 表名(属性) values(属性值),属性有几个属性值处就有几个问号,之后就是连接数据库和执行sql语句。注意:数据库的连接和操作都要在try-catch-finally下执行,可以方便找出错误。第一行 con=DBUtil.getCon()是连接数据,第二句 pstmt=con.prepareStatement(sql)是执行的sql语句,之后的就是获取球员信息使用setString和setInt获得球员相应的属性值,最后就用executeUpdate()更新数据库信息。
四、完整的代码
1.球员类 Player.java
package Player;/*
@Author :张鹏翔
@Date :Creater in 18:36 2021/10/23
实体类,封装球员信息
*/
public class Player {
private String ID; //球员编号
private String NAME; //球员姓名
private String SEX; //球员性别
private Integer AGE; //球员的年龄
private String CLASS; //球员班级
private String PHONE; //球员手机号
private String PERFORMANCE; //球员表现
private String GRADE; //球员评级
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getNAME() {
return NAME;
}
public void setNAME(String NAME) {
this.NAME = NAME;
}
public String getSEX() {
return SEX;
}
public void setSEX(String SEX) {
this.SEX = SEX;
}
public int getAGE() {
return AGE;
}
public void setAGE(Integer AGE) {
this.AGE = AGE;
}
public String getCLASS() {
return CLASS;
}
public void setCLASS(String CLASS) {
this.CLASS = CLASS;