我正在尝试将一些单词插入数据库,如果该单词已在数据库中,则返回新插入的 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)