使用不同的参数多次运行相同的选择查询

jay*_*nth 5 java mysql select jdbc prepared-statement

我有一个 Java 程序,它需要遍历 aHashMap来获取一个参数,然后用于查询 MySQL 数据库。

代码如下:

Iterator<Entry<String, Double>>it = ws.entrySet().iterator();
Connection con = null;

while(it.hasNext())  
{
    Entry<String, Double>pairs = it.next();
    PreparedStatement ps = con.prepareStatement("select doc_freq from lookup where word=?");
    ps.setString(1, pairs.getKey());
    ResultSet rs = ps.executeQuery();
}
Run Code Online (Sandbox Code Playgroud)

为循环的每次迭代(大约 500 次)重复访问数据库的过程减慢了我的应用程序。有什么办法可以一次发送所有这些参数,以便我只访问数据库一次?

nga*_*ull 1

考虑到 ws 是一个地图,您可以这样执行单个查询:

Connection con = getConnection();
Set<String> ks = ws.keySet();

if (ks.size() > 0) {
    StringBuilder inStatement = new StringBuilder("?");
    for (int i = 1; i < ks.size(); i++) {
        inStatement.append(", ?");
    }

    PreparedStatement ps = con.prepareStatement("select doc_freq from lookup where word in (" + inStatement.toString() + ")");

    int k = 1;
    for (String key : keySet) {
        ps.setString(k++, key);
    }
    ResultSet rs = ps.executeQuery();
}
Run Code Online (Sandbox Code Playgroud)