Wow, I wonder why you're using iBATIS at all.  ;-)

In this case you have three options:

1) Stop accessing the ResultSet and let iBATIS do its job.  Performance at that level should not be an issue for you.

2) Use a RowHandler, it's a bit closer to the ResultSet, so you can do whatever you like with it -- mostly to process row-by-row, so you don't have to load them all up into memory.

3) Bypass iBATIS entirely and just use JDBC for this piece. 

Cheers,
Clinton


On 8/17/06, David Gagnon <[EMAIL PROTECTED]> wrote:
Hi all,

  Thanks for your help.  Upgrading is a huge job but it goes well so
far.  How can I have access to the ResultSet.  Here I need performance
so I need to access the resultSet directly.  More I have 60+ reports
that all access the resultSet directly.

Thanks for you help!

Regards
/David


    public synchronized void processDataChangeNotification() {
        String sql =
dbNotificationDao.getSqlMap ().getMappedStatement(DbNotificationDaoX.NOTIFICATION_PREFIX
+ "." + WebOsConstants.DB_GET).getSql(null);
        DbConnection dbConDetail = null;
        // allow only one at a time
        try {

            ConnectionFactory connectionFactory = (ConnectionFactory)
ManagersFactory.getManager(ConnectionFactory.MANAGER_KEY);

            dbConDetail = connectionFactory.getConnection();
            dbConDetail.startTransaction ();
            ResultSet detailRs2 = dbConDetail.executeQuery(sql);
            while (detailRs2.next()) {
                String entity = detailRs2.getString(1);
                cacheUpdateInfo.id1 = detailRs2.getString (2);
                cacheUpdateInfo.id2 = detailRs2.getString(3);
                cacheUpdateInfo.id3 = detailRs2.getString(4);
                cacheUpdateInfo.id4 = detailRs2.getString(5);
                cacheUpdateInfo.timestamp = detailRs2.getString(6);
                CachedDao handler = (CachedDao)
dataChangeHandler.get(entity);
                if (handler != null) {
                    handler.handleDataChange(entity, cacheUpdateInfo);
                } else {
                    log.error("No data change handler register for
entity : " + entity);
                }
            }

            // delete processed notification
            sql =
dbNotificationDao.getSqlMap().getMappedStatement(DbNotificationDaoX.NOTIFICATION_PREFIX
+ "." + WebOsConstants.DB_DELETE).getSql(null);
            dbConDetail.execute(sql);

            dbConDetail.commitTransaction();

        } catch (SQLException e) {
            log.error("Unable to write the db (EntitySerialiser): " +
e.getMessage(), e);
        } finally {
            if (dbConDetail != null)
                dbConDetail.closeAll();
        }


    }





Clinton Begin wrote:
> Using setUserConnection will work.   It's thread safe, so don't worry
> about concurrent access.  Just make sure to "unset" it by calling
> setUserConnection (null) -- which reminds me, we should add a
> clearUserConnection() to make this code nicer.
>
> The other way to do it is with openSession (Connection conn).  But I
> don't see a reason for you to do that here.
>
> As for accessing the SQL statements themselves -- be warned, it will
> not be easy.  iBATIS 2.0 does a lot more to keep you away from the
> guts of the framework to avoid upgrade issues...as you're experiencing
> now.  ;-)
>
> Let us know when you get to that point, we'll see what we can do.
>
> public final List getList(DbConnection dbCon, String mapKey, Object
> param)
>     throws DatabaseException {
>   boolean handleTransactionLocally = false;
>   try {
>     if (dbCon == null) {
>       handleTransactionLocally = true;
>       dbCon = connectionFactory.getConnectio n();
>       dbCon.setReadOnlyConnection(true);
>     }
>     sqlMap.setUserConnection (dbCon.getConnection());
>     return sqlMap.queryForList(mapKey, param);
>   } catch (SQLException e) {
>     // log.error ("Error during sql: " + e.getMessage(), e);
>
>     ExceptionAdaptor.instance(exceptionAdaptorKey).getMappe dException(e,
>       "getList: " + e.getMessage(), true,
> ExceptionAdaptor.ACTION_SEARCH , param);
>   } finally {
>     sqlMap.setUserConnection(null);
>     if (dbCon != null) {
>       dbCon.closeAll(handleTransactionLocally);
>     }
>   }
> }
>
> Clinton
>
>
>
>
> On 8/16/06, *David Gagnon* <[EMAIL PROTECTED]
> <mailto:[EMAIL PROTECTED]>> wrote:
>
>     Hi all,
>
>     I'm having a lot of fun trying to convert my code to 2.1.7.  There is
>     still a lot of things I didn`t figured out yet.
>
>     Can you please tell me how to convert the following function.?
>
>
>         public final List getList(DbConnection dbCon, String mapKey,
>     Object
>     param) throws DatabaseException {
>
>             List list = null;
>             boolean handleTransactionLocally = false;
>             try {
>                 if (dbCon == null) {
>                     handleTransactionLocally = true;
>                     dbCon = connectionFactory.getConnection();
>                     dbCon.setReadOnlyConnection(true);
>                 }
>
>                 MappedStatement statement =
>     sqlMap.getMappedStatement(mapKey);
>                 list =
>     statement.executeQueryForList (dbCon.getConnection(),
>     param);
>             } catch (SQLException e) {
>     //            log.error("Error during sql: " + e.getMessage(), e);
>
>     ExceptionAdaptor.instance (exceptionAdaptorKey).getMappedException(e,
>     "getList: " + e.getMessage(), true,
>     ExceptionAdaptor.ACTION_SEARCH, param);
>             } finally {
>                 if (dbCon != null) {
>                     dbCon.closeAll(handleTransactionLocally);
>                 }
>             }
>             return list;
>         }
>
>
>
>     I saw a sqlMap.setUserConnection () but this method can be called by
>     simultaneously so setting the connection in the sqlMap doesn`t make
>     sense to me.  There is probably something that I don`t understand!
>
>     Please help :-)
>
>     Best Regards.
>     /David
>     P.S.: Also I do need to get the SQL string from a map to play with it
>     myself.  I'm not there yet but I hope there a way to get it!  Thanks
>
>
>
>
>



Reply via email to