cancel
Showing results for 
Search instead for 
Did you mean: 

JDBC Statement.RETURN_GENERATED_KEYS Error?

Former Member
0 Kudos

Hi guys,

I am writing a Java Webdynpro application that has alot of interaction with an SQL Server 2005 Database. All is going fine but now I am trying to get the GENERATED KEY of a record after an INSERT.

The database table I am inserting into does have a primary key of type IDENTITY and generates an AUTONUMBER each time a record is inserted in increments of 1......

So the code is something like this:

			
int ret = st.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS); -------------ERROR!!!!!!!!!!!!!!!!!!!!
ResultSet rs = st.getGeneratedKeys();

The ERROR!!! line above is where the error is.......

It works 100% fine on the INSERT if I just do a line like the following:

int ret = st.executeUpdate(sql);

I have tried using a combination JDBC JARS as well but no luck.

Does anyone have an idea what could be wrong? Any help would be greatly appreciated.

Lynton

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

Hi guys,

Ok, so I treid and tried with the drivers / JAR files etc and nothing.....seems to be something with the Java source files on the server only being 1.3 compatible...

Here is a workaround for those who are desperate like me to get the generated key back....please see some basic code below to give you an idea how to do it....I have tried it in the Webdynpro and it works 100%.

package db.test;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.Statement;

import net.sourceforge.jtds.*;

public class TestConnection {

public static void main(String[] args) {

try{

Class.forName("net.sourceforge.jtds.jdbc.Driver");

Connection conn= java.sql.DriverManager.getConnection("jdbc:jtds:sqlserver://<server>:1433/<database>", "username", "password");

conn.setAutoCommit(false);

String sql = "INSERT Z_IDEA_ATTACHMENTS(FileName, FilePath, FileURL, FileSize, FolderName, IdeaNumber )VALUES(?,?,?,?,?,?)";

PreparedStatement ps = conn.prepareStatement(sql);

ps.setString(1, "hello.txt");

ps.setString(2, "path");

ps.setString(3, "url");

ps.setString(4, "120 Bytes");

ps.setString(5, "folder");

ps.setInt(6, 1);

int rows = ps.executeUpdate();

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("select @@IDENTITY");

rs.next();

int value = rs.getInt(1);

System.out.println(new Integer(value).toString());

rs.close();

stmt.close();

conn.commit();

conn.close();

System.out.println("done");

}catch (Exception e){

e.printStackTrace();

}

}

}

Former Member
0 Kudos

Hi again,

By the way here is the full error trace incase it helps at all.....thanks

java.lang.AbstractMethodError: com.sap.engine.services.dbpool.cci.ConnectionHandle.prepareStatement(Ljava/lang/String;I)Ljava/sql/PreparedStatement;
	at sasol.idea.IdeaDetailView.onActionUpload(IdeaDetailView.java:239)
	at sasol.idea.wdp.InternalIdeaDetailView.wdInvokeEventHandler(InternalIdeaDetailView.java:209)
	at com.sap.tc.webdynpro.progmodel.generation.DelegatingView.invokeEventHandler(DelegatingView.java:87)
	at com.sap.tc.webdynpro.progmodel.controller.Action.fire(Action.java:67)
	at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.doHandleActionEvent(WindowPhaseModel.java:420)
	at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.processRequest(WindowPhaseModel.java:132)
	at com.sap.tc.webdynpro.clientserver.window.WebDynproWindow.processRequest(WebDynproWindow.java:335)
	at com.sap.tc.webdynpro.clientserver.cal.AbstractClient.executeTasks(AbstractClient.java:143)
	at com.sap.tc.webdynpro.clientserver.session.ApplicationSession.doProcessing(ApplicationSession.java:321)
	at com.sap.tc.webdynpro.clientserver.session.ClientSession.doApplicationProcessingStandalone(ClientSession.java:713)
	at com.sap.tc.webdynpro.clientserver.session.ClientSession.doApplicationProcessing(ClientSession.java:666)
	at com.sap.tc.webdynpro.clientserver.session.ClientSession.doProcessing(ClientSession.java:250)
	at com.sap.tc.webdynpro.clientserver.session.RequestManager.doProcessing(RequestManager.java:149)
	at com.sap.tc.webdynpro.serverimpl.defaultimpl.DispatcherServlet.doContent(DispatcherServlet.java:62)
	at com.sap.tc.webdynpro.serverimpl.defaultimpl.DispatcherServlet.doPost(DispatcherServlet.java:53)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
	at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:401)
	at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:266)
	at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:386)
	at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:364)
	at com.sap.engine.services.httpserver.server.RequestAnalizer.invokeWebContainer(RequestAnalizer.java:1039)
	at com.sap.engine.services.httpserver.server.RequestAnalizer.handle(RequestAnalizer.java:265)
	at com.sap.engine.services.httpserver.server.Client.handle(Client.java:95)
	at com.sap.engine.services.httpserver.server.Processor.request(Processor.java:175)
	at com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener.process(ApplicationSessionMessageListener.java:33)
	at com.sap.engine.core.cluster.impl6.session.MessageRunner.run(MessageRunner.java:41)
	at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:102)
	at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:172)

Thanks again

Lynton