gpt4 book ai didi

使用 PreparedStatement 的 Java 多线程和连接池

转载 作者:行者123 更新时间:2023-11-30 10:49:32 24 4
gpt4 key购买 nike

我目前有一个数据库类,其中包含在构造函数中初始化的 PreparedStatement 成员变量。像这样:

public class Database
{
private Connection connection;
private PreparedStatement statement1, statement2, ...;

public Database(String url, String user, String pass)
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
connection = DriverManager.getConnection(url, user, pass);

statement1 = connection.prepareStatement("sql stuff");
statement2 = connection.prepareStatement("sql stuff");
// etc
}

public User getUser(int userId)
{
// execute getUser statement
}
// and other similar methods
}

该应用程序将是多线程的,我想使用 c3p0 进行连接池。但我不知道该怎么做。

假设我为每个线程创建了一个数据库对象,构造函数现在从池中获取一个连接。每个线程应该只调用其中一种方法(最多 5 个查询),然后结束。我每次都必须初始化所有准备好的语句吗?如果是的话,会不会花太长时间?

有没有更好的方法可以做到这一点?

最佳答案

您需要使用提供池连接方式的数据源,然后您的应用程序从池中获取连接。

您可以像 in this example 这样编程创建数据源在应用程序启动时,或者您可以从网络服务器控制台(取决于网络服务器)进行配置,然后通过 JNDI 在您的应用程序中获取数据源

Prepared Statement 的预编译和 DB 端缓存导致整体执行速度更快,并且能够重用相同的 SQL 语句。

关于使用 PreparedStatement 的 Java 多线程和连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35379483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com