mvn archetype:generate -DgroupId=nl.com.devnl -DartifactId=EasyDatabase -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
hostname=localhost port=5432 databasename=postgres username=postgres password=admin
rename the App.java to Reader.java
package nl.com.devnl;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Reader {
private static final String FILENAME = "database.properties";
public Properties getDatabaseConfiguration(){
Properties props = new Properties();
InputStream inputStream = getClass().getClassLoader().getResourceAsStream(FILENAME);
if(null != inputStream){
try {
props.load(inputStream);
} catch (IOException ex) {
Logger.getLogger(Reader.class.getName()).log(Level.SEVERE, null, ex);
}
}
return props;
}
}
rename the AppTest.java to ReaderTest.java
package nl.com.devnl;
import java.util.Properties;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.internal.runners.JUnit4ClassRunner;
import org.junit.runner.RunWith;
@RunWith(JUnit4ClassRunner.class)
public class ReaderTest{
private static final String HOSTNAME="localhost";
private static final String PORT="5432";
private static final String DATABASENAME="postgres";
private static final String USERNAME="admin";
private static final String PASSWORD="admin";
private Reader reader;
@Before
public void setup(){
reader = new Reader();
}
@Test
public void read(){
Properties props = reader.getDatabaseConfiguration();
Assert.assertEquals(HOSTNAME, props.get("hostname"));
Assert.assertEquals(PORT, props.get("port"));
Assert.assertEquals(DATABASENAME, props.get("databasename"));
Assert.assertEquals(USERNAME, props.get("username"));
Assert.assertEquals(PASSWORD, props.get("password"));
}
}
we now create a class to create a database connection and we call it DBConnection
package nl.com.devnl;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class DBConnection {
private Reader reader;
private Connection connection;
public Connection createConnection(){
reader = new Reader();
Properties props = reader.getDatabaseConfiguration();
String hostname = props.getProperty("hostname");
String port = props.getProperty("port");
String databasename = props.getProperty("databasename");
String user = props.getProperty("username");
String password = props.getProperty("password");
String url = "jdbc:postgresql://"+hostname+":"+port+"/"+databasename;
try{
connection = DriverManager.getConnection(url, user, password);
}catch(SQLException ex){
ex.printStackTrace();
}
return connection;
}
public void closeConnection(){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
we create a DBConnectionTest
package nl.com.devnl;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.internal.runners.JUnit4ClassRunner;
import org.junit.runner.RunWith;
@RunWith(JUnit4ClassRunner.class)
public class DBConnectionTest {
private static final String QUERY = "SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES";
private DBConnection dbConn;
@Before
public void setup(){
dbConn = new DBConnection();
}
@Test
public void testConnection(){
Assert.assertNotNull(dbConn.createConnection());
dbConn.closeConnection();
}
@Test
public void testResult(){
Connection conn = dbConn.createConnection();
try {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(QUERY);
while(rs.next()){
int aantal = rs.getInt(1);
Assert.assertEquals(173, aantal);
}
} catch (SQLException ex) {
Logger.getLogger(DBConnectionTest.class.getName()).log(Level.SEVERE, null, ex);
}
dbConn.closeConnection();
}
}