, поэтому я недавно начал новый проект и вставлял данные в таблицу MariaDB.Я был в состоянии получить сгенерированные ключи в прошлом, так что это немного странно для меня, чтобы увидеть.Строки вставляются, как я вижу после обновления таблицы, но сгенерированные ключи не возвращаются.Это мой текущий код.
try (Connection con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("INSERT INTO items (chrid, accountid, type, pos, itemid) VALUES (?,?,?,?,?)", Statement.RETURN_GENERATED_KEYS)) {
con.setAutoCommit(true);
ArrayList<Pair<Integer, Equip>> equips = new ArrayList<>();
for (Pair<Integer, Integer> item : items) {
equips.add(itemCreationSystem.createEquip(item.right));
ps.setInt(1, dbId.dbId);
ps.setInt(2, client.accountId);
ps.setInt(3, 0);
ps.setInt(4, item.left);
ps.setInt(5, item.right);
ps.addBatch();
}
ps.executeBatch();
try (ResultSet rs = ps.getGeneratedKeys()) {
try (PreparedStatement ps2 = con.prepareStatement(
"INSERT INTO equips (itemKey, slots, successfulUpgrades, str, dex, intel, luk, hp, mp, " +
"wAtk, mAtk, wDef, mDef, equipPos)")) {
while (rs.next()) {
Pair<Integer, Equip> pair = equips.remove(0);
Equip equip = pair.right;
ps2.setInt(1, rs.getInt(1));
ps2.setShort(2, equip.upgradeSlots);
ps2.setShort(3, equip.successfulUpgrades);
ps2.setShort(4, equip.getProperty("STR"));
ps2.setShort(5, equip.getProperty("DEX"));
ps2.setShort(6, equip.getProperty("INT"));
ps2.setShort(7, equip.getProperty("INT"));
ps2.setShort(8, equip.getProperty("HP"));
ps2.setShort(9, equip.getProperty("MMP"));
ps2.setShort(10, equip.getProperty("PAD"));
ps2.setShort(11, equip.getProperty("MAD"));
ps2.setShort(12, equip.getProperty("PDD"));
ps2.setShort(13, equip.getProperty("MDD"));
ps2.setInt(14, pair.left);
ps2.addBatch();
}
ps2.executeBatch();
}
}
} catch (SQLException e) {
e.printStackTrace();
}
Я играл с autoCommit, но не получил никаких результатов.Я подозреваю, что, возможно, это так, но если я не укажу значение true там или после запроса, строки не будут вставлены.