Java 使用保存点时是否可以将自动提交设置为打开

Java 使用保存点时是否可以将自动提交设置为打开,java,mysql,jdbc,transactions,Java,Mysql,Jdbc,Transactions,我是Java数据库编程的新手。 最近在我的项目中,我陷入了一个概念,我搜索了很多,但没有得到任何解决方案来满足我的查询,这可能会帮助我摆脱我的问题 其实问题是: 我有三个表,假设一个主表包含实际数据表的公共字段,两个子表包含根据某些条件的其他不同字段。主表包含部分信息,其余信息(取决于某些条件)将仅保存在一个子表中 现在的场景是这样的,我已经关闭了autocommit,然后触发了一个insert查询。所以,当insert查询被激发时,数据库将给它一个唯一的ID,在mysql中,因为ID feld

我是Java数据库编程的新手。 最近在我的项目中,我陷入了一个概念,我搜索了很多,但没有得到任何解决方案来满足我的查询,这可能会帮助我摆脱我的问题

其实问题是:

我有三个表,假设一个主表包含实际数据表的公共字段,两个子表包含根据某些条件的其他不同字段。主表包含部分信息,其余信息(取决于某些条件)将仅保存在一个子表中

现在的场景是这样的,我已经关闭了autocommit,然后触发了一个insert查询。所以,当insert查询被激发时,数据库将给它一个唯一的ID,在mysql中,因为ID feld是自动递增的。现在启动一个Select查询,我想从主表中提取该ID。所以,我的问题是,SELECT查询能否提取我刚刚保存的特定记录的ID?请记住,自动提交设置为false,我尚未提交

我之所以这样做,是因为我希望在其中一个子表中插入该唯一ID,以便我可以将表之间的信息关联起来。因此,在找到ID之后,我再次启动了一个新的INSERT查询,以将其余数据保存在一个子表中,现在使用唯一ID保存其余数据。成功插入后,我已提交连接

此外,我希望信息保存在主表和一个子表中,或者如果发生任何故障,详细信息不会完全保存,这样我就不会丢失部分信息

请帮我做这件事。如果您能解释自动提交和保存点之间的关系。什么时候使用,什么东西要记住。请提供一些真实的资源,如果可以的话,展示它们的性质,它们在不同情况下如何工作,等等。我在谷歌上搜索过,但没有得到任何这样有用的信息。我想对它有深入的了解


提前感谢:

当记录添加到表中时,您似乎想要获取ID。如果使用getGeneratedKeys插入记录,则此选项可用。自动提交不能用于返回此信息

下面的代码显示了如何做到这一点

/**
 * Insert to database using JDBC 3.0 + which will return the key of the new row.
 * 
 * @param sql is the sql insert to send to the database
 * @return the key for the inserted row
 * @throws DBSQLException
 */
public static int insertAndReturnKey(Connection dbConnection, String sql, List<SqlField> params) throws DBSQLException
{

    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;
    String paramList = null;
    try {
        preparedStatement = dbConnection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
        // Setup your parameters
        int result = preparedStatement.executeUpdate();
        resultSet = preparedStatement.getGeneratedKeys();
        if (resultSet.next()) {
            return (resultSet.getInt(1));
        } else {
            // throw an exception from here
            throw new SQLException("Failed to get GeneratedKey for [" + sql + "]");
        }
    } catch (SQLException ex) {
        throw new DBSQLException(buildErrorMessage(ex, sql, params));
    } finally {
        DBConnector.closeQuietly(preparedStatement);
        DBConnector.closeQuietly(resultSet);
    }
}

谢谢你,先生。现在我对解决我的问题有了一些希望。我面临一个问题,Statement.RETURN\u GENERATED\u KEYS giving error,在netbeans中,它说找不到符号。请帮我拿好了,先生。事实上,因为我们使用的是准备好的STATMEMT。因此,我们将使用PreparedStatement=conn.prepareStatementsql,PreparedStatement.RETURN\u生成的\u键;不是PreparedStatement statement=conn.prepareStatementsql,而是statement.RETURN生成的密钥;。谢谢你,先生,这帮了大忙。