tags:

views:

61

answers:

3

Hello. My application uses some prepared statement in every iteration of infinity loop. Is it safely to create preparedStatement before the loop and to run only pstmt.execute in the loop?

Also it is interesting about simple statement.

+4  A: 

That's the point of prepared statements - to prepare them once and use them multiple times.

Bozho
+6  A: 

Yes, that's fine and moreover is one of the points of using PreparedStatements (the statement gets compiled once and then can be run multiple times).

So long as you're not calling the same statement from multiple (different) threads, this will work as you expect. Calling the same statement from multiple threads is likely to cause problems as these objects are not guaranteed to be threadsafe under these conditions.

Andrzej Doyle
+4  A: 

"infinity loop"? Sorry, this sounds like a bad idea.

People are correct when they say that calling a prepared statement multiple times in a loop is a good idea. But implicit in that is a loop with a definite beginning and end.

I'm suspicious of your "infinite loop". It sounds more like a listener that you want to keep alive to respond to some database event.

The answer "it's fine" is correct, but it might be interesting to go into more detail about what you're doing.

UPDATE after comment:

I'd have an Atom RSS server that listened for events. When a request came in, I'd have the RSS listener hand it off to a service that would get a connection out of the connection pool, start a transaction, create a prepared statement in method scope, insert the message, close the prepared statement in a finally block within method scope, commit the transaction, and return the connection to the pool.

The JDBC driver or database will cache PreparedStatements, so it won't be inefficient. No need to hang onto one.

No infinite loop. No threading issues that way.

duffymo
+1, I missed that important point
Bozho
My programm is collecting data from rss channels and puts items to the database. I think it is not possible to build evented model for this task.But it is interesting: how is it possible to make evented model based on database events? Are there any libraries for this? If it is impoetant I am writing programm on scala language.
SMiX
Very interesting. I think in my project I will do this using Scala actors.
SMiX