[logback-dev] [JIRA] Commented: (LBCORE-15) Problems getting autogenerated Keys in Oracle with Oracle JDBC 10.2.03
Søren Boisen (JIRA)
noreply-jira at qos.ch
Wed Oct 15 16:05:21 CEST 2008
[ http://jira.qos.ch/browse/LBCORE-15?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=10771#action_10771 ]
Søren Boisen commented on LBCORE-15:
------------------------------------
It's important to note that the original suggestion, to use prepareStatement(String, int) will not work. In this case Oracle will return the ROWID of the inserted row instead of the EVENT_ID column. As John Gibson wrote, prepareStatement(String, String[]) should be used instead, specifying EVENT_ID as the name of the column to be returned.
For other people that cannot wait for this bug to be fixed, a workaround is to write your own class extending DBAppender:
public class OracleDBAppender extends DBAppender {
@Override
public void append (LoggingEvent eventObject) {
Connection connection = null;
try {
connection = connectionSource.getConnection();
connection.setAutoCommit(false);
PreparedStatement insertStatement = connection.prepareStatement(
getInsertSQL(), new String[] {"EVENT_ID"});
subAppend(eventObject, connection, insertStatement);
// we no longer need the insertStatement
if (insertStatement != null) {
insertStatement.close();
insertStatement = null;
}
connection.commit();
} catch (Throwable sqle) {
addError("problem appending event", sqle);
} finally {
DBHelper.closeConnection(connection);
}
}
}
Then in your configuration file simply declare the class of the appender to attach as your new OracleDBAppender class.
> Problems getting autogenerated Keys in Oracle with Oracle JDBC 10.2.03
> ----------------------------------------------------------------------
>
> Key: LBCORE-15
> URL: http://jira.qos.ch/browse/LBCORE-15
> Project: logback-core
> Issue Type: Bug
> Components: Appender
> Affects Versions: unspecified
> Environment: Operating System: Windows
> Platform: PC
> Reporter: Klaus Unger
> Assignee: Logback dev list
> Priority: Blocker
>
> I've encountered troubles logging StackTrace/MDC entries with die DBAppender on our plattform! We are using Oracle 9.2.0.6.0 on a Solaris Box with Oracle JDBC Driver 10.2.0.3!
> I've debugged the processing of LogMessages into DBAppenderBase.append()!
> There I found a call "con.prepareStatement(getInsertSQL())" which is followed by a call "subAppend(...)"
> As far as I understand Oracle Drivers return generatedKeys only, if you use the right prepareStatement() methods, which is in my understanding the following:
> PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)
> throws SQLException
> @see http://java.sun.com/j2se/1.5.0/docs/api/java/sql/Connection.html#prepareStatement(java.lang.String,%20int)
> which is available since JDK 1.4
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.qos.ch/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the logback-dev
mailing list