2017-05-04 63 views
1

出于某种原因,我试图从我刚刚插入的字段获取数据。并且要清楚:不,我不想要一种方法来获得“插入ID”SQL Server:如何从JAVA插入获得“OUTPUT”?

例如,我有一个表命名为“成员”,而我做的插入这样的:

  • INSERT INTO Members (ID, NAME, PHONE, BIRTH, CREATE_DATE) OUTPUT Members.CREATE_DATE VALUES (NEXT VALUE FOR SeqID, ?, ?, ?, getdate());

这个SQL做工不错,给我说,我想在SQL CREATE_DATE管理。

但我的问题是:如何获得这个CREATE_DATE使用JAVA的prepared语句?

我试图让在使用的ResultSet,它告诉我:“声明没有返回ResultSet中”

 con = ds.getConnection(); 
     pstmt = con.prepareCall(INSERT); 

     pstmt.setString(1, name); 
     pstmt.setString(2, phone); 
     pstmt.setString(3, birth); 

     ResultSet rs = pstmt.executeQuery(); 

     if(rs.next()) System.out.println(rs.getString("CREATE_DATE")); 

而且registeroutparameter不看的权利也因为它是“CREATE_DATE”,而不是“ ?”。有什么方法可以从OUTPUT获取我的数据吗?

+0

insert操作将数据添加到db并返回状态。如果您想要CREATE_DATE,则需要通过传递必需的参数来编写另一个SELECT查询以获取CREATE_DATE。 – kosa

回答

0

它不是:

pstmt = con.prepareCall(INSERT); 

你必须使用prepareStatement

pstmt = con.prepareStatement(INSERT); 

另外:插入不选择,而不是pstmt.executeQuery();它应该pstmt.executeUpdate();它返回一个int,而不是一个ResultSet,所以如果你想检查你的查询是否成功,你必须使用:

int s = pstmt.executeUpdate(); 
if(s > 0){ 
    //success 
} 

但我的问题是:如何获得该CREATE_DATE使用JAVA的 prepared-statement?

你必须使用插入两个单独的声明中一个,第二个选择

+1

噢,这很伤心。我想我可以像甲骨文回来一样 – Kaninchen

0

准备语句是编译的服务器端,并通过getdate函数执行服务器端,而不是返回客户端提供的参数给客户。

来获得日期客户端有很多选择:

  • 写与插入该行并返回日期
  • 计算日期客户端发送到服务器
  • 请求输出参数的过程具有select查询的服务器,但这需要两个调用