JDBC实验测试

一、语言和环境

实现语言:Java。

环境要求:IDEA2023.3、JDK 17 、MySQL8.0、Navicat 16 for MySQL。

二、技术要求

该系统采用 SWING 技术配合 JDBC 使用 JAVA 编程语言完成桌面应用开发。

三、功能要求

某电商公司为了方便客服查看用户的订单信息,需开发一个用户订单管理系统。要求本系统实现以下功能:

  1. 启动程序后进入主界面,显示所有订单信息,效果如图 1 所示:
  • 2.在订单编号文本框中输入正确订单号显示该订单信息,如图 2

  • 3.选中某个订单后点击删除按钮,提示是否真的要删除,确定后删除该数据。如图 3:

4.删除成功后显示删除后订单信息。如图 4:

四、数据库设计

数据库名为 OrderDb,表结构如下。

表 1 订单表(tb_order)

|----------|--------|--------------|---------|
| 列名 | 含义 | 数据类型 | 约束(描述) |
| id | 编号 | int | 主键,自动增长 |
| name | 商品名称 | varchar(20) | 非空 |
| price | 价格 | decimal(5,2) | 非空 |
| orderID | 所属订单单号 | varchar(20) | 非空 |
| descinfo | 描述 | varchar(100) | |

五、具体要求及推荐实现步骤

创建数据库和表

创建订单实体类

创建 BaseDAO 类完成数据库的连接和关闭

创建 OrderDAO 完成对订单的查询与删除功能

创建 MainFrame 类并添加相应组件,完成界面设计

在 MainFrame 中添加 JTable 完成数据展示。

在 MainFrame 中添加 Jbutton 完成数据删除

在 MainFrame 中添加文本框完成单条数据搜索

六、注意事项

|------------|------------|----------------------------|
| 题目:物流跟踪管理系统 |||
| 该程序的评分标准如下:(测试时间90分钟) |||
| 10 | 数据库和表 ||
| | 正确创建数据库和表 6 分,测试数据 4 分。必须以分离数据库或脚本方式提交, 否则该项不得分 ||
| 5 | 正确创建和编写实体类,包含所有属性及方法 ||
| 10 | 正确创建并编写 BaseDAO 完成数据库的连接(5 分)和关闭(5 分)。 ||
| 30 | 正确创建并编写 OrderDAO 完成数据查询与删除 ||
| | 10 | 列表数据查询 |
| | 10 | 单条数据查询 |
| | 10 | 数据删除 |
| 40 | 创建并编写 MainFrame 类完成界面设计及功能调用 ||
| | 5 | 图 1 中各个组件的设计 |
| | 10 | 图 1 中数据展示 |
| | 10 | 图 2 中单条数据并正确展示在 JTable 中 |
| | 5 | 图 3 中单条数据删除询问 |
| | 10 | 图 4 中数据删除并展示新数据在 Jtable 中。 |
| 5 | 总体编程技术 ||
| | 2 | 编码规范 |
| | 3 | 注释完善 |
| 总分 || 100 分 |

七、参考答案

(一)新建数据库orderdb,表tb_order,并插入实验数据

java 复制代码
-- ----------------------------

-- Table structure for tb_order

-- ----------------------------

DROP TABLE IF EXISTS `tb_order`;

CREATE TABLE `tb_order` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `name` varchar(20) NOT NULL,

  `price` decimal(10,2) NOT NULL,

  `orderid` varchar(20) DEFAULT NULL,

  `descinfo` varchar(100) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; 

-- ----------------------------

-- Records of tb_order

-- ----------------------------

INSERT INTO `tb_order` VALUES ('1', 'iphones Max', '8999.00', '5325781', '刘公保的订单');

INSERT INTO `tb_order` VALUES ('2', '小米10', '3655.00', '20240405', '梁思琪的订单');

INSERT INTO `tb_order` VALUES ('3', '华为荣耀10', '3200.00', '20241102', '曾炳粮的订单');

(二)Java Swing

新建com.hnjt.Bean.tb_order.java,具体代码如下。

java 复制代码
package com.hnjt.Bean;

public class tb_order {
    private int id;
    private String name;
    private double price;
    private int orderID;
    private String descinfo;
    public tb_order() {
        super();
    }
    public tb_order(int id, String name, double price, int orderID, String descinfo) {
        super();
        this.id = id;
        this.name = name;
        this.price = price;
        this.orderID = orderID;
        this.descinfo = descinfo;
    }
    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 double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public int getOrderID() {
        return orderID;
    }
    public void setOrderID(int orderID) {
        this.orderID = orderID;
    }
    public String getDescinfo() {
        return descinfo;
    }
    public void setDescinfo(String descinfo) {
        this.descinfo = descinfo;
    }

}

新建com.hnjt.BaseDAO. DbConnection.java,具体代码如下。

java 复制代码
package com.hnjt.BaseDAO;
import java.sql.*;
import javax.swing.JOptionPane;

public class DbConnection {
    //驱动类的类名
    private static final String DRIVERNAME="com.mysql.cj.jdbc.Driver";
    //连接数据的URL路径
    private static final String URL="jdbc:mysql://localhost:3306/orderdb?serverTimezone=GMT";
    //数据库登录账号
    private static final String USER="root";
    //数据库登录密码
    private static final String PASSWORD="123456";
    //加载驱动
    static{
        try {
            Class.forName(DRIVERNAME);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    //获取数据库连接
    public static Connection getConnection() {
        try {
            return DriverManager.getConnection(URL,USER,PASSWORD);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    //查询
    public static ResultSet query(String sql) {
        System.out.println(sql);
        //获取连接
        Connection connection=getConnection();
        PreparedStatement psd;
        try {
            psd = connection.prepareStatement(sql);
            return psd.executeQuery();
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null,"执行语句出错\n"+e.toString());
            e.printStackTrace();
        }
        return null;
    }
    //增、删、改、查
    public static int updataInfo(String sql) {
        System.out.println(sql);
        //获取连接
        Connection connection=getConnection();
        try {
            PreparedStatement psd=connection.prepareStatement(sql);
            return psd.executeUpdate();
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null,"执行语句出错\n"+e.toString());
            e.printStackTrace();
        }
        return 0;
    }
    //关闭连接
    public static void colse(ResultSet rs, Statement stmt, Connection  conn) throws Exception{
        try {
            if (rs != null){
                rs.close();
            }
            if (stmt != null){
                stmt.cancel();
            }
            if (conn != null) { conn.close(); }
        } catch (Exception e) {
            e.printStackTrace(); throw new Exception();
        }
    }
}

新建com.hnjt.OrderDAO. Update.java,具体代码如下。

java 复制代码
package com.hnjt.OrderDAO;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import com.hnjt.Bean.tb_order;
import com.hnjt.BaseDAO.DbConnection;
public class Update {
    //查询主页信息
    public Object[][] getMainInfo(String id) {
        String sql;
        if (id.equals("")) {
            sql = "select * from tb_order";
        }else {
            sql = "select * from tb_order WHERE orderid LIKE '"+id+"%';";
        }
        ResultSet re = DbConnection.query(sql);
        ArrayList<tb_order> list = new ArrayList<tb_order>();
        try {
            while (re.next()) {
                tb_order tb = new tb_order();
                tb.setId(re.getInt(1));
                tb.setName(re.getString(2));
                tb.setPrice(re.getDouble(3));
                tb.setOrderID(re.getInt(4));
                tb.setDescinfo(re.getString(5));
                list.add(tb);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        Object[][] ob = new Object[list.size()][5];
        for (int i = 0; i < list.size(); i++) {
            ob[i][0] = list.get(i).getId();
            ob[i][1] = list.get(i).getName();
            ob[i][2] = list.get(i).getPrice();
            ob[i][3] = list.get(i).getOrderID();
            ob[i][4] = list.get(i).getDescinfo();
        }
        return ob;
    }
    //删除数据
    public int addData(int id) {
        String sql = "DELETE FROM tb_order WHERE id='"+id+"';";
        return DbConnection.updataInfo(sql);
    }

}

新建com.hnjt.Vive. MainFrame.java,具体代码如下。

java 复制代码
package com.hnjt.Vive;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import com.hnjt.OrderDAO.Update;
import javax.swing.JButton;
public class MainFrame extends JFrame {
    private JTextField orderid;
    Update update = new Update();
    Object[] header = {"编号","商品名称","商品价格","订单编号","订单描述"};
    Object[][] data = update.getMainInfo("");
    DefaultTableModel df = new DefaultTableModel(data, header);
    public MainFrame() {
        super("物流跟踪管理系统");
        this.setBounds(0, 0, 700, 500);
        getContentPane().setLayout(null);
        this.setLocationRelativeTo(null);
        this.setResizable(false);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JLabel title = new JLabel("物流跟踪管理系统");
        title.setFont(new Font("宋体", Font.BOLD, 40));
        title.setBounds(182, 13, 336, 50);
        getContentPane().add(title);
        JLabel orderid_text = new JLabel("订单编号");
        orderid_text.setBounds(14, 70, 72, 18);
        getContentPane().add(orderid_text);
        orderid = new JTextField();
        orderid.setBounds(80, 67, 179, 24);
        getContentPane().add(orderid);
        orderid.setColumns(10);
        JButton seach = new JButton("搜索");
        seach.setBounds(273, 66, 90, 27);
        getContentPane().add(seach);
        seach.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (orderid.equals("")) {
                    JOptionPane.showMessageDialog(null, "请输入要查询的订单编号!");
                } else {
                    String id = orderid.getText();
                    data = update.getMainInfo(id);
                    df.setDataVector(data, header);
                }
            }
        });
        JTable jTable = new JTable(df);
        JScrollPane scrollPane = new JScrollPane(jTable);
        scrollPane.setBounds(14, 104, 666, 302);
        getContentPane().add(scrollPane);
        JButton delete = new JButton("删除");
        delete.setBounds(590, 425, 90, 27);
        getContentPane().add(delete);
        delete.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (jTable.getSelectedColumn()<0) {
                    JOptionPane.showMessageDialog(null, "请选择要删除的数据!");
                } else {
                    int num = JOptionPane.showConfirmDialog(null, "您真的真的要删除吗?","温馨提示", 0,1);
                    int id = Integer.parseInt(jTable.getValueAt(jTable.getSelectedRow(), 0).toString());
                    if(num == JOptionPane.OK_OPTION){
                        int result = update.addData(id);
                        if (result>0) {
                            JOptionPane.showMessageDialog(null, "删除成功!");
                            orderid.setText("");
                        } else {
                            JOptionPane.showMessageDialog(null, "删除失败!");
                        }
                    }
                }
            }
        });

    }

新建com.hnjt.Test. Test.java,测试运行,具体代码如下。

java 复制代码
package com.hnjt.Test;
import com.hnjt.Vive.MainFrame;
public class Test {
    public static void main(String[] args) {
        new MainFrame().setVisible(true);
    }
}
相关推荐
小猪咪piggy1 分钟前
【JavaSE】(8) String 类
java·开发语言
fadtes15 分钟前
C++ 智能指针(八股总结)
开发语言·c++
cfjybgkmf40 分钟前
Python数据类型间的转换及eval函数
开发语言·python
Lime-309042 分钟前
Nginx+Tomcat实现动静分离
java·服务器·nginx
孤客网络科技工作室1 小时前
不使用 JS 纯 CSS 获取屏幕宽高
开发语言·javascript·css
轩情吖1 小时前
一文速通stack和queue的理解与使用
开发语言·c++·后端·deque·优先级队列·stack和queue
Agnes_A201 小时前
线性回归笔记1-4
开发语言·python
mumu2lili1 小时前
k8s namespace绑定节点
java·容器·kubernetes
ByteBlossom6661 小时前
JavaScript语言的正则表达式
开发语言·后端·golang
mikey棒棒棒1 小时前
基于Redis实现短信验证码登录
java·开发语言·数据库·redis·session