首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

原标题: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*FROMProducts

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

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

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

//完整程序见本文压缩附件中名为JDBCQueryFrame.java源代码

publicvoidactionPerformed(ActionEvent e){//事件处理

Object source = e.getSource;

if(source == createButton) {//建立新表事件

setUpdateComponents;

submitButton.setVisible(true);

update =true;

area.setText(createQuery);

}

elseif(source == insertButton) {//添加记录事件

setUpdateComponents;

submitButton.setVisible(true);

update =true;

area.setText(insertQuery);

}

elseif(source == selectButton) {//选择记录事件

setUpdateComponents;//调用自定义方法设置GUI显示

submitButton.setVisible(true);//显示发送按钮

update =false;//更新状态为假

area.setText(selectQuery);//显示SQL选择指令语法格式

}

elseif(source == updateButton) {

setUpdateComponents;

update =true;

area.setText(updateQuery);

}

elseif(source == deleteButton) {

setUpdateComponents;

update =true;

area.setText(deleteQuery);

}

elseif(source == dropButton) {

setUpdateComponents;

update =true;

area.setText(dropQuery);

}

elseif( 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:"+ query);

else{//如果是选择记录操作

displayRecords;//调用自定义方法显示选择的记录

}

}

elseif(source == exitButton) {

System.exit();

}

}

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

//完整程序见本文压缩附件中名为JDBCQueryFrame.java源代码

privatevoid 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>

colSize = metadata.getColumnDisplaySize(i);

record = rs.getString(i); //得到记录

if (i

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210306A01EWK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券