Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用自动递增列作为主键插入数据_Java_Sql_Foreign Keys_Auto Increment_Foreign Key Relationship - Fatal编程技术网

Java 使用自动递增列作为主键插入数据

Java 使用自动递增列作为主键插入数据,java,sql,foreign-keys,auto-increment,foreign-key-relationship,Java,Sql,Foreign Keys,Auto Increment,Foreign Key Relationship,我有两个表,其中主键(另一个表上的外键)在运行时自动递增(使用TOAD for mysql)。 如何使用事务将数据同时插入两个表中 这是第一个表的ddl: CREATE TABLE `suspendedsales` ( `SID` int(11) NOT NULL AUTO_INCREMENT, `SequenceNo` int(11) NOT NULL DEFAULT '0', `ProductCode` varchar(100) DEFAULT NULL, `ItemName` varcha

我有两个表,其中主键(另一个表上的外键)在运行时自动递增(使用TOAD for mysql)。 如何使用事务将数据同时插入两个表中

这是第一个表的ddl:

CREATE TABLE `suspendedsales` (
`SID` int(11) NOT NULL AUTO_INCREMENT,
`SequenceNo` int(11) NOT NULL DEFAULT '0',
`ProductCode` varchar(100) DEFAULT NULL,
`ItemName` varchar(100) DEFAULT NULL,
`Quantity` int(11) DEFAULT NULL,
`Discount` double DEFAULT NULL,
`ItemCost` double DEFAULT NULL,
PRIMARY KEY (`SID`,`SequenceNo`),
CONSTRAINT `SIDFKey` FOREIGN KEY (`SID`) REFERENCES `suspendedsalesdetails` (`SID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
第二个表的ddl:

CREATE TABLE `suspendedsalesdetails` (
`SID` int(11) NOT NULL DEFAULT '0',
`Date` date DEFAULT NULL,
`Total` double DEFAULT NULL,
PRIMARY KEY (`SID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
注意:主要的挑战是从主键上获取自动递增的键值,以便在运行时插入到另一个表中


非常感谢。

如果您的数据库是MySql数据库,您可以使用以下函数在第一个表中插入一条记录

SELECT LAST_INSERT_ID();

获取最后一个插入的id,您可以在第二次插入时使用它。仅在第二次插入后提交全部

如果您的数据库是MySql数据库,则可以使用以下函数在第一个表中插入记录

SELECT LAST_INSERT_ID();
获取最后一个插入的id,您可以在第二次插入时使用它。仅在第二次插入后提交所有内容如何:

 private void insert() {

    OraclePreparedStatement statement = null;


    try {
        Connection dbConnection = getConnection();
        statement = dbConnection.createStatement(); 

        String insertToSuspendedsales  = "insert into suspendedsales (SequenceNo, ProductCode,ItemName,Quantity,Discount,ItemCost) "
            + "values(:segNo, :prodNo, :itmeName, :quantity, :discount, :itemCost) returning SID into ?";

        statement.setIntAtName("segNo", intValue);
        ....

        int id =  statement.registerReturnParameter(1, OracleTypes.INTEGER)
        statement.executeUpdate(insertToSuspendedsales);

        String insertToSuspendedsalesdetails = "insert into suspendedsalesdetails (SID, Date, Total) "
            + "values(:sid, :date, :total) returning SID into ?";


        statement.setIntAtName("sid", id);
        .... 

        statement.executeUpdate(insertToSuspendedsalesdetails);

    } catch (SQLException ex) {
        ex.printStackTrace();
        //rollback
    } finally {

      //close Connection
    }
}
这个怎么样:

 private void insert() {

    OraclePreparedStatement statement = null;


    try {
        Connection dbConnection = getConnection();
        statement = dbConnection.createStatement(); 

        String insertToSuspendedsales  = "insert into suspendedsales (SequenceNo, ProductCode,ItemName,Quantity,Discount,ItemCost) "
            + "values(:segNo, :prodNo, :itmeName, :quantity, :discount, :itemCost) returning SID into ?";

        statement.setIntAtName("segNo", intValue);
        ....

        int id =  statement.registerReturnParameter(1, OracleTypes.INTEGER)
        statement.executeUpdate(insertToSuspendedsales);

        String insertToSuspendedsalesdetails = "insert into suspendedsalesdetails (SID, Date, Total) "
            + "values(:sid, :date, :total) returning SID into ?";


        statement.setIntAtName("sid", id);
        .... 

        statement.executeUpdate(insertToSuspendedsalesdetails);

    } catch (SQLException ex) {
        ex.printStackTrace();
        //rollback
    } finally {

      //close Connection
    }
}

我会说你先关闭蟾蜍的自动提交。我会说你先关闭蟾蜍的自动提交。这似乎是一个很好的代码。你能用mysql数据库和准备好的语句重现这个吗?这似乎是一个很好的代码。你能用mysql数据库和准备好的语句重现这个问题吗?有时候一个简单的答案就是正确的答案。我最初没有考虑你的答案,浪费了很多时间来调整以前的代码。非常感谢。你刚刚救了我。注意:对于任何面临同样挑战的人,只需在准备好的语句中使用最后一个插入Id作为您的值。有时简单的答案就是正确的答案。我最初没有考虑你的答案,浪费了很多时间来调整以前的代码。非常感谢。你刚刚救了我。注意:对于任何面临同样挑战的人,只需在准备好的语句中使用最后一个插入Id作为您的值。