2016-08-23 116 views
0

在我的项目,我有很多的线程运行从网络并发下载和插入/从MySQL数据库中选择。 我的数据库管理器看起来是这样的:JDBC:共享连接或使用连接池

private Connection conn; 

private DatabaseManager() { 
    // Initialize conn 
} 

public static synchronized DatabaseManager getInstance() { 
    if (DatabaseManager.instance == null) { 
     DatabaseManager.instance = new DatabaseManager(); 
    } 
    return DatabaseManager.instance; 
} 

public void deleteX() { 
    try { 
     Statement stmt = conn.createStatement(); 
     String sql = //query 
     stmt.executeUpdate(sql); 
     stmt.close(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 



public X getX(...) { 
    try { 
     Statement stmt = conn.createStatement(); 
     ResultSet result= // Grab and do some thing 
     result.close(); 
     stmt.close(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

public void insert(String query) { 
    try { 
     Statement stmt = conn.createStatement(); 
     stmt.executeUpdate(query); 
     stmt.close(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 

在100多个线程,呼叫是:

DatabaseManager.getInstance().getX(1, 1); 

DatabaseManager.getInstance().insert("INSERT INTO ..."); 

我的问题是:我是在右边方法是共享一个连接还是更好地使用,例如10个连接保存在一个池中?

问题是,我总是得到一个为ExecutionException(NullPointerException异常)与我目前的解决方案。

+0

连接池会更好,看看这个:http://stackoverflow.com/questions/2835090/how-to-establish-a-connection-pool-in-jdbc – neohope

回答

0

在我的软件,连接池并没有带来了预期的成功,因为我试图将数据插入到不同的连接而导致死锁相同的表。因此我保持实现了连接池,它为1个表提供了1个连接。