逐句分析private void search(){ PreparedStatement state; ResultSet resultSet; if(type==1){ try { state=connection.prepareStatement("select * from absent where Sname"+"="+"'"+user.getName()+"'"); //这里不好 因为名字可以一样 以后要改 resultSet = state.executeQuery(); while (resultSet.next()){ String Sno=resultSet.getString(1); String Sname=resultSet.getString(2); String Dno=resultSet.getString(3); String Atime=resultSet.getString(4); String Areason=resultSet.getString(5); String[] data={Sno,Sname,Dno,Atime,Areason}; a.addRow(data); } } catch (SQLException e) { e.printStackTrace(); } } if(type==2||type==3){ try { record(); state=connection.prepareStatement("select*from absent"); resultSet = state.executeQuery(); while (resultSet.next()){ String Sno=resultSet.getString(1); String Sname=resultSet.getString(2); String Dno=resultSet.getString(3); String Atime=resultSet.getString(4); String Areason=resultSet.getString(5); String[] data={Sno,Sname,Dno,Atime,Areason}; a.addRow(data); } }catch (Exception e){ e.printStackTrace(); } } }
时间: 2024-03-18 15:42:53 浏览: 57
这是一个私有方法 search() 的定义。方法中定义了以下局部变量:
- PreparedStatement state:类型为 PreparedStatement,用于执行 SQL 语句。
- ResultSet resultSet:类型为 ResultSet,表示查询结果集。
方法中使用了条件语句,如果 type 的值为 1,则执行以下代码块:
- 创建 PreparedStatement 对象 state,使用 SQL 语句查询 absent 表中所有 Sname 字段值等于 user.getName() 的记录。
- 执行 SQL 语句,将结果集赋值给 resultSet 对象。
- 遍历结果集,将每条记录的 Sno、Sname、Dno、Atime、Areason 字段值添加到字符串数组 data 中,然后将 data 添加到表格模板 a 中。
如果 type 的值为 2 或 3,则执行以下代码块:
- 调用 record() 方法。
- 创建 PreparedStatement 对象 state,使用 SQL 语句查询 absent 表中所有记录。
- 执行 SQL 语句,将结果集赋值给 resultSet 对象。
- 遍历结果集,将每条记录的 Sno、Sname、Dno、Atime、Areason 字段值添加到字符串数组 data 中,然后将 data 添加到表格模板 a 中。
在方法的最后,使用 catch 语句捕获可能出现的异常并打印异常堆栈信息。
相关问题
逐句解析private void search(){ PreparedStatement state; ResultSet resultSet; if(type==1){ try { state=connection.prepareStatement("select * from absent where Sname"+"="+"'"+user.getName()+"'"); //这里不好 因为名字可以一样 以后要改 resultSet = state.executeQuery(); while (resultSet.next()){ String Sno=resultSet.getString(1); String Sname=resultSet.getString(2); String Dno=resultSet.getString(3); String Atime=resultSet.getString(4); String Areason=resultSet.getString(5); String[] data={Sno,Sname,Dno,Atime,Areason}; a.addRow(data); } } catch (SQLException e) { e.printStackTrace(); } } if(type==2||type==3){ try { record(); state=connection.prepareStatement("select*from absent"); resultSet = state.executeQuery(); while (resultSet.next()){ String Sno=resultSet.getString(1); String Sname=resultSet.getString(2); String Dno=resultSet.getString(3); String Atime=resultSet.getString(4); String Areason=resultSet.getString(5); String[] data={Sno,Sname,Dno,Atime,Areason}; a.addRow(data); } }catch (Exception e){ e.printStackTrace(); } } }
这段代码定义了一个私有的方法 `search()`,该方法没有参数。
在方法中,首先声明了三个变量 `state`、`resultSet` 和 `data`,类型分别为 `PreparedStatement`、`ResultSet` 和 `String[]`。
然后,通过判断变量 `type` 的值,来确定执行哪一段代码。如果 `type` 的值为 1,那么执行以下代码块:
```java
state = connection.prepareStatement("select * from absent where Sname"+"="+"'"+user.getName()+"'");
resultSet = state.executeQuery();
while (resultSet.next()){
String Sno=resultSet.getString(1);
String Sname=resultSet.getString(2);
String Dno=resultSet.getString(3);
String Atime=resultSet.getString(4);
String Areason=resultSet.getString(5);
String[] data={Sno,Sname,Dno,Atime,Areason};
a.addRow(data);
}
```
这段代码的作用是从数据库中查询名字为 `user.getName()` 的记录,并将查询结果添加到 `data` 中。
如果 `type` 的值为 2 或 3,那么先调用 `record()` 方法,然后执行以下代码块:
```java
state = connection.prepareStatement("select*from absent");
resultSet = state.executeQuery();
while (resultSet.next()){
String Sno=resultSet.getString(1);
String Sname=resultSet.getString(2);
String Dno=resultSet.getString(3);
String Atime=resultSet.getString(4);
String Areason=resultSet.getString(5);
String[] data={Sno,Sname,Dno,Atime,Areason};
a.addRow(data);
}
```
这段代码的作用是从数据库中查询所有记录,并将查询结果添加到 `data` 中。
最后,如果出现异常,则打印异常信息。
public void actionPerformed(ActionEvent e) { if (e.getSource() == delete){ try { PreparedStatement statement = connection.prepareStatement("DELETE FROM ade WHERE remark=" + "'" + DnoText.getText() + "'"); statement.executeUpdate(); PreparedStatement state = connection.prepareStatement("select*from ade"); ResultSet resultSet = state.executeQuery(); while (mm.getRowCount() > 0) {//把表格进行刷新,下次显示的时候重头开始显示 //System.out.println(model.getRowCount()); mm.removeRow(mm.getRowCount() - 1); } while (resultSet.next()) { String Sno=resultSet.getString(1); String Sname=resultSet.getString(2); String Ssex=resultSet.getString(3); String Sdept=resultSet.getString(4); String Dno=resultSet.getString(5); String[] data={Sno,Sname,Ssex,Sdept,Dno}; mm.addRow(data); } } catch (SQLException e1) { e1.printStackTrace(); } JOptionPane.showMessageDialog(this, "删除成功"); }
这段代码是一个事件处理方法actionPerformed,当delete按钮被点击时,会执行该方法。该方法的主要功能是从数据库中删除一条remark为用户输入的DnoText文本框中的值的数据,并且更新显示在表格中的数据。具体的实现步骤如下:
1. 获取用户输入的DnoText文本框中的值,并且使用该值作为删除的条件,从ade表中删除相应数据。
2. 使用PreparedStatement对象执行SQL语句,具体为DELETE FROM ade WHERE remark=用户输入的DnoText文本框中的值。
3. 使用PreparedStatement对象执行更新操作,具体为statement.executeUpdate()。
4. 查询ade表中的数据,并且使用ResultSet对象获取相应的数据。
5. 清空表格中的数据。
6. 将ResultSet对象中的数据逐行读取,并且将数据添加到表格中。
7. 若删除操作成功,弹出删除成功的提示框。
需要注意的是,该段代码中存在SQL注入漏洞,因为用户输入的DnoText文本框中的值直接拼接到SQL语句中,可能会被恶意用户利用。应该使用参数化查询来避免该问题。
阅读全文