gpt4 book ai didi

java - 使用 JDBC 加速 postgresql 上的 sql 插入?

转载 作者:行者123 更新时间:2023-12-02 04:34:07 25 4
gpt4 key购买 nike

我有下面两种方法来检查数据库中是否有匹配项,如果没有,则调用插入方法。我的程序必须经过数千行,并且需要很长时间。我这样做错了吗?我可以做些什么来显着加快速度?

public Boolean isMatchIdInDatabase(String matchId) throws SQLException
{
Connection conn = null;
PreparedStatement pst = null;
ResultSet rs = null;
Boolean exists = false;

try
{
Class.forName("org.postgresql.Driver");
conn = DriverManager.getConnection(url, props);
pst = conn.prepareStatement("SELECT COUNT(*) FROM match where match_id = ?");
pst.setString(1, matchId);

rs = pst.executeQuery();
while (rs.next())
{
exists = rs.getBoolean(1);
}

}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
pst.close();
rs.close();
conn.close();
}

return exists;
}

public Boolean insertMatchId(String matchId, String name, Timestamp birthdate, String bio, String accountId) throws SQLException, ClassNotFoundException
{
Connection conn = null;
PreparedStatement pst = null;
Boolean exists = false;

try
{
Class.forName("org.postgresql.Driver");
conn = DriverManager.getConnection(url, props);
pst = conn.prepareStatement("INSERT INTO match (match_id, name, birthdate, bio, account_id) values(?, ? , ?, ?, ?)");
pst.setString(1, matchId);
pst.setString(2, name);
pst.setTimestamp(3, birthdate);
pst.setString(4, bio);
pst.setString(5, accountId);

pst.executeUpdate();

}
finally
{
pst.close();
conn.close();
}

return exists;
}

最佳答案

对于许多记录,您是否先调用 isMatchIdInDatabase 然后调用 insertMatchId ?可能重复:Efficient way to do batch INSERTS with JDBC

打开连接并查询单个记录是一项昂贵的操作。如果你这样做数千次,它就会变得非常慢。您应该尝试重构您的查询,以便仅使用一个SELECT。然后您可以收集必须插入的记录并通过批量插入来完成。

关于java - 使用 JDBC 加速 postgresql 上的 sql 插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31055311/

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