我正在从套接字接收数据。我的 ServerSocket 为每个新请求创建一个新线程。然后需要将数据上传到MySQL数据库。数据库连接和所有必需的准备语句已预先创建。
嗯,我想同时处理所有请求。这是否意味着我需要与数据库建立多个连接?我正在考虑池连接,但准备好的语句必须在应用程序启动时仅创建一次。
实现该目标以获得最佳性能的最佳方法是什么?
如果我用 Oracle 替换我的数据库会怎样。我应该使用多个连接吗? Tom Kyte 在其书的第一章中呼吁仅使用与 Oracle 数据库的一个连接,而 MS SQLServer 则使用多个连接。这是否意味着我可以仅使用一个连接执行多个语句?
最佳答案
您需要带有缓存连接的连接池以了解更多详细信息,您可以查看 http://en.wikipedia.org/wiki/Connection_pool 。您可以缓存准备好的语句,并在每次执行后清除参数。 为了获得最佳性能,您需要使用线程池,也不需要为每个新请求创建一个新线程。 我认为您可以创建一些准备好的语句池,并通过某个键检索它们(您可以定义查询的键)。 类似这样的事情:
public class StatementPool{
HashMap<String, Queue<Statement>> statementsPoolMap = ...
public Statement getStatementByKey(String key){ // you can define keys for queries
Queue<Statement> queue = statementsPoolMap.get (key);
Statement statement = null;
if(queue.isEmpty()){
Statement st = connectionPool.getConnection().prepareStatement();
...
}else{
statement = queue.poll();
}
...
return statement
}
}
关于java - JDBC并发实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8110587/