Java 使用servlet关闭数据库上的连接时出现问题
第一次调试/运行应用程序时,我正在尝试使用tomcat an运行我的应用程序,它工作正常。但当我试图第二次运行时,我得到了错误“XJ040” 我认为问题是因为关闭连接有问题,因为当我停止服务器时,问题会一直持续到第二次运行 代码如下:Java 使用servlet关闭数据库上的连接时出现问题,java,sql,derby,Java,Sql,Derby,第一次调试/运行应用程序时,我正在尝试使用tomcat an运行我的应用程序,它工作正常。但当我试图第二次运行时,我得到了错误“XJ040” 我认为问题是因为关闭连接有问题,因为当我停止服务器时,问题会一直持续到第二次运行 代码如下: private Connection connect = null; //private Statement stmt = null; private PreparedStatement preparedStatement = null; priva
private Connection connect = null;
//private Statement stmt = null;
private PreparedStatement preparedStatement = null;
private ResultSet resultSet = null;
public ArrayList<story> stories=new ArrayList<story>();
void getStories(String version) throws SQLException{
try{
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
}catch(ClassNotFoundException e){
System.out.println(e);
}
connect = DriverManager.getConnection( "jdbc:derby:C:\\Documents and Settings\\vitaly87\\.netbeans-derby\\articals", "admin", "admin");
// statement = connect.createStatement();
int ArticlesId= Integer.parseInt(version);
preparedStatement = connect.prepareStatement("SELECT * FROM admin.articles where id>"+ArticlesId+"");
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
stories.add(new story(resultSet.getString("title"),resultSet.getString("date"),resultSet.getString("text")));
}
close();
}
//close connection
private void close() {
try {
if (resultSet != null) {
resultSet.close();
}
if (connect != null) {
connect.close();
}
} catch (Exception e) {
}
private connect=null;
//私有语句stmt=null;
private PreparedStatement PreparedStatement=null;
私有ResultSet ResultSet=null;
public ArrayList stories=new ArrayList();
void getStories(字符串版本)引发SQLException{
试一试{
forName(“org.apache.derby.jdbc.EmbeddedDriver”);
}catch(classnotfounde异常){
系统输出打印ln(e);
}
connect=DriverManager.getConnection(“jdbc:derby:C:\\Documents and Settings\\vitaly87\\.netbeansderby\\articles”、“admin”、“admin”);
//语句=connect.createStatement();
int ArticlesId=Integer.parseInt(版本);
preparedStatement=connect.prepareStatement(“从admin.articles中选择*,其中id>”+ArticlesId+”);
resultSet=preparedStatement.executeQuery();
while(resultSet.next()){
添加(新故事(resultSet.getString(“标题”)、resultSet.getString(“日期”)、resultSet.getString(“文本”));
}
close();
}
//密切联系
私人作废关闭(){
试一试{
if(resultSet!=null){
resultSet.close();
}
if(connect!=null){
connect.close();
}
}捕获(例外e){
}
感谢您的帮助在网络中始终保持密切联系
connect = DriverManager.getConnection(...)
try
{
// use connection
}
finally
{
try
{
connect.close()
}
catch (SQLException e)
{
// log e
}
}
在代码中,如果parseInt(version)或exequteQuery()中存在异常,则连接不会关闭
同样在您的情况下,我不认为关闭结果集是必要的,因为您正在关闭连接
try {
if (resultSet != null) {
resultSet.close();
}
if (connect != null) {
connect.close();
}
} catch (Exception e) {
}
有问题,因为1.if resultSet.close()抛出异常连接从未关闭,2.此方法中不会引发任何异常。我建议至少记录捕获的异常。一个补充:如果在方法中使用后关闭语句和连接,我建议不要将它们作为类成员在方法之间共享,而是使用局部变量bles。这将减少尝试重用不存在的东西的危险。为什么不在close函数的开头放一条print语句,看看它是否运行过。
try {
if (resultSet != null) {
resultSet.close();
}
if (connect != null) {
connect.close();
}
} catch (Exception e) {
}