[英]Getting a new record id return value from a stored procedure in Java
I need to create a new record in a stored procedure and return the ID of the inserted record. 我需要在存储过程中创建一个新记录,并返回插入记录的ID。 I'm sure this is quite simple but I don't know the right way to do this...
我敢肯定这很简单,但我不知道正确的方法...
I've created a simple stored procedure that requires 3 parameters, inserts a record and returns a value of the inserted record: 我创建了一个简单的存储过程,该过程需要3个参数,插入一条记录并返回插入记录的值:
ALTER PROCEDURE [dbo].[BronzeLabsCreateServiceEquipment]
@companyID int = null,
@manufacturerID int = null,
@modelID int = null,
@serialNumber varchar(255) = '',
@machine varchar(255) = '',
@location varchar(255) = ''
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO ServiceEquipment(CompanyID, ManufacturerID, ModelID, SerialNumber, Machine, Location)
VALUES (@companyID, @manufacturerID, @modelID, @serialNumber, @machine, @location)
Declare @new_identity int;
SELECT @new_identity = SCOPE_IDENTITY()
return @new_identity
END
Then I try to call this in Java 然后我尝试用Java来称呼它
String queryStringAlt = "CALL dbo.BronzeLabsCreateServiceEquipment(?, ?, ?, ?, ?, ?)";
CallableStatement cs = conn.prepareCall(queryStringAlt);
cs.setString(1, null);
cs.setString(2, null);
cs.setString(3, null);
cs.setString(4, "new123-1");
cs.setString(5, "new123-2");
cs.setString(6, "new123-3");
ResultSet rs = cs.executeQuery();
...however the prepared statement doesn't return a resultset so that last line doesn't work. ...但是,准备好的语句不会返回结果集,因此最后一行不起作用。 What does it return and how do I get it?
它返回什么,如何获得? Or am I doing the wrong thing here - should I be using output parameters (which I tried but had a syntax issue I couldn't get to the bottom of).
还是我在这里做错了-我应该使用输出参数(我曾尝试过,但是遇到语法问题,我无法深入了解)。
Thanks for your help. 谢谢你的帮助。 I hadn't thought of putting the identity into a resultset, So the new code is:
我没有考虑过将身份放入结果集中,因此新代码是:
ALTER PROCEDURE [dbo].[BronzeLabsCreateServiceEquipment]
@companyID int = null,
@manufacturerID int = null,
@modelID int = null,
@serialNumber varchar(255) = '',
@machine varchar(255) = '',
@location varchar(255) = ''
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO ServiceEquipment(CompanyID, ManufacturerID, ModelID, SerialNumber, Machine, Location)
VALUES (@companyID, @manufacturerID, @modelID, @serialNumber, @machine, @location)
SELECT SCOPE_IDENTITY() AS equipmentID
END
String queryStringAlt = "CALL dbo.BronzeLabsCreateServiceEquipment(?, ?, ?, ?, ?, ?)";
CallableStatement cs = conn.prepareCall(queryStringAlt);
cs.setString(1, null);
cs.setString(2, null);
cs.setString(3, null);
cs.setString(4, "new123-1");
cs.setString(5, "new123-2");
cs.setString(6, "new123-3");
ResultSet rs = cs.executeQuery();
if(rs.next()) {
System.out.println("Equipment ID: " + rs.getString("equipmentID"));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.