Create single Database connection

F

francan00

I would like to create a single Database connection point that I can
use for 4 classes in my Java Web Application.

Here is my ConnectionManager Class:

public class ConnectionManager {
private static Connection activeConnection = null;
public static Connection getConnection() {
if (activeConnection = null) {
Class.forName("OracleThinInfoHere...");
activeConnection =
DriverManager.getConnection("jdbc:eek:racle:thin:mad:myname:1234:eek:rcl",
"scott", "tiger");
);
}
return activeConnection;
}
}

Now how would I access this in each one of my classes?

For example here is one:

public class MainClass
{

public ConnectionManager.getConnection(),
public Connection connection;

//I tried my db connection as this and it didnt return any results
public MainClass(connection)
{
this.connection = ConnectionManager.getConnection();
}

public int matcher(BeanClass abc)
{
try
{
new OtherDbClass(connection).insertDbMethod(abc);
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
//closing statements here
}


OtherClass looks like this:
public class OtherClass {
private Connection connection;
public OtherClass(Connection connection)
{
this.connection = ConnectionManager.getConnection();
}

public int insertDbMethod(BeanClass abc)
{
....
}


Please advise.
 
?

=?ISO-8859-1?Q?Arne_Vajh=F8j?=

I would like to create a single Database connection point that I can
use for 4 classes in my Java Web Application.

Here is my ConnectionManager Class:

public class ConnectionManager {
private static Connection activeConnection = null;
public static Connection getConnection() {
if (activeConnection = null) {
Class.forName("OracleThinInfoHere...");
activeConnection =
DriverManager.getConnection("jdbc:eek:racle:thin:mad:myname:1234:eek:rcl",
"scott", "tiger");
);
}
return activeConnection;
}
}

Before spending more time on this problem: redesign, because
a static connection used in a web app is not good. It is not
thread safe and web apps are multi threaded.

Arne
 
L

Lew

Before spending more time on this problem: redesign, because
a static connection used in a web app is not good. It is not
thread safe and web apps are multi threaded.

Furthermore, most JDBC drivers include a pooled-connection type, at least a
rudimentary one, and Apache has pooling libraries that seem pretty workable.
Push that connection-pooling layer as far to the back as it will go. Your
bizlogic should use and close connections as tightly as possible. The pooling
driver will convert "close" into "recycle" for you.

Holding connections open in the wrong place is a scalability killer.
 
C

Chintan(Neo)

Hi,

Even i agree that using a single connection is not a good approach as
any method which uses it can cuddle with it and it can create problems
for other classes/methods using the same connection... But still if u
wanna use it, u can use a singleton approach... The connection class
will be like this.. THis is not the full class... all methods which
connects to the database will come in that class...

public class MyConnection {
/** The conn. Connection for Database.*/
private Connection conn = null;
private static MyConnection myConnection= null;

private MyConnection(){
try {
// Loads the Class
Class.forName("<classname>");
String url = "url";
String username = "username";
String password = "password";
conn = DriverManager.getConnection(url, username, password);
conn.setAutoCommit(false);
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
catch (SQLException e) {
e.printStackTrace();
}
}

public static MyConnection getConnection(){
if(myConnection == null){
myConnection = new MyConnection();
}
return myConnection;
}
}

and in any method, u want to use the database connection, just create
an object of MyConnection and call its methods to use the database
with the same connection. though i still not recommend this...
 
R

RedGrittyBrick

Lew said:
Furthermore, most JDBC drivers include a pooled-connection type, at
least a rudimentary one, and Apache has pooling libraries that seem
pretty workable. Push that connection-pooling layer as far to the back
as it will go. Your bizlogic should use and close connections as
tightly as possible. The pooling driver will convert "close" into
"recycle" for you.


Some URLs that might be helpful:
http://www.java2s.com/Code/Java/Apache-Common/ConnectionPoolBasics.htm
http://java.sun.com/developer/onlineTraining/Programming/JDCBook/conpool.html

When I first started with a JDBC app, having read that connections were
expensive, I tried to use a single connection and manage it's re-use
myself. Eventually I had to rework the app to use a pool of connections
(I used the code from the second URL above). Later, in order to minimise
the duration of locks, I had to rework my app to minimise the work done
between obtaining a connection and closing it (releasing it back to the
pool). Which is a long way of saying that Lew's recommendations make a
lot of sense, thinking about this now may save time later.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,056
Messages
2,570,440
Members
47,101
Latest member
DoloresHol

Latest Threads

Top