package no.ntnu.fp.storage.db;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class DbConnection {
//Fields
private String driver = "org.gjt.mm.mysql.Driver";
private String host = "jdbc:mysql://mysql.stud.ntnu.no/batunges_calendarDB";
private String user = "batunges_uber34";
private String pass = "uber34";
private Connection connect;
//Constructor
public DbConnection(Properties props){
if (props != null) {
driver = props.getProperty("jdbcDriver");
host = props.getProperty("dbAddress");
user = props.getProperty("user");
pass = props.getProperty("password");
}
try {
Class.forName(driver);
connect = DriverManager.getConnection(host, user, pass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException sq){
sq.printStackTrace();
}
}
/**
* Runs the {@code sql} query on the database and
* returns the {@code ResultSet}.
*
* @param sql
* The query to perform.
*
* @return the result as a {@code ResultSet}
*
* @throws SQLException if a database access error occurs
*
*/
public ResultSet query(String sql) throws SQLException {
Statement st = connect.createStatement();
return st.executeQuery(sql);
}
public int executeUpdate(String sql) throws SQLException {
Statement st = connect.createStatement();
return st.executeUpdate(sql);
}
public void insert(Object obj){
try{
Class <? extends Object> clazz = obj.getClass();
String classname = clazz.getSimpleName();
StringBuilder sb = new StringBuilder();
sb.append("INSERT INTO "+ classname +"(");
//Get field names
Field[] fields = clazz.getDeclaredFields();
boolean commaAdded = false;
for (Field field : fields) {
if(!commaAdded) {
commaAdded = true;
}
else {
sb.append(", ");
}
sb.append(field.getName());
}
sb.append(") VALUES(");
commaAdded = false;
//Get field data
for(Field field : fields) {
String fieldName = field.getName();
field.setAccessible(true);
Object value = field.get(obj);
field.setAccessible(false);
if(!commaAdded){
commaAdded=true;
}else{
sb.append(", ");
}
sb.append(parseValue(value));
}
sb.append(")");
String query1 = sb.toString();
connect.createStatement().execute(query1);
}catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* Create a String object of a inserted Object. Used by the generic
* insert function to manipulate data.
* @param value
* @return
*/
private Object parseValue(Object value) {
return String.format("'%s'", value).toLowerCase();
}
/**
* C
* @param value
* @return
*/
private String parseValue(String value) {
return String.format("'%s'", value);
}
/**
*
* @throws SQLException
*/
public void close() throws SQLException {
connect.close();
}
//methods
}