Hi Alain!

Can you paste the connection relevant code, too?
Do you use a connection pool?

Jens

Sent from my iPhone

On 28.02.2013, at 10:48, Alain Becam <[email protected]> wrote:

> Thank you for your feedbacks, here is the relevant part of code, slightly 
> simplified. Very simple as you can see. The first method can be called by 
> several threads, but as the static method insertSearchTerm is then 
> instantiating a new DBRecord each time, that shouldn't be a problem. Using 
> prepared statements is a good idea (and in some other places as well), so I 
> will try it.
> 
> 
> public void insertSearchTerm(int operatorId, String searchTerms, boolean 
> isLocal, String from)
> {
>        GregorianCalendar today = new GregorianCalendar();
>        Date todayDate = today.getTime();
> 
>        MiscTools.insertSearchTerm(operatorId,connectionToNew, searchTerms, 
> isLocal, todayDate, from);
> }
> 
> 
> -- MiscTools --
> 
> public static void insertSearchTerm(Connection conn, String searchTerms, 
> boolean isLocal, Date atTime, String from)
>    {
>        try
>        {
>            DBRecord rec = new DBRecord();
>            rec.create(GeneralApp.db.T_SEARCH_TERMS_LOG);
> rec.setValue(GeneralApp.db.T_SEARCH_TERMS_LOG.C_SEARCH_TERMS, searchTerms);
> rec.setValue(GeneralApp.db.T_SEARCH_TERMS_LOG.C_IS_LOCAL, isLocal);
>            rec.setValue(GeneralApp.db.T_SEARCH_TERMS_LOG.C_AT_TIME, atTime);
>            rec.setValue(GeneralApp.db.T_SEARCH_TERMS_LOG.C_FROM_IP, from);
> 
>            try
>        {
>            rec.update(conn);
> 
>            GeneralApp.db.commit(conn);
>        }
>        catch (Exception e)
>        {
>               logger.error("Error while inserting new search terms",e);
>        }
>        }
>    }
> 
> On 27/02/2013 19:25, Francis De Brabandere wrote:
>> I was thinking the same, you could try to reproduce this in a test by
>> just generating sql. Could you share that part of code somehow so we
>> can have a deeper look?
>> 
>> Cheers,
>> Francis
>> 
>> On 27 February 2013 18:26, [email protected] <[email protected]> wrote:
>>> Hi Alain!
>>> 
>>> Just a shot in the dark: might it be possible you are running into multi 
>>> threading issues? Do you have static date formatter or static members of 
>>> empire classes/instances in your code?
>>> 
>>> Jens
>>> 
>>> Sent from my iPhone
>>> 
>>> On 27.02.2013, at 16:19, Alain Becam <[email protected]> wrote:
>>> 
>>>> Hi all,
>>>>     I have an insert which is called a lot (several time per seconds, 
>>>> 24h/24h), and very rarely, something like once in a week, I get an SQL 
>>>> error because the date is not quoted. It is a very simple insert, and so 
>>>> works something like 99.9% of the time. Still I am curious to know what 
>>>> happen. Here is the relevant part of the raised exception:
>>>> 
>>>> 
>>>> Insert new search terms 
>>>> org.apache.empire.db.exceptions.QueryFailedException: Error executing 
>>>> query INSERT INTO SEARCH_TERMS_LOG( SEARCH_TERMS, IS_LOCAL, AT_TIME, 
>>>> FROM_IP) VALUES ( 'XXXX', 1, Thu Feb 21 10:27:45 CET 2013, '10.11.4.119').
>>>> Native error is INSERT INTO SEARCH_TERMS_LOG( SEARCH_TERMS, IS_LOCAL, 
>>>> AT_TIME, FROM_IP) VALUES ( 'XXXX', 1, Thu Feb 21 10:27:45 CET 2013, 
>>>> '10.11.4.119').
>>>>    at org.apache.empire.db.DBDatabase.executeSQL(DBDatabase.java:1037)
>>>>    at org.apache.empire.db.DBRowSet.updateRecord(DBRowSet.java:711)
>>>>    at org.apache.empire.db.DBRecord.update(DBRecord.java:683)
>>>>    at 
>>>> de.embl.common.core.logging.DBRecordLoggingWrapper.update(DBRecordLoggingWrapper.java:89)
>>>>    ...
>>>> Caused by: java.sql.SQLSyntaxErrorException: ORA-00917: missing comma
>>>> 
>>>>    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440)
>>>>    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
>>>>    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:837)
>>>>    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:445)
>>>>    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
>>>>    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:523)
>>>>    at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:193)
>>>>    at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:999)
>>>>    at 
>>>> oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1315)
>>>>    at 
>>>> oracle.jdbc.driver.OracleStatement.executeUpdateInternal(OracleStatement.java:1822)
>>>>    at 
>>>> oracle.jdbc.driver.OracleStatement.executeUpdate(OracleStatement.java:1787)
>>>>    at 
>>>> oracle.jdbc.driver.OracleStatementWrapper.executeUpdate(OracleStatementWrapper.java:280)
>>>>    at 
>>>> com.mchange.v2.c3p0.impl.NewProxyStatement.executeUpdate(NewProxyStatement.java:64)
>>>>    at 
>>>> org.apache.empire.db.DBDatabaseDriver.executeSQL(DBDatabaseDriver.java:535)
>>>>    at org.apache.empire.db.DBDatabase.executeSQL(DBDatabase.java:1025)
>>>>    ... 26 common frames omitted
>>>> 
>>>> The DBRecordLoggingWrapper is simply saving udpate/insert informations if 
>>>> needed, and in that case it is doing nothing, just calling back the 
>>>> DBRecord methods. Still it could do something wrong, I simply don't see 
>>>> what.
>>>> Best regards,
>>>>    Alain
>>>> 

Reply via email to