【问题标题】:How to get last inserted id into jdbc in jsp如何在jsp中将最后插入的id放入jdbc
【发布时间】:2012-08-14 09:28:42
【问题描述】:

如何从 jsp 中刚刚插入的行中获取 ID?

        PreparedStatement ps = con.prepareStatement("INSERT INTO Recipients(CustomerID,Name, Street, City, ZipCode, PhoneNumber, EmailAddress,"
            + " ContactPersonName, ContactPersonSurname, ContactPersonPhoneNumber,ContactPersonEmailAddress) "
            + "values(?,?,?,?,?,?,?,?,?,?,?)");

我需要使用 Recipients 的 id 将其插入 Parcels

PreparedStatement ps2 = con.prepareStatement("INSERT INTO Parcels(TransportTypeID,CustomerID,RecipientID,ParcelAmount, DimLength, DimHeight, DimWidth, ParcelWeigth, Content,"
            + " AdditionalDescription, IsCustomParcel, ReceiptFee, InsuranceAmount, OwnPick, DispatchDate) "
            + "values((?,?,?,?,?,?,?,?,?,?,?,?,?,?,?");

    ps2.setString(1,transportTypeID);
    ps2.setString(2,customerID);
    ps2.setInt(3,recipientID); ...

我正在尝试使用 ResultSet:

int recipientID=0;
    ResultSet rs2=st.executeQuery("SELECT * FROM Recipients");
    if(rs2.last())
           {
            recipientID = rs2.getInt("RecipientID");
           }

但是没有用。

【问题讨论】:

  • 您使用的是哪个 rdbms?例如,如果您使用 Oracle,则可以使用 CallableStatement 而不是 PreparedStatement,然后使用“RETURNING id INTO?”获取返回值。
  • 我正在使用 Oracle 的 Mysql Workbench。

标签: jsp jdbc insert


【解决方案1】:

试试这样的:

String query = "BEGIN " +
               "  INSERT INTO Recipients( CustomerID, Name, Street, City, ZipCode, PhoneNumber" + 
               "                         ,EmailAddress, ContactPersonName, ContactPersonSurname" +
               "                         ,ContactPersonPhoneNumber, ContactPersonEmailAddress) " +
               "    VALUES(?,?,?,?,?,?,?,?,?,?,?) RETURNING id into ?; " +
               "END;";

CallableStatement cs = conn.prepareCall(query);

cs.setString(1,transportTypeID);
cs.setString(2,customerID);
cs.setInt(3,recipientID);
...
cs.registerOutParameter(12, java.sql.Types.INTEGER);

cs.execute();

int id = cs.getInt(12);

然后使用生成的 id 进行下一次插入。或者你也可以把它全部放到一个proc中。

【讨论】:

  • 我正在使用 mysql-connector-java。我不能使用“OracleTypes”
  • @Paul 我删除了 Oracle 特定类型。没有必要。
  • 现在我收到错误:java.sql.SQLException:参数号 12 不是 OUT 参数
  • @Paul 可能是计数问题?数一数问号的数量,看看是否排列整齐。但是从一个简单的测试开始可能会更容易,一个两列的表,插入一个返回另一个。确保它在简单的情况下工作。另外,请查看此示例和其他示例:stackoverflow.com/questions/5942203/…
  • 这里实际上也回答了同样的问题:stackoverflow.com/questions/3552260/…
【解决方案2】:

我找到了解决方案: ResultSet rs2=st.executeQuery("SELECT * FROM Recipients ORDER BY RecipientID DESC Limit 1;"); while(rs2.next()) { recipientID = rs2.getInt(1); }

【讨论】:

    猜你喜欢
    • 2011-08-07
    • 1970-01-01
    • 2012-10-29
    • 2018-08-01
    相关资源
    最近更新 更多