0

在过去的几天里,在我将最新版本的软件上传到我们的服务器后,我们的一个应用程序开始出现故障。它访问一些共享表,但我无法弄清楚我是否做错了什么以及是否是我的错。

在我的测试环境中,一切正常,但在我更新主服务器上的表期间,我发现其中一些表似乎已被锁定,就像仍有待处理的操作一样。

在活动监视器中杀死我的进程后,一切都很好了。这有点奇怪。我使用普通的 JDBC,有时还使用 Hibernate 进行操作。我检查了几次,我总是这样处理 JDBC-Connections:

Connection c = null;
Statement s = null;//Sometimes PreparedStatement
ResultSet rs = null;
try{
//OPERATIONS
}
catch{
//Handling
}finally{
Mycon.disconnect(rs,ps,c);
}

Mycon-Class 是一个静态类,它只支持这些基本的东西......

public static void disconnect(ResultSet resultSet, PreparedStatement ps, Connection connection) {
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
            } // nothing we can do
        }
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException e) {
            } // nothing we can do
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
            } // nothing we can do
        }
    }

对于 Hibernate,它通常更容易。然后我只使用一个简单的:

try{
    SessionFactory factory = HibernateUtil.getSessionFactory();
    Session hsession = factory.openSession();
    Transaction tx = hsession.beginTransaction();
//Operations
tx.commit;
}catch(...){}
finally{
try{
hsession.close;
}catch(...){}
}

我使用 Apache Tomcat 7 来处理我的连接,所以我认为没有必要担心连接。

无论如何-例如我的4个过程:

Server_Monitor_View

第一个和第二个只是来自服务器管理器。

3 详细说明:

SELECT W_ID, Comment, Date FROM Buran.dbo.Object WHERE right(convert(varchar, Date, 106), 8) like ''

在我看来,这不应该存在。我多次使用这个语句和另一个语句但关闭它:

innerstat = null;
inners = null;
innerswert = "";
try {
    innerstat = c.createStatement();
    inners = innerstat.executeQuery("SELECT W_ID, Comment, Date FROM Buran.dbo.Object WHERE right(convert(varchar, Date, 106), 8) like '" + innerswert + "'");

    while (inners.next()) {
        innerswert = inners.getString(1);
        out.write("<option value='" + inners.getInt("W_ID") + "'>");
        out.write(innerswert);
        out.write("</option>");
    }
} catch (SQLException sqle2) {
    out.write(sqle2.toString());
    out.write(sqle2.getLocalizedMessage());
    sqle2.printStackTrace();

} finally {
    Mycon.disconnect(inners, innerstat);
}

我只是在解释不存在的东西吗?服务器日志很好,我的代码可以正常工作而不会引发异常。你认为可能是什么错误(如果有的话?)

4

0 回答 0