📄 attacksolutiondao.java
字号:
package struts.sample.cap1.sample3.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import struts.sample.cap1.sample3.entity.AttackSolution;
public class AttackSolutionDAO {
// 提供一个JDBC的连接变量,该变量将会在构造函数中被调用并赋值
private DataSource dataSource;
private Connection con;
/**
* 默认的构造函数
*/
public AttackSolutionDAO() {
try {
Context initCtx = new InitialContext();
dataSource = (DataSource) initCtx.lookup("java:jdbc/MySqlDS");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private Connection getConnection() {
/*
* String connName = "jdbc:mysql://localhost:3306/test"; try {
* Class.forName("com.mysql.jdbc.Driver").newInstance(); con =
* DriverManager.getConnection(connName, "root",""); return con ; }
* catch (Exception e) { // TODO Auto-generated catch block
* e.printStackTrace(); return null ; }
*/
java.sql.Connection conn;
try {
conn = dataSource.getConnection();
return conn;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
/**
* 为攻击解决方案Table删除指定主键的记录 本方法提供一个String类型的输入参数 本方法返回一个boolean类型的结果
* 当结果返回为true时表示删除结果成功 当结果返回为false时表示删除结果失败
*/
public boolean deleteAttackSolution(String argAttackEventCode) {
// 提供一个创建预编译SQL 语句的变量
PreparedStatement ps = null;
// SQL语句“删除fw_attacksolution表”
String sql = " delete from fw_attacksolution where attack_event_code = ?";
// JDBC连接
Connection con = null;
try {
// 取得JDBC连接
con = getConnection();
// 判断JDBC连接是否被关闭,若关闭则直接抛出一个IllegalStateException
if (con.isClosed()) {
throw new IllegalStateException("ERROR.THE CONNECTION ISCLOSED");
}
// 预编译SQL 语句
ps = con.prepareStatement(sql);
// 将攻击类别代码号进行SQL预处理
ps.setString(1, argAttackEventCode);
// 执行SQL并判断是否已经有一条记录被删除
// executeUpdate方法判断是否有一条记录被更动,若更动则为1,否则则为0
if (ps.executeUpdate() != 1) {
// 若没有更动一条记录则返回false,表示删除结果失败
return false;
}
// 捕捉SQLException
} catch (SQLException ex) {
// 在控制台将SQLException打印出来方便调试
ex.printStackTrace();
return false;
} finally {
// 在完成整段代码的工作后必须将JDBC连接关闭
try {
if (ps != null) {
ps.close();
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("ERROR.UNEXPECTED");
}
}
// 当代码全部完成且没有错误时,返回true表示删除结果成功
return true;
}
/**
* 为攻击解决方案Table写入记录 本方法提供一个AttackSolution类型的输入参数 本方法返回一个boolean类型的结果
* 当结果返回为true时表示添加结果成功 当结果返回为false时表示添加结果失败
*/
public boolean createAttackSolution(AttackSolution attackSolution) {
// 提供一个创建预编译SQL 语句的变量
PreparedStatement ps = null;
// SQL语句“插入fw_attacksolution表”
String sql = " INSERT INTO fw_attacksolution(attack_event_code,"
+ "attack_mean, attack_action) VALUES (?,?,?)";
// JDBC连接
Connection con = null;
try {
// 取得JDBC连接
con = getConnection();
// 判断JDBC连接是否被关闭,若关闭则直接抛出一个IllegalStateException
if (con.isClosed()) {
throw new IllegalStateException("ERROR.THE CONNECTION ISCLOSED");
}
// 预编译SQL 语句
ps = con.prepareStatement(sql);
// 判断传入方法的AttackSolution对象是否为null
if (attackSolution != null) {
// 利用Connection对象的prepareStatement方法创建一个对象
// 该对象将被作为PreparedStatement接口的一个接口实例
ps = con.prepareStatement(sql);
// 将攻击类别代码号进行SQL预处理
ps.setString(1, attackSolution.getAttack_event_code());
// 将攻击类别含义进行SQL预处理
ps.setString(2, attackSolution.getAttack_mean());
// 将攻击类别的处理解决方法进行SQL预处理
ps.setString(3, attackSolution.getAttack_action());
// 执行SQL并判断是否已经有一条记录被插入。
// executeUpdate方法判断是否有一条记录被更动,若更动则为1,否则则为0
if (ps.executeUpdate() != 1) {
// 若没有更动一条记录则返回false,表示添加结果失败
return false;
}
} else {
// 当传入方法的AttackSolution对象为null直接返回false
// 表示添加结果失败
return false;
}
// 捕捉SQLException,当SQL语句执行中发生如主键重复、有空列限制等错误时
} catch (SQLException ex) {
// 在控制台将SQLException打印出来方便调试
ex.printStackTrace();
return false;
} finally {
// 在完成整段代码的工作后必须将JDBC连接关闭
try {
if (ps != null) {
ps.close();
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("ERROR.UNEXPECTED");
}
}
// 当代码全部完成且没有错误时,返回true表示添加结果成功
return true;
}
/**
* 将攻击解决方案Table全部显示出来 本方法无参数 本方法返回一个Collection类型的结果
* 该Collection集合中会有多个AttackSolution对象
*/
public Collection retrieveAllAttackSolution() {
// 提供一个创建预编译SQL 语句的变量
PreparedStatement ps = null;
// 提供一个返回SQL查询结果的ResultSet接口变量
// ResultSet带有游标可以指向返回结果中的某条记录
ResultSet rs = null;
// 实现Collection接口的ArrayList类,创建该类的实例作为本方法的返回
ArrayList list = new ArrayList();
// SQL语句“无条件查询fw_attacksolution表按attack_event_code排序”
String sql = "SELECT attack_event_code,attack_mean, attack_action from fw_attacksolution order by attack_event_code";
// JDBC连接
Connection con = null;
try {
// 取得JDBC连接
con = getConnection();
// 判断JDBC连接是否被关闭,若关闭则直接抛出一个IllegalStateException
if (con.isClosed()) {
throw new IllegalStateException("ERROR.THE CONNECTION ISCLOSED");
}
// 预编译SQL 语句并执行
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
// 当返回结果集中有记录时进行处理
while (rs.next()) {
// 定义AttackSolution类型的变量并实例化
// 在这里不将其放在循环外进行实例化的原因请读者自己考虑一下
AttackSolution attackSolution = new AttackSolution();
attackSolution.setAttack_event_code(rs.getString(1));
attackSolution.setAttack_mean(rs.getString(2));
attackSolution.setAttack_action(rs.getString(3));
list.add(attackSolution);
}
// 捕捉SQLException
} catch (SQLException ex) {
// 在控制台将SQLException打印出来方便调试
ex.printStackTrace();
} finally {
// 在完成整段代码的工作后必须将JDBC连接关闭
try {
if (ps != null) {
ps.close();
con.close();
}
// 注意这里还要关闭ResultSet的接口变量
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("ERROR.UNEXPECTED");
}
}
// 返回list
return list;
}
/**
* 将攻击解决方案Table全部显示出来 本方法无参数 本方法返回一个Collection类型的结果
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -