Hi Ivan,

 

yes, when you open a database it gives the driver a chance to do some 
initialization.

It depends on the driver implementation what it actually does. But you may 
override that behavior in the driver class.

This is exactly why you should keep your database instance during the lifetime 
of your app.

 

Rainer

 

 

Von: [email protected] [mailto:[email protected]] Im Auftrag von ivan 
nemeth
Gesendet: Montag, 4. August 2014 08:53
An: user
Betreff: Re: Best practice to access a DbDatabase?

 

Hi Rainer, 

 

thank you for your answer.

 

I've used a static accessor but if I open the database on application start it 
will open the database for the actual connection. I know that there are no 
reference to the connection in the database instance, but in case of the SQL 
Server driver some initialization SQL scripts is executed against the actual 
connection only and not for other connections 
(DbDatabaseDriver.attachDatabase). So it's true that there are no explicit 
reference to a connection from a database instance but there is an implicit 
binding through these initialization scripts.

 

Thanks,

Ivan

 

On Sun, Aug 3, 2014 at 11:12 PM, Rainer Döbele <[email protected]> wrote:

Hi Ivan,

 

To answer your question:

First you will have to create a class derived from DBDatabase which defines the 
schema of your database.

You then have to open the database when your application starts.

This will attach the driver to the database, but I will not block resources 
like e.g. a connection.

In most cases this class will be a singleton.

 

Hence you may e.g. use a static accessor like this:

 

    private static MyDatabase myDb;

    

    public MyDatabse getDatabase() {

        if (myDb==null)

            myDb=new MyDatabase();

        return myDb;

    }

 

Regards

Rainer

 

 

Von: [email protected] [mailto:[email protected]] Im Auftrag von ivan 
nemeth
Gesendet: Freitag, 1. August 2014 16:44
An: user
Betreff: Best practice to access a DbDatabase?

 

Hi,

 

a month ago (June 2014) there was a discussion already about connection pooling 
but I have further questions. I use some kind of connection pooling and 
Spring's JdbcTemplate, so I have a separate connection for each threads. But 
how should I access a DbDatabase instance? The db instance is tied to the 
actual connection, so separate threads can't use the same db instance.

 

1. Create a new DbDatabase instance for every query/updates/insert. Can it 
cause any problems, if a lot of instances are created every second? I mean 
there are static variables which are storing some global states 
(DbDatabase.databaseMap, DbTable.tableCount etc.)

 

2. Use some kind of pooling on the DbDatabase. 

 

Thanks,

Ivan

 

 

 

Reply via email to