MySql.java
package hhn.temp.project.provider;
import hhn.temp.project.Task;
import hhn.temp.project.TaskStatus;
import hhn.temp.project.expections.SQLNoConectionException;
import hhn.temp.project.expections.SQLStatmentException;
import hhn.temp.project.expections.TaskNotExistsException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class MySql {
private String user;
private String password;
private String db;
private String host;
private Connection connection;
public MySql(String user, String password, String db, String host) {
this.user = user;
this.password = password;
this.db = db;
this.host = host;
}
public void connect() {
String url = "jdbc:mysql://" + host + ":3306/" + db + "?autoReconnect=true&useSSL=false";
try {
Class.forName("com.mysql.cj.jdbc.Driver");
connection = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
throw new SQLNoConectionException("Cant connect to the database");
} catch (ClassNotFoundException e) {
throw new SQLNoConectionException("Cant connect to the database: Driver class not found!");
}
}
public void reset() {
try {
PreparedStatement stmt = connection.prepareStatement("TRUNCATE task");
stmt.executeUpdate();
} catch (SQLException e) {
throw new SQLStatmentException("Cant insert data in database");
}
}
public int createTask(String name, String description) {
try {
PreparedStatement stmt = connection.prepareStatement("INSERT INTO task ( taskName, taskDescription) VALUES ( ? , ? )", Statement.RETURN_GENERATED_KEYS);
stmt.setString(1, name);
stmt.setString(2, description);
stmt.executeUpdate();
ResultSet rs = stmt.getGeneratedKeys();
if(rs.next()) {
return rs.getInt(1);
}else{
throw new SQLStatmentException("Can insert data but not select");
}
} catch (SQLException e) {
throw new SQLStatmentException("Cant insert data in database");
}
}
// public void deleteTask(int id) {
// try {
// PreparedStatement stmt = connection.prepareStatement("DELETE task WHERE taskID=?");
// stmt.setString(1, ""+id);
// stmt.executeUpdate();
// } catch (SQLException e) {
// throw new SQLStatmentException("Cant delete data in database");
// }
// }
public boolean existTask(String name) {
try {
PreparedStatement stmt = connection.prepareStatement("Select * FROM task WHERE taskName=?");
stmt.setString(1, name);
ResultSet rs = stmt.executeQuery();
return rs.next();
} catch (SQLException e) {
throw new SQLStatmentException("Cant select data from database");
}
}
public boolean existTask(int id) {
try {
PreparedStatement stmt = connection.prepareStatement("Select * FROM task WHERE taskID=?");
stmt.setString(1, ""+id);
ResultSet rs = stmt.executeQuery();
return rs.next();
} catch (SQLException e) {
throw new SQLStatmentException("Cant select data from database");
}
}
public void deleteTask(String name) {
try {
PreparedStatement stmt = connection.prepareStatement("DELETE FROM task WHERE taskName=?");
stmt.setString(1, name);
stmt.executeUpdate();
} catch (SQLException e) {
throw new SQLStatmentException("Cant delete data in database");
}
}
public void updateDescription(int id, String description) {
try {
PreparedStatement stmt = connection.prepareStatement("UPDATE task SET taskDescription=? WHERE taskID=?");
stmt.setString(1, description);
stmt.setString(2, ""+id);
stmt.executeUpdate();
} catch (SQLException e) {
throw new SQLStatmentException("Cant update data in database");
}
}
// public void updateDescription(String name, String description) {
// try {
// PreparedStatement stmt = connection.prepareStatement("UPDATE task SET taskDescription=? WHERE taskName=?");
// stmt.setString(1, description);
// stmt.setString(2, name);
// stmt.executeUpdate();
//
// } catch (SQLException e) {
// throw new SQLStatmentException("Cant update data in database");
// }
// }
public void updateStatus(int id, TaskStatus status) {
try {
PreparedStatement stmt = connection.prepareStatement("UPDATE task SET taskStatus=? WHERE taskID=?");
stmt.setString(1, status.name());
stmt.setString(2, ""+id);
stmt.executeUpdate();
} catch (SQLException e) {
throw new SQLStatmentException("Cant update data in database");
}
}
// public void updateStatus(String name, TaskStatus status) {
// try {
// PreparedStatement stmt = connection.prepareStatement("UPDATE task SET taskStatus=? WHERE taskName=?");
// stmt.setString(1, status.name());
// stmt.setString(2, name);
// stmt.executeUpdate();
//
// } catch (SQLException e) {
// throw new SQLStatmentException("Cant update data in database");
// }
// }
public void updateWorker(int id, String worker) {
try {
PreparedStatement stmt = connection.prepareStatement("UPDATE task SET taskWorker=? WHERE taskID=?");
stmt.setString(1, worker);
stmt.setString(2, ""+id);
stmt.executeUpdate();
} catch (SQLException e) {
throw new SQLStatmentException("Cant update data in database");
}
}
// public void updateWorker(String name, String worker) {
// try {
// PreparedStatement stmt = connection.prepareStatement("UPDATE task SET taskWorker=? WHERE taskName=?");
// stmt.setString(1, worker);
// stmt.setString(2, name);
// stmt.executeUpdate();
//
// } catch (SQLException e) {
// throw new SQLStatmentException("Cant update data in database");
// }
// }
public Task getTask(int id) {
try {
PreparedStatement stmt = connection.prepareStatement("SELECT * FROM task WHERE taskID=?");
stmt.setString(1, ""+id);
ResultSet rs = stmt.executeQuery();
if(rs.next()) {
return getTaskFromDatabase(rs);
} else {
throw new TaskNotExistsException("No Task found in databse with id: " + id);
}
} catch (SQLException e) {
throw new SQLStatmentException("Cant select data from database");
}
}
public Task getTask(String name) {
try {
PreparedStatement stmt = connection.prepareStatement("SELECT * FROM task WHERE taskName=?");
stmt.setString(1, name);
ResultSet rs = stmt.executeQuery();
if(rs.next()) {
return getTaskFromDatabase(rs);
}else{
throw new TaskNotExistsException("No Task found in databse with name: " + name);
}
} catch (SQLException e) {
throw new SQLStatmentException("Cant select data from database");
}
}
public List<Task> getTaskList() {
try {
PreparedStatement stmt = connection.prepareStatement("SELECT * FROM task");
ResultSet rs = stmt.executeQuery();
List<Task> taskList = new ArrayList<>();
while(rs.next()) {
taskList.add(getTaskFromDatabase(rs));
}
return taskList;
} catch (SQLException e) {
throw new SQLStatmentException("Cant select data from database");
}
}
private Task getTaskFromDatabase(ResultSet rs) throws SQLException {
Task task = new Task(rs.getInt("taskID"), rs.getString("taskName"), rs.getString("taskDescription"), rs.getString("taskWorker"),TaskStatus.valueOf(rs.getString("taskStatus")), this);
return task;
}
}