summaryrefslogtreecommitdiff
path: root/src/main/java/com/redstoner/misc/mysql/elements
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/redstoner/misc/mysql/elements')
-rw-r--r--src/main/java/com/redstoner/misc/mysql/elements/ConstraintOperator.java24
-rw-r--r--src/main/java/com/redstoner/misc/mysql/elements/MysqlConstraint.java24
-rw-r--r--src/main/java/com/redstoner/misc/mysql/elements/MysqlDatabase.java90
-rw-r--r--src/main/java/com/redstoner/misc/mysql/elements/MysqlField.java33
-rw-r--r--src/main/java/com/redstoner/misc/mysql/elements/MysqlResult.java16
-rw-r--r--src/main/java/com/redstoner/misc/mysql/elements/MysqlTable.java133
6 files changed, 320 insertions, 0 deletions
diff --git a/src/main/java/com/redstoner/misc/mysql/elements/ConstraintOperator.java b/src/main/java/com/redstoner/misc/mysql/elements/ConstraintOperator.java
new file mode 100644
index 0000000..45cb33c
--- /dev/null
+++ b/src/main/java/com/redstoner/misc/mysql/elements/ConstraintOperator.java
@@ -0,0 +1,24 @@
+package com.redstoner.misc.mysql.elements;
+
+public enum ConstraintOperator {
+ LESS_THAN, GREATER_THAN, EQUAL, NOT_EQUAL, LESS_THAN_OR_EQUAL, GREATER_THAN_OR_EQUAL;
+
+ public String toString() {
+ switch (this) {
+ case LESS_THAN:
+ return "<";
+ case GREATER_THAN:
+ return ">";
+ case EQUAL:
+ return "=";
+ case NOT_EQUAL:
+ return "!=";
+ case LESS_THAN_OR_EQUAL:
+ return "<=";
+ case GREATER_THAN_OR_EQUAL:
+ return ">=";
+ default:
+ return "=";
+ }
+ }
+}
diff --git a/src/main/java/com/redstoner/misc/mysql/elements/MysqlConstraint.java b/src/main/java/com/redstoner/misc/mysql/elements/MysqlConstraint.java
new file mode 100644
index 0000000..d651344
--- /dev/null
+++ b/src/main/java/com/redstoner/misc/mysql/elements/MysqlConstraint.java
@@ -0,0 +1,24 @@
+package com.redstoner.misc.mysql.elements;
+
+public class MysqlConstraint {
+ private String fieldName, value;
+ private ConstraintOperator operator;
+
+ public MysqlConstraint(String fieldName, ConstraintOperator operator, String value) {
+ this.fieldName = fieldName;
+ this.operator = operator;
+ this.value = value;
+ }
+
+ public String getFieldName() {
+ return fieldName;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public ConstraintOperator getOperator() {
+ return operator;
+ }
+}
diff --git a/src/main/java/com/redstoner/misc/mysql/elements/MysqlDatabase.java b/src/main/java/com/redstoner/misc/mysql/elements/MysqlDatabase.java
new file mode 100644
index 0000000..91c0fe4
--- /dev/null
+++ b/src/main/java/com/redstoner/misc/mysql/elements/MysqlDatabase.java
@@ -0,0 +1,90 @@
+package com.redstoner.misc.mysql.elements;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.redstoner.misc.mysql.MysqlQueryHandler;
+
+public class MysqlDatabase {
+ private Connection connection;
+
+ public MysqlDatabase(Connection connection) {
+ this.connection = connection;
+ }
+
+ public String getName() {
+ try {
+ return connection.getCatalog();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ public MysqlTable getTable(String name) {
+ return new MysqlTable(this, name);
+ }
+
+ public boolean createTable(String name, MysqlField... description) {
+ return MysqlQueryHandler.queryNoResult(connection, "CREATE TABLE `" + name + "` " + getDescription(description) + ";");
+ }
+
+ public boolean createTableIfNotExists(String name, MysqlField... description) {
+ return MysqlQueryHandler.queryNoResult(connection, "CREATE TABLE IF NOT EXISTS `" + name + "` " + getDescription(description) + ";");
+ }
+
+ public boolean dropTable(String name) {
+ return MysqlQueryHandler.queryNoResult(connection, "DROP TABLE `" + name + "`;");
+ }
+
+ public boolean drop() {
+ return MysqlQueryHandler.queryNoResult(connection, "DROP DATABASE `" + getName() + "`;");
+ }
+
+ public List<MysqlTable> getTables() {
+ try {
+ List<MysqlTable> tables = new ArrayList<>();
+ DatabaseMetaData metadata = connection.getMetaData();
+ ResultSet queryResults = metadata.getTables(null, null, "%", null);
+
+ while (queryResults.next()) {
+ tables.add(new MysqlTable(this, queryResults.getString(3)));
+ }
+
+ return tables;
+ } catch (SQLException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ protected Connection getConnection() {
+ return connection;
+ }
+
+ private String getDescription(MysqlField... description) {
+ String desc = "(";
+
+ for (int i = 0; i < description.length; i++) {
+ String nil = "";
+
+ if (description[i].canBeNull()) {
+ nil = " NOT NULL";
+ }
+
+ desc += "`" + description[i].getName() + "` " + description[i].getType().getName() + nil;
+
+ if (i < description.length - 1) {
+ desc += ",";
+ }
+ }
+
+ desc += ")";
+
+ return desc;
+ }
+}
diff --git a/src/main/java/com/redstoner/misc/mysql/elements/MysqlField.java b/src/main/java/com/redstoner/misc/mysql/elements/MysqlField.java
new file mode 100644
index 0000000..61cba2e
--- /dev/null
+++ b/src/main/java/com/redstoner/misc/mysql/elements/MysqlField.java
@@ -0,0 +1,33 @@
+package com.redstoner.misc.mysql.elements;
+
+import com.redstoner.misc.mysql.types.MysqlType;
+
+public class MysqlField {
+ private String name;
+ private MysqlType type;
+ private boolean canBeNull;
+
+ public MysqlField(String name, MysqlType type, boolean canBeNull) {
+ this.name = name;
+ this.type = type;
+ this.canBeNull = canBeNull;
+ }
+
+ public MysqlField(String name, String type, boolean canBeNull) {
+ this.name = name;
+ this.type = MysqlType.getTypeFromString(type);
+ this.canBeNull = canBeNull;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public MysqlType getType() {
+ return type;
+ }
+
+ public boolean canBeNull() {
+ return canBeNull;
+ }
+}
diff --git a/src/main/java/com/redstoner/misc/mysql/elements/MysqlResult.java b/src/main/java/com/redstoner/misc/mysql/elements/MysqlResult.java
new file mode 100644
index 0000000..6db0769
--- /dev/null
+++ b/src/main/java/com/redstoner/misc/mysql/elements/MysqlResult.java
@@ -0,0 +1,16 @@
+package com.redstoner.misc.mysql.elements;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+public class MysqlResult {
+ private ResultSet results;
+
+ public MysqlResult(ResultSet results) {
+ this.results = results;
+ }
+
+ public Object getObject(int columnIndex, Class<?> type) throws SQLException {
+ return results.getObject(columnIndex, type);
+ }
+}
diff --git a/src/main/java/com/redstoner/misc/mysql/elements/MysqlTable.java b/src/main/java/com/redstoner/misc/mysql/elements/MysqlTable.java
new file mode 100644
index 0000000..6656fcd
--- /dev/null
+++ b/src/main/java/com/redstoner/misc/mysql/elements/MysqlTable.java
@@ -0,0 +1,133 @@
+package com.redstoner.misc.mysql.elements;
+
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.redstoner.misc.mysql.MysqlQueryHandler;
+
+public class MysqlTable
+{
+ private MysqlDatabase database;
+ private String name;
+
+ public MysqlTable(MysqlDatabase database, String name)
+ {
+ this.database = database;
+ this.name = name;
+ }
+
+ public String getName()
+ {
+ return this.name;
+ }
+
+ public MysqlField[] describe()
+ {
+ try
+ {
+ List<MysqlField> description = new ArrayList<>();
+ DatabaseMetaData metadata = database.getConnection().getMetaData();
+ ResultSet queryResults = metadata.getColumns(null, null, name, null);
+ while (queryResults.next())
+ {
+ description.add(new MysqlField(queryResults.getString(4),
+ queryResults.getString(6).split(" ")[0] + "(" + queryResults.getString(7) + ")",
+ queryResults.getBoolean(11)));
+ }
+ return description.toArray(new MysqlField[0]);
+ }
+ catch (SQLException e)
+ {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ public boolean insert(String... values)
+ {
+ MysqlField[] description = describe();
+ if (values.length > 0 && values.length == description.length)
+ {
+ String val = "(\"" + String.join("\",\"", values) + "\")";
+ return MysqlQueryHandler.queryNoResult(database.getConnection(),
+ "INSERT INTO `" + name + "` VALUES " + val + ";");
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ public Object[] get(String fieldName, MysqlConstraint... constraints)
+ {
+ ResultSet results = MysqlQueryHandler.queryResult(database.getConnection(),
+ "SELECT " + fieldName + " FROM `" + name + "`" + getConstraints(constraints) + ";");
+ List<Object> resObj = new ArrayList<>();
+ try
+ {
+ while (results.next())
+ {
+ resObj.add(results.getObject(1));
+ }
+ }
+ catch (SQLException e)
+ {
+ e.printStackTrace();
+ return new Object[0];
+ }
+ return resObj.toArray(new Object[0]);
+ }
+
+ public Object[] get(String statement)
+ {
+ ResultSet results = MysqlQueryHandler.queryResult(database.getConnection(), statement);
+ List<Object> resObj = new ArrayList<>();
+ try
+ {
+ while (results.next())
+ {
+ resObj.add(results.getObject(1));
+ }
+ }
+ catch (SQLException e)
+ {
+ e.printStackTrace();
+ return new Object[0];
+ }
+ return resObj.toArray(new Object[0]);
+ }
+
+ public boolean delete(MysqlConstraint... constraints)
+ {
+ return MysqlQueryHandler.queryNoResult(database.getConnection(),
+ "DELETE FROM `" + name + "`" + getConstraints(constraints) + ";");
+ }
+
+ public boolean drop()
+ {
+ return MysqlQueryHandler.queryNoResult(database.getConnection(), "DROP TABLE `" + name + "`;");
+ }
+
+ private String getConstraints(MysqlConstraint... constraints)
+ {
+ String cons = "";
+ if (constraints.length > 0)
+ {
+ cons += " WHERE ";
+ for (int i = 0; i < constraints.length; i++)
+ {
+ MysqlConstraint constraint = constraints[i];
+ cons += constraint.getFieldName() + constraint.getOperator().toString() + "\"" + constraint.getValue()
+ + "\"";
+ if (i < constraints.length - 1)
+ {
+ cons += " AND ";
+ }
+ }
+ }
+ return cons;
+ }
+}