package com.disruptiontheory.eggfetcher;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
public class DatabaseHandler {
private Connection connect = null;
private Statement statement = null;
private PreparedStatement preparedStatement = null;
private ResultSet resultSet = null;
public static boolean InsertNeweggProducts(String queryString) {
return new DatabaseHandler().ExecuteQuery(queryString);
}
public boolean ExecuteQuery(String queryString) {
try
{
// This will load the MySQL driver, each DB has its own driver
Class.forName("com.mysql.jdbc.Driver");
//Thankfully, I remembered to edit the below before uploading to Github. You'll need to put in actual values to get it working on your server
connect = DriverManager.getConnection(
"jdbc:mysql://<SERVER_ADDRESS>?"
+ "user=<USER>&password=<PASSWORD>");
statement = connect.createStatement();
statement.execute(queryString);
return true;
} catch (Exception ex) {
System.out.println("Couldn't execute MySQL Query:");
System.out.println(ex.getMessage());
System.out.println(queryString);
return false;
}
}
public ResultSet SelectQuery(String queryString) {
try
{
// This will load the MySQL driver, each DB has its own driver
Class.forName("com.mysql.jdbc.Driver");
connect = DriverManager.getConnection(
"jdbc:mysql://173.255.243.88/eggscraper?"
+ "user=eggy&password=descrambling");
preparedStatement = connect.prepareStatement(queryString);
resultSet = preparedStatement.executeQuery();
return resultSet;
//writeResultSet(resultSet);
} catch (Exception ex) {
System.out.println("Couldn't execute MySQL Query:");
System.out.println(ex.getMessage());
System.out.println(queryString);
return null;
}
}
public static double GetBrandRating(int brandId) {
ResultSet resultSet = new DatabaseHandler().SelectQuery("SELECT rating FROM BrandRatings WHERE brandid = " + brandId);
try {
if(resultSet.next()) {
double rating = resultSet.getFloat("rating");
return rating;
}
return -1;
} catch (Exception ex) {
System.out.println("Couldn't get rating: " + ex.getMessage());
return -1;
}
}
public static double CompileBrandRating(int brandId) {
String queryString = "INSERT IGNORE INTO BrandRatings (brandid, brand_name, rating) " +
"VALUES (" + brandId + ", \"Name Unknown\", (SELECT AVG(averagerating) FROM `NeweggProducts` WHERE brand = " + brandId + "))";
new DatabaseHandler().ExecuteQuery(queryString);
return DatabaseHandler.GetBrandRating(brandId);
}
public void readDataBase() throws Exception {
try {
// This will load the MySQL driver, each DB has its own driver
Class.forName("com.mysql.jdbc.Driver");
// Setup the connection with the DB
connect = DriverManager
.getConnection("jdbc:mysql://localhost/feedback?"
+ "user=sqluser&password=sqluserpw");
// Statements allow to issue SQL queries to the database
statement = connect.createStatement();
// Result set get the result of the SQL query
resultSet = statement
.executeQuery("select * from FEEDBACK.COMMENTS");
writeResultSet(resultSet);
// PreparedStatements can use variables and are more efficient
preparedStatement = connect
.prepareStatement("insert into FEEDBACK.COMMENTS values (default, ?, ?, ?, ? , ?, ?)");
// "myuser, webpage, datum, summery, COMMENTS from FEEDBACK.COMMENTS");
// Parameters start with 1
preparedStatement.setString(1, "Test");
preparedStatement.setString(2, "TestEmail");
preparedStatement.setString(3, "TestWebpage");
preparedStatement.setString(5, "TestSummary");
preparedStatement.setString(6, "TestComment");
preparedStatement.executeUpdate();
preparedStatement = connect
.prepareStatement("SELECT myuser, webpage, datum, summery, COMMENTS from FEEDBACK.COMMENTS");
resultSet = preparedStatement.executeQuery();
writeResultSet(resultSet);
// Remove again the insert comment
preparedStatement = connect
.prepareStatement("delete from FEEDBACK.COMMENTS where myuser= ? ; ");
preparedStatement.setString(1, "Test");
preparedStatement.executeUpdate();
resultSet = statement
.executeQuery("select * from FEEDBACK.COMMENTS");
writeMetaData(resultSet);
} catch (Exception e) {
throw e;
} finally {
close();
}
}
private void writeMetaData(ResultSet resultSet) throws SQLException {
// Now get some metadata from the database
// Result set get the result of the SQL query
System.out.println("The columns in the table are: ");
System.out.println("Table: " + resultSet.getMetaData().getTableName(1));
for (int i = 1; i<= resultSet.getMetaData().getColumnCount(); i++){
System.out.println("Column " +i + " "+ resultSet.getMetaData().getColumnName(i));
}
}
private void writeResultSet(ResultSet resultSet) throws SQLException {
// ResultSet is initially before the first data set
while (resultSet.next()) {
// It is possible to get the columns via name
// also possible to get the columns via the column number
// which starts at 1
// e.g. resultSet.getSTring(2);
String user = resultSet.getString("myuser");
String website = resultSet.getString("webpage");
String summery = resultSet.getString("summery");
Date date = resultSet.getDate("datum");
String comment = resultSet.getString("comments");
System.out.println("User: " + user);
System.out.println("Website: " + website);
System.out.println("Summery: " + summery);
System.out.println("Date: " + date);
System.out.println("Comment: " + comment);
}
}
// You need to close the resultSet
private void close() {
try {
if (resultSet != null) {
resultSet.close();
}
if (statement != null) {
statement.close();
}
if (connect != null) {
connect.close();
}
} catch (Exception e) {
}
}
public static String Sanitize(String inputString) {
return inputString
.replaceAll("\\x00", "\\\\x00")
.replaceAll("\\x1a", "\\\\x1a")
.replaceAll("\\r", "\\\\r")
.replaceAll("\\n", "\\\\n")
//.replaceAll("\\", "\\\\")
.replaceAll("\'", "\\\'")
.replaceAll("\"", "\\\"");
}
}