小编Ser*_*ion的帖子

使用executeBatch()获取插入的(或现有的)id

我正在尝试将一些单词插入数据库,如果该单词已在数据库中,则返回新插入的 id 或现有 id。

我发现我可以使用PreparedStatement并包含来做到这一点Statement.RETURN_GENERATED_KEYS。但PreparedStatement速度却慢得可怕。我需要一次插入大约 5000 个单词。我可以通过在 for 循环中运行单独的查询来实现它的另一种方法:

public ArrayList<Integer> addWords(ArrayList<String[]> allTermsForTag) {
    ArrayList ids = new ArrayList<Integer>();
    ResultSet rs = null;
    try{
        Statement st = connection.createStatement();
        for (String[] articleTerms: allTermsForTag) {
            for(String term: articleTerms) {
                String query = "WITH a AS (INSERT INTO tag (name) SELECT '"+term+"' WHERE NOT EXISTS (SELECT name FROM tag WHERE name = '"+term+"') " +
                        "RETURNING id) SELECT id FROM a UNION SELECT id FROM tag WHERE …
Run Code Online (Sandbox Code Playgroud)

java postgresql jdbc

3
推荐指数
1
解决办法
4512
查看次数

标签 统计

java ×1

jdbc ×1

postgresql ×1