-
-
Save jasoet/3843797 to your computer and use it in GitHub Desktop.
/* | |
* To change this template, choose Tools | Templates | |
* and open the template in the editor. | |
*/ | |
package org.secondstack.db; | |
import java.sql.Connection; | |
import java.sql.DriverManager; | |
import java.sql.SQLException; | |
/** | |
* | |
* @author Deny Prasetyo | |
*/ | |
public class DatabaseConnection { | |
private static DatabaseConnection instance; | |
private Connection connection; | |
private String url = "jdbc:postgresql://localhost:5432/jdbc"; | |
private String username = "root"; | |
private String password = "localhost"; | |
private DatabaseConnection() throws SQLException { | |
try { | |
Class.forName("org.postgresql.Driver"); | |
this.connection = DriverManager.getConnection(url, username, password); | |
} catch (ClassNotFoundException ex) { | |
System.out.println("Database Connection Creation Failed : " + ex.getMessage()); | |
} | |
} | |
public Connection getConnection() { | |
return connection; | |
} | |
public static DatabaseConnection getInstance() throws SQLException { | |
if (instance == null) { | |
instance = new DatabaseConnection(); | |
} else if (instance.getConnection().isClosed()) { | |
instance = new DatabaseConnection(); | |
} | |
return instance; | |
} | |
} |
In another class:
DatabaseConnection databaseConnection = DatabaseConnection.getInstance();
databaseConnection.getConnection();
or
Connection databaseConnection = DatabaseConnection.getInstance().getConnection();
Thanks
Why need use Class.forName ?
It is used to load the database specific Driver . Only then we can use JDBC operations.
In the above example it loads postgresql Driver.
But I still have to load the driver through the Maven dependencies.
Using the Class.forName, the postgresql driver will not appear in the project structure.
And how it supposed to work once connection is closed? I don't see how to reopen this connection without restarting the app.
Great!!!
thanks!
But you need a private constructor.
private DatabaseConnection() { }
Calling getInstance will create a new connection if the existing connection is closed.
is there any way not to hardcode URL, username, and password?
Thanks , It really helped me.
you can create an other method public DatabaseConnection createCon(String url, uName, pswrd){}
is there any way not to hardcode URL, username, and password?
So now which method should I call to get the data base connection ?
DBConnection db = DBConnection.getInstance();
Connection conn = db.getConnection();
Please tell me how to access the singleton instance to get the connection sir. Thank you