I’m working on a single-user desktop database application sort of thing in my spare time, and I’m always unsure about the design choices I’m making. Right now, as it stands, whenever the user wants to interact with the database (which is a local SQLite database, so generally only one user ever sees it at once), the application creates a new connection, does whatever it needs to do, and then closes the connection. Thereforee, over the course of one execution of the application, lots of connections are created and disposed of.
Is this generally the “best” way to go about it, or should the application open the connection at startup and only close it when the application exits? What are the advantages/disadvantages of each method?
I would say it’s fine in this case, since there will only ever be one user and the database is hosted on the same machine (more likely in the same memory space, as I think SQLite just loads as a DLL with the main application) as the application. Constantly opening and closing the connection is unnecessary.
One possible exception might be if you need to have multiple threads of your application accessing the database at the same time. Then you could either force them to wait and share a single connection object, OR you could try to create new connections for the different threads. I have never actually tried this in SQLite. This is one situation where closing the main connection and opening/closing multiple connections might be better for a desktop app.
For web applications, or client/server desktop apps, I’d suggest against leaving connections open.