业务逻辑是这样的
xxxAction.do作用到xxxAction调用下面DAO里面的方法retrieveAllAttackSolution()
过程是这样的
高手帮下!
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.sql.DataSource;import struts.sample.cap1.sample3.entity.AttackSolution;public class AttackSolutionDAO {
//�ṩһ��JDBC��l�ӱ����ñ������ڹ��캯���б����ò���ֵ
private DataSource dataSource; /**
* Ĭ�ϵĹ��캯��
*/
public AttackSolutionDAO() {
} /**
* �ڹ��캯���ṩJDBCl�ӵĽӿ�DataSource
*/
public AttackSolutionDAO(DataSource ds) {
dataSource = ds; }
...
....
public Collection retrieveAllAttackSolution() {
//�ṩһ���Ԥ����SQL ���ı�
PreparedStatement ps = null; //�ṩһ���SQL��ѯ����ResultSet�ӿڱ�
//ResultSet�����α����ָ�򷵻ؽ���е�ij���¼
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"; //JDBCl��
Connection con = null; try {
//ȡ��JDBCl��
con = dataSource.getConnection(); //�ж�JDBCl���Ƿ񱻹رգ���ر���ֱ���׳�һ��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��ӡ��4�������
ex.printStackTrace();
} finally {
//�������δ���Ĺ������뽫JDBCl�ӹر�
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;
}
....
....
public static void main(String[] args) {
}
}
xxxAction.do作用到xxxAction调用下面DAO里面的方法retrieveAllAttackSolution()
过程是这样的
高手帮下!
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.sql.DataSource;import struts.sample.cap1.sample3.entity.AttackSolution;public class AttackSolutionDAO {
//�ṩһ��JDBC��l�ӱ����ñ������ڹ��캯���б����ò���ֵ
private DataSource dataSource; /**
* Ĭ�ϵĹ��캯��
*/
public AttackSolutionDAO() {
} /**
* �ڹ��캯���ṩJDBCl�ӵĽӿ�DataSource
*/
public AttackSolutionDAO(DataSource ds) {
dataSource = ds; }
...
....
public Collection retrieveAllAttackSolution() {
//�ṩһ���Ԥ����SQL ���ı�
PreparedStatement ps = null; //�ṩһ���SQL��ѯ����ResultSet�ӿڱ�
//ResultSet�����α����ָ�򷵻ؽ���е�ij���¼
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"; //JDBCl��
Connection con = null; try {
//ȡ��JDBCl��
con = dataSource.getConnection(); //�ж�JDBCl���Ƿ񱻹رգ���ر���ֱ���׳�һ��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��ӡ��4�������
ex.printStackTrace();
} finally {
//�������δ���Ĺ������뽫JDBCl�ӹر�
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;
}
....
....
public static void main(String[] args) {
}
}
解决方案 »
- struts2 标签<s:submit />怎么加css样式(在线等着结贴)
- hibernate Hql 问题 在线等
- 关于ssh框架的问题
- struct页面从frames跳出到另一个独立的页面
- 请教:关于内存泄漏问题的检测方案
- 求大神指导软件工程 系统分析 架构之类的学习方向
- 看到Struts的文章说<%=test%>的代码会把美工搞晕,难道<logic:notPresent name="database" scope="application">的代码美工就不晕了?
- 求助,关于JNDI访问数据库的问题
- TOMCAT5.0安装后,在运行这个服务的时候起不来?
- webservices开发环境配置问题,急问!
- 如何给dao配置事务
- spring + hibernate 更新记录的问题
if (ps != null) {
ps.close();
con.close();
}if (rs != null) {
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("ERROR.UNEXPECTED");
}
}return list;
}
///////////////
上面资源关闭顺序有问题,rs先关闭了,list当然就没有了。
关闭顺序应该和开启顺序相反。
先return list,再rs.close(),conn.close().
......
}
return list;
这个方法的类型是public Collection retrieveAllAttackSolution()
这个return list是最后返回的
按上面说的这样报错!return后面的代码无法到达!
现在的问题是怎么写代码
可以return list 以可以把rs 和con关闭啊!而不报result is closed的错啊
但是return list是写在finally后面才可以啊!
这样一来就会报result is closed错
应该是
finally {
try {
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("ERROR.UNEXPECTED");
}
}