Java ReturnGeneratedKeys为空,尽管批插入成功
因此,我最近开始了一个新项目,一直在将数据插入MariaDB表。我过去能够得到生成的关键点,所以这对我来说有点不可靠。正如我在刷新表后看到的那样,正在插入行,但是没有返回生成的键。这是我当前的代码Java ReturnGeneratedKeys为空,尽管批插入成功,java,mysql,mariadb,Java,Mysql,Mariadb,因此,我最近开始了一个新项目,一直在将数据插入MariaDB表。我过去能够得到生成的关键点,所以这对我来说有点不可靠。正如我在刷新表后看到的那样,正在插入行,但是没有返回生成的键。这是我当前的代码 try (Connection con = DatabaseConnection.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO items (chrid, accoun
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();
}
try(Connection con=DatabaseConnection.getConnection();
PreparedStatement ps=con.prepareStatement(“插入项目(chrid、accountid、type、pos、itemid)值(?,,,,?,?)”,语句返回生成的键)){
con.setAutoCommit(真);
ArrayList equips=新的ArrayList();
对于(配对项目:项目){
添加(itemCreationSystem.CreateEquipm(item.right));
ps.setInt(1,dbId.dbId);
ps.setInt(2,客户机.accountId);
ps.setInt(3,0);
ps.setInt(第4项,左侧);
ps.setInt(第5项,右侧);
ps.addBatch();
}
ps.executeBatch();
try(ResultSet rs=ps.getGeneratedKeys()){
try(PreparedStatement ps2=con.PreparedStatement(
插入设备(项目密钥、插槽、成功升级、str、dex、intel、luk、hp、mp、+
“wAtk、mAtk、wDef、mDef、Equipmpos)”){
while(rs.next()){
配对=装备。移除(0);
装备=配对。右侧;
ps2.setInt(1,rs.getInt(1));
ps2.设置短(2个,配备升级槽);
ps2.设置短(3,装备成功升级);
ps2.setShort(4,Equipment.getProperty(“STR”));
ps2.设置短(5,设备属性(“DEX”);
ps2.setShort(6,equipment.getProperty(“INT”);
ps2.setShort(7,equipment.getProperty(“INT”);
ps2.setShort(8,Equipment.getProperty(“HP”));
ps2.setShort(9,Equipment.getProperty(“MMP”);
ps2.设置短(10,设备属性(“PAD”);
ps2.setShort(11,设备和物业(“MAD”));
ps2.setShort(12,Equipment.getProperty(“PDD”);
ps2.setShort(13,设备属性(“MDD”);
ps2.setInt(14,对左);
ps2.addBatch();
}
ps2.executeBatch();
}
}
}捕获(SQLE异常){
e、 printStackTrace();
}
我一直在玩自动提交,但没有得到任何结果。我想可能就是这样,但除非我在那里或在查询之后将其提交为true,否则不会插入任何行。您能指出此items表的服务器版本、驱动程序版本和DDL吗?items表必须具有自动递增的标识符table具有自动递增且id列为主键。我不知道你说的DDL是什么意思。服务器是10.1.31-MariaDB-源分发。驱动程序版本是1.2.0org.mariadb.jdbc.Oh shoot我对驱动程序版本产生了怀疑,于是去maven更新到最新的jdbc驱动程序。现在可以了!