有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从GWT调用jdbc的正确方法?

我在GWT中执行RPC查询数据库,我的程序中有内存泄漏,我强烈怀疑它会影响我设置类的方式。目前,我必须连接到每个方法中的数据库,然后在方法结束时关闭该连接。这样做会导致内存泄漏吗?我觉得用这种方式编程会产生更多的代码,而且效率很低,但我找不到很多好的示例,有人能推荐一种更好的方法吗?名称、IP已经更改,我已经发布了connect方法以及其他方法的编写示例

public class DatabaseServiceImpl extends RemoteServiceServlet implements DatabaseService {

private Connection con = null;
String database = "ioma";
String host = "localhost";
String password = "foo";
String url = "jdbc:mysql://" + host + "/" + database;
String user = "foo";

public String connect() {

    String connect = "";
    try {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection(url, user, password);

    } catch (SQLException e) {
        for (Throwable t : e)
            System.err.println("Error connecting to the database: " + t);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    connect = "database connection aquired";
    return connect;

}

public int getAssemblerCount() {
    connect();
    try {
        int assemblerCount = 0;
        String query = "SELECT COUNT(*) FROM assemblers";
        PreparedStatement ps = con.prepareStatement(query);
        ResultSet rs = ps.executeQuery();
        rs.next();
        assemblerCount = rs.getInt(1);
        rs.close();
        ps.close();
        con.close();
        return assemblerCount;
    } catch (SQLException e) {
        for (Throwable t : e)
            System.err.println("Database error in getAssemblerCount " + e);
        return 0;
    }

}}

共 (1) 个答案

  1. # 1 楼答案

    您应该始终在“finally”块中关闭,以便在发生异常时关闭

    请参阅this related question的答案,以获得正确执行此操作的帮助

    这是内存泄漏的常见原因,很可能是您的问题