写点什么

Java 高手速成│实战:应用数据库和 GUI 开发产品销售管理软件(2)

作者:TiAmo
  • 2023-01-04
    江苏
  • 本文字数:2649 字

    阅读完需:约 9 分钟

Java高手速成│实战:应用数据库和GUI开发产品销售管理软件(2)

实战项目:应用数据库和 GUI 开发产品销售管理软件(2)

01、项目分析

改进实战项目——应用数据库和GUI开发产品销售管理软件(1)的设计和操作,并增加新的功能;利用按钮和文本框实现对数据库编程的主要操作,如数据表创建、记录添加、记录选择、记录更新、记录删除、数据表删除等功能。图 1 显示了这个实例运行后的典型显示窗口。


▍图 1 实例运行后的典型运行窗口

02、类的设计

JDBCQueryFrame——用来进行 JDBC 数据库连接、建立包括创建、加入、选择、更新、删除、消除等 SQL 指令的提示以及异常处理等操作。并且创建 ButtonPanel 对象处理对 GUI 组件的布局管理和显示。

ButtonPanel——包括按钮、文本框等 GUI 组件的创建、事件处理、输入指令信息和输出结果显示格式处理、SQL 指令的发送、回传以及显示处理以及异常处理等功能。

JDBCQueryFrameApp——测试程序,用来运行这个实战项目代码。完整源程序代码见本文压缩附件中名为 JDBCQueryFrame.java 以及 JDBCQueryFrameApp.java。

当程序运行时,用户按下任何一个对数据表和记录操作的按钮,相应的 SQL 指令语法格式将显示在文本框中,提示用户的操作。例如,按下选择 Select 记录按钮后,将显示如图 2 所示窗口:

▍图 2 进行选择记录操作的窗口

这时用户可以在提示处输入具体的字段列表、数据表名以及选择条件。例如,全选数据表 Products 所有记录的 SQL 指令为:

SELECT * FROM Products
复制代码

按下以上指令,按下发送 Submit 键后,将在文本框中显示 SQL 指令执行结果,如图 3 所示。如果用户输入错误的 SQL 指令,将显示出错信息。

▍图 3 执行 SQL 选择记录指令后的一个典型运行结果

以上操作包括其他对数据表记录操作的主要代码如下:

public void actionPerformed(ActionEvent e) { //事件处理      Object source = e.getSource();      if (source == createButton) { //建立新表事件      setUpdateComponents();        submitButton.setVisible(true);        update = true;      area.setText(createQuery);      }      else if(source == insertButton) { //添加记录事件      setUpdateComponents();        submitButton.setVisible(true);        update = true;      area.setText(insertQuery);      }    else if(source == selectButton) { //选择记录事件        setUpdateComponents(); //调用自定义方法设置GUI显示        submitButton.setVisible(true); //显示发送按钮        update = false; //更新状态为假        area.setText(selectQuery); //显示SQL选择指令语法格式      }      else if(source == updateButton) {      setUpdateComponents();        update = true;      area.setText(updateQuery);      }      else if(source == deleteButton) {      setUpdateComponents();        update = true;      area.setText(deleteQuery);      }       else if(source == dropButton) {      setUpdateComponents();        update = true;      area.setText(dropQuery);      }     else if( source == submitButton) { //发送事件处理        query = area.getText(); //得到SQL指令        executeQuery(); //执行SQL指令        resetComponents(); //重设GUI显示        area.setText(""); //清除SQL指令        if (update) //如果是更新操作        JOptionPane.showMessageDialog(null, "The following SQL statement has been executed:\n" + query);        else { //如果是选择记录操作          displayRecords(); //调用自定义方法显示选择的记录        }      }       else if(source == exitButton) {         System.exit(0);       }    }
复制代码

可以看到,按下 selectButton 将触发对记录的选择事件处理。首先调用自定义方法 setUpdateComponents(),改变 GUI 窗口的显示内容,并设置显示发送按钮。由于选择记录的操作与其他操作不同,需要调用 Statement 的 executeQuery()方法,所以设置表示不同操作状态的布尔变量 update 为假;而利用 executeUpdate()对记录和数据进行更新操作时,则设置 update 为真。最后调用 JTextArea 的方法 setText()将标准记录选择指令格式显示在文本框中。按下 submitButton,将触发对发送事件的处理,通过调用 JTextArea 的 getText()获取文本框中用户修改后的选择记录指令,再调用自定义方法 executeQuery()执行这个指令。这时,窗口将被重设为原先的显示状态,并且清除文本框中的内容。如果 update 状态为真,说明不是选择记录的操作,而是更新纪录,否则调用自定义方法 displayRecords(),将这个指令执行后得到的数据表记录显示到文本框中。另外一个自定义方法 makeEvenSpace()对除过每个记录的最后一列的长度进行计算,然后补加空格,使记录的每列都有相同的显示长度,便于确定记录位置和编程。如下是 executeQuery()、displayRecords()以及 makeEvenSpace()方法的代码:

private void executeQuery() { //自定义方法执行SQL指令  try {    if (update) //更新记录操作      stmt.executeUpdate(query);    else      rs = stmt.executeQuery(query); //选择记录操作  }  catch (SQLException e) {    JOptionPane.showMessageDialog(null, "Error in SQL statement...”);  }}private void displayRecords() { //自定义方法显示执行结果  String record = "", newRecord = ""; //初始化  try {    ResultSetMetaData metadata = rs.getMetaData(); //创建元数据对象    int col = metadata.getColumnCount(); //得到记录行数    while (rs.next()) { //循环得到所有选择的纪录      for(int i=1; i <= col; i++) {          colSize = metadata.getColumnDisplaySize(i);          record = rs.getString(i); //得到记录          if (i <= col-1) //不是最后一列            record = makeEvenSpace(record, colSize); //补加空格          newRecord += record + "\t";        }area.append(newRecord + "\n");        record = "";        newRecord = ""; //清除内容,为下一行准备    }    rs.close();  }  catch (SQLException sqle) {       JOptionPane.showMessageDialog(null, "Error in SQL statement...");  }  catch (NullPointerException e) {    JOptionPane.showMessageDialog(null, "No such record found...");  }}
复制代码

关于设置和更新 GUI 窗口显示的代码,以及对记录和数据表的其他操作与选择记录有所相似,这里不再一一赘述。


发布于: 刚刚阅读数: 2
用户头像

TiAmo

关注

有能力爱自己,有余力爱别人! 2022-06-16 加入

CSDN全栈领域优质创作者;阿里云创作者社区专家博主、技术博主、星级博主;华为云享专家;

评论

发布
暂无评论
Java高手速成│实战:应用数据库和GUI开发产品销售管理软件(2)_数据库_TiAmo_InfoQ写作社区