What really happens is actually dependent on which JDBC driver you are
using. I always run my apps with auto-commit turned off, and explicitly
commit or rollback the transaction at the end, because I prefer this to be
explicit in the application level code.
Craig
On Mon, 26 Mar 2001 [EMAIL PROTECTED] wrote:
> Hi.
>
> I use the following code to insert a new record in the database.
> mDataSource is an instance of GenericDataSource, configured in struts-config.xml
>
>
> Connection conn = null;
>
> try {
> conn = mDataSource.getConnection();
> Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
> ResultSet.CONCUR_UPDATABLE);
>
> ResultSet uprs = stmt.executeQuery("SELECT * FROM Users");
> uprs.moveToInsertRow();
>
> uprs.updateObject( "FullName", "xxx" );
> uprs.updateObject( "Password", "yyy" );
> uprs.updateObject( "Email", "[EMAIL PROTECTED]" );
>
> uprs.insertRow();
> uprs.moveToCurrentRow();
>
> stmt.close();
> } catch (SQLException sqle) {
> throw new CoreException("CoreException while updating user : " +
> sqle.getMessage());
> } finally {
> try {
> conn.close();
> } catch (SQLException sqle) {
> }
> }
>
>
> Everything passes ok, but nothing is written in the database.
> I looked at the source of GenericDataSource and GenericConnection and found the
>following:
>
> GenericConnection.close() method calls conn.rollback() before closing the
>connection, no matter what is the value of autoCommit flag.
> Probably this is a normal behaviour when you use DataSource, configured to
>autoCommit=false, or if some exception occured. But my DataSource is autoCommit=true
>and no exceptions occured.
>
> My question is: Should I always call conn.commit() after performing my database
>operations, or there is a bug in the implementation of GenericConnection.
>
>
> Regards,
> Danail Grigorov
>