[DEV] implement base of create and check db exist
This commit is contained in:
parent
1501b7a21e
commit
7c37b65842
21
.classpath
21
.classpath
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<classpath>
|
<classpath>
|
||||||
<classpathentry including="**/*.java" kind="src" output="out/maven/classes" path="src">
|
<classpathentry kind="src" output="out/maven/classes" path="src">
|
||||||
<attributes>
|
<attributes>
|
||||||
<attribute name="optional" value="true"/>
|
<attribute name="optional" value="true"/>
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
@ -13,7 +13,7 @@
|
|||||||
<attribute name="test" value="true"/>
|
<attribute name="test" value="true"/>
|
||||||
</attributes>
|
</attributes>
|
||||||
</classpathentry>
|
</classpathentry>
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17">
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
|
||||||
<attributes>
|
<attributes>
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
</attributes>
|
</attributes>
|
||||||
@ -23,22 +23,5 @@
|
|||||||
<attribute name="maven.pomderived" value="true"/>
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
</attributes>
|
</attributes>
|
||||||
</classpathentry>
|
</classpathentry>
|
||||||
<classpathentry kind="src" path="out/maven/generated-sources/annotations">
|
|
||||||
<attributes>
|
|
||||||
<attribute name="optional" value="true"/>
|
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
|
||||||
<attribute name="ignore_optional_problems" value="true"/>
|
|
||||||
<attribute name="m2e-apt" value="true"/>
|
|
||||||
</attributes>
|
|
||||||
</classpathentry>
|
|
||||||
<classpathentry kind="src" output="out/maven/test-classes" path="out/maven/generated-test-sources/test-annotations">
|
|
||||||
<attributes>
|
|
||||||
<attribute name="optional" value="true"/>
|
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
|
||||||
<attribute name="ignore_optional_problems" value="true"/>
|
|
||||||
<attribute name="m2e-apt" value="true"/>
|
|
||||||
<attribute name="test" value="true"/>
|
|
||||||
</attributes>
|
|
||||||
</classpathentry>
|
|
||||||
<classpathentry kind="output" path="out/maven/classes"/>
|
<classpathentry kind="output" path="out/maven/classes"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
@ -30,13 +30,14 @@ import org.slf4j.LoggerFactory;
|
|||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
|
||||||
|
import jakarta.ws.rs.InternalServerErrorException;
|
||||||
|
|
||||||
import org.kar.archidata.annotation.SQLCreateTime;
|
import org.kar.archidata.annotation.SQLCreateTime;
|
||||||
import org.kar.archidata.annotation.SQLDefault;
|
import org.kar.archidata.annotation.SQLDefault;
|
||||||
import org.kar.archidata.annotation.SQLDeleted;
|
import org.kar.archidata.annotation.SQLDeleted;
|
||||||
|
|
||||||
|
|
||||||
public class SqlWrapper {
|
public class SqlWrapper {
|
||||||
static final Logger logger = LoggerFactory.getLogger(SqlWrapper.class);
|
static final Logger LOGGER = LoggerFactory.getLogger(SqlWrapper.class);
|
||||||
|
|
||||||
public static class ExceptionDBInterface extends Exception {
|
public static class ExceptionDBInterface extends Exception {
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
@ -50,6 +51,112 @@ public class SqlWrapper {
|
|||||||
public SqlWrapper() {
|
public SqlWrapper() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isDBExist(String name) throws InternalServerErrorException {
|
||||||
|
if (ConfigBaseVariable.getDBType().equals("sqlite")) {
|
||||||
|
// no base manage in sqLite ...
|
||||||
|
// TODO: check if the file exist or not ...
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
DBEntry entry;
|
||||||
|
try {
|
||||||
|
entry = DBEntry.createInterface(GlobalConfiguration.dbConfig, true);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
ex.printStackTrace();
|
||||||
|
LOGGER.error("Can not check if the DB exist!!! {}", ex.getMessage());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
// TODO : Maybe connect with a temporary not specified connection interface to a db ...
|
||||||
|
PreparedStatement ps = entry.connection.prepareStatement("show databases");
|
||||||
|
ResultSet rs = ps.executeQuery();
|
||||||
|
while (rs.next()) {
|
||||||
|
String data = rs.getString(1);
|
||||||
|
if (name.equals(data)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//int count = ret.getInt("total");
|
||||||
|
return false;
|
||||||
|
} catch (SQLException ex) {
|
||||||
|
LOGGER.error("Can not check if the DB exist SQL-error !!! {}", ex.getMessage());
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
entry.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
entry = null;
|
||||||
|
}
|
||||||
|
throw new InternalServerErrorException("Can Not manage the DB-access");
|
||||||
|
}
|
||||||
|
public static boolean createDB(String name) throws InternalServerErrorException {
|
||||||
|
if (ConfigBaseVariable.getDBType().equals("sqlite")) {
|
||||||
|
// no base manage in sqLite ...
|
||||||
|
// TODO: check if the file exist or not ...
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
DBEntry entry;
|
||||||
|
try {
|
||||||
|
entry = DBEntry.createInterface(GlobalConfiguration.dbConfig, true);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
ex.printStackTrace();
|
||||||
|
LOGGER.error("Can not Create the DB {}", ex.getMessage());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
PreparedStatement ps = entry.connection.prepareStatement("CREATE DATABASE ?");
|
||||||
|
ps.setString(1, name);
|
||||||
|
int ret = ps.executeUpdate();
|
||||||
|
return ret == 1;
|
||||||
|
} catch (SQLException ex) {
|
||||||
|
LOGGER.error("Can not Create the DB SQL-error !!! {}", ex.getMessage());
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
entry.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
entry = null;
|
||||||
|
}
|
||||||
|
throw new InternalServerErrorException("Can Not manage the DB-access");
|
||||||
|
}
|
||||||
|
public static boolean isTableExist(String name) throws InternalServerErrorException {
|
||||||
|
try {
|
||||||
|
String request = "";
|
||||||
|
if (!ConfigBaseVariable.getDBType().equals("sqlite")) {
|
||||||
|
request = """
|
||||||
|
SELECT count(*) AS total
|
||||||
|
FROM information_schema.tables
|
||||||
|
WHERE table_name = ?;
|
||||||
|
LIMIT 1;
|
||||||
|
""";
|
||||||
|
} else {
|
||||||
|
request = """
|
||||||
|
SELECT COUNT(*) AS total
|
||||||
|
FROM sqlite_master
|
||||||
|
WHERE type = 'table'
|
||||||
|
AND name = ?;
|
||||||
|
""";
|
||||||
|
}
|
||||||
|
|
||||||
|
// PreparedStatement ps = entry.connection.prepareStatement("show tables");
|
||||||
|
DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig);
|
||||||
|
PreparedStatement ps = entry.connection.prepareStatement(request);
|
||||||
|
ps.setString(1, name);
|
||||||
|
ResultSet ret = ps.executeQuery();
|
||||||
|
int count = ret.getInt("total");
|
||||||
|
return count == 1;
|
||||||
|
} catch (SQLException ex) {
|
||||||
|
LOGGER.error("Can not check if the table exist SQL-error !!! {}", ex.getMessage());
|
||||||
|
} catch (IOException ex) {
|
||||||
|
LOGGER.error("Can not check if the table exist!!! {}", ex.getMessage());
|
||||||
|
}
|
||||||
|
throw new InternalServerErrorException("Can Not manage the DB-access");
|
||||||
|
}
|
||||||
|
|
||||||
public static String convertTypeInSQL(Class<?> type) throws Exception {
|
public static String convertTypeInSQL(Class<?> type) throws Exception {
|
||||||
if (!ConfigBaseVariable.getDBType().equals("sqlite")) {
|
if (!ConfigBaseVariable.getDBType().equals("sqlite")) {
|
||||||
@ -398,7 +505,7 @@ public class SqlWrapper {
|
|||||||
throw new SQLException("Creating node failed, no ID obtained (1).");
|
throw new SQLException("Creating node failed, no ID obtained (1).");
|
||||||
}
|
}
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
logger.error("Can not get the UID key inserted ... ");
|
LOGGER.error("Can not get the UID key inserted ... ");
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
throw new SQLException("Creating node failed, no ID obtained (2).");
|
throw new SQLException("Creating node failed, no ID obtained (2).");
|
||||||
}
|
}
|
||||||
@ -408,7 +515,7 @@ public class SqlWrapper {
|
|||||||
} else if (primaryKeyField.getType() == long.class) {
|
} else if (primaryKeyField.getType() == long.class) {
|
||||||
primaryKeyField.setLong(data, uniqueSQLID);
|
primaryKeyField.setLong(data, uniqueSQLID);
|
||||||
} else {
|
} else {
|
||||||
logger.error("Can not manage the primary filed !!!");
|
LOGGER.error("Can not manage the primary filed !!!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//ps.execute();
|
//ps.execute();
|
||||||
@ -823,7 +930,7 @@ public class SqlWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static <T> List<T> gets(Class<T> clazz, boolean full) throws Exception {
|
public static <T> List<T> gets(Class<T> clazz, boolean full) throws Exception {
|
||||||
logger.debug("request get {} start @{}", clazz.getCanonicalName(), getCurrentTimeStamp());
|
LOGGER.debug("request get {} start @{}", clazz.getCanonicalName(), getCurrentTimeStamp());
|
||||||
DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig);
|
DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig);
|
||||||
List<T> out = new ArrayList<>();
|
List<T> out = new ArrayList<>();
|
||||||
// real add in the BDD:
|
// real add in the BDD:
|
||||||
@ -917,15 +1024,15 @@ public class SqlWrapper {
|
|||||||
query.append(tableName);
|
query.append(tableName);
|
||||||
query.append(".deleted = false ");
|
query.append(".deleted = false ");
|
||||||
firstField = true;
|
firstField = true;
|
||||||
logger.info("generate the querry: '{}'", query.toString());
|
LOGGER.info("generate the querry: '{}'", query.toString());
|
||||||
logger.info("request get {} prepare @{}", clazz.getCanonicalName(), getCurrentTimeStamp());
|
LOGGER.info("request get {} prepare @{}", clazz.getCanonicalName(), getCurrentTimeStamp());
|
||||||
// prepare the request:
|
// prepare the request:
|
||||||
PreparedStatement ps = entry.connection.prepareStatement(query.toString(), Statement.RETURN_GENERATED_KEYS);
|
PreparedStatement ps = entry.connection.prepareStatement(query.toString(), Statement.RETURN_GENERATED_KEYS);
|
||||||
|
|
||||||
logger.info("request get {} query @{}", clazz.getCanonicalName(), getCurrentTimeStamp());
|
LOGGER.info("request get {} query @{}", clazz.getCanonicalName(), getCurrentTimeStamp());
|
||||||
// execute the request
|
// execute the request
|
||||||
ResultSet rs = ps.executeQuery();
|
ResultSet rs = ps.executeQuery();
|
||||||
logger.info("request get {} transform @{}", clazz.getCanonicalName(), getCurrentTimeStamp());
|
LOGGER.info("request get {} transform @{}", clazz.getCanonicalName(), getCurrentTimeStamp());
|
||||||
|
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
indexAutoClasify = 0;
|
indexAutoClasify = 0;
|
||||||
@ -956,7 +1063,7 @@ public class SqlWrapper {
|
|||||||
out.add((T)data);
|
out.add((T)data);
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.info("request get {} ready @{}", clazz.getCanonicalName(), getCurrentTimeStamp());
|
LOGGER.info("request get {} ready @{}", clazz.getCanonicalName(), getCurrentTimeStamp());
|
||||||
|
|
||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
@ -994,7 +1101,7 @@ public class SqlWrapper {
|
|||||||
throw new SQLException("Creating user failed, no ID obtained (1).");
|
throw new SQLException("Creating user failed, no ID obtained (1).");
|
||||||
}
|
}
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
logger.debug("Can not get the UID key inserted ... ");
|
LOGGER.debug("Can not get the UID key inserted ... ");
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
throw new SQLException("Creating user failed, no ID obtained (2).");
|
throw new SQLException("Creating user failed, no ID obtained (2).");
|
||||||
}
|
}
|
||||||
@ -1138,7 +1245,7 @@ public class SqlWrapper {
|
|||||||
out.append(tableName);
|
out.append(tableName);
|
||||||
out.append("` (");
|
out.append("` (");
|
||||||
boolean firstField = true;
|
boolean firstField = true;
|
||||||
logger.debug("===> TABLE `{}`", tableName);
|
LOGGER.debug("===> TABLE `{}`", tableName);
|
||||||
String primaryKeyValue = null;
|
String primaryKeyValue = null;
|
||||||
for (Field elem : clazz.getFields()) {
|
for (Field elem : clazz.getFields()) {
|
||||||
|
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
package org.kar.archidata.db;
|
package org.kar.archidata.db;
|
||||||
|
|
||||||
|
import org.kar.archidata.SqlWrapper;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
public class DBConfig {
|
public class DBConfig {
|
||||||
|
static final Logger LOGGER = LoggerFactory.getLogger(SqlWrapper.class);
|
||||||
private final String type;
|
private final String type;
|
||||||
private final String hostname;
|
private final String hostname;
|
||||||
private final int port;
|
private final int port;
|
||||||
@ -67,11 +72,20 @@ public class DBConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getUrl() {
|
public String getUrl() {
|
||||||
|
return getUrl(false);
|
||||||
|
}
|
||||||
|
public String getUrl(boolean isRoot) {
|
||||||
if (type.equals("sqlite")) {
|
if (type.equals("sqlite")) {
|
||||||
|
if (isRoot == true) {
|
||||||
|
LOGGER.error("Can not manage root connection on SQLite...");
|
||||||
|
}
|
||||||
if (this.hostname.equals("memory")) {
|
if (this.hostname.equals("memory")) {
|
||||||
return "jdbc:sqlite::memory:";
|
return "jdbc:sqlite::memory:";
|
||||||
}
|
}
|
||||||
return "jdbc:sqlite:" + this.hostname + ".db";
|
return "jdbc:sqlite:" + this.hostname + ".db";
|
||||||
|
}
|
||||||
|
if (isRoot) {
|
||||||
|
return "jdbc:" + this.type + "://" + this.hostname + ":" + this.port + "/?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC";
|
||||||
}
|
}
|
||||||
return "jdbc:" + this.type + "://" + this.hostname + ":" + this.port + "/" + this.dbName + "?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC";
|
return "jdbc:" + this.type + "://" + this.hostname + ":" + this.port + "/" + this.dbName + "?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC";
|
||||||
}
|
}
|
||||||
|
@ -15,12 +15,19 @@ public class DBEntry implements Closeable {
|
|||||||
public Connection connection;
|
public Connection connection;
|
||||||
private static List<DBEntry> stored = new ArrayList<>();
|
private static List<DBEntry> stored = new ArrayList<>();
|
||||||
|
|
||||||
private DBEntry(DBConfig config) throws IOException {
|
private DBEntry(DBConfig config, boolean root) throws IOException {
|
||||||
this.config = config;
|
this.config = config;
|
||||||
connect();
|
if (root) {
|
||||||
|
connectRoot();
|
||||||
|
} else {
|
||||||
|
connect();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DBEntry createInterface(DBConfig config) throws IOException {
|
public static DBEntry createInterface(DBConfig config) throws IOException {
|
||||||
|
return createInterface(config, false);
|
||||||
|
}
|
||||||
|
public static DBEntry createInterface(DBConfig config, boolean root) throws IOException {
|
||||||
if (config.getKeepConnected()) {
|
if (config.getKeepConnected()) {
|
||||||
for (DBEntry elem : stored) {
|
for (DBEntry elem : stored) {
|
||||||
if (elem == null) {
|
if (elem == null) {
|
||||||
@ -30,14 +37,23 @@ public class DBEntry implements Closeable {
|
|||||||
return elem;
|
return elem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DBEntry tmp = new DBEntry(config);
|
DBEntry tmp = new DBEntry(config, root);
|
||||||
stored.add(tmp);
|
stored.add(tmp);
|
||||||
return tmp;
|
return tmp;
|
||||||
} else {
|
} else {
|
||||||
return new DBEntry(config);
|
return new DBEntry(config, root);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void connectRoot() throws IOException {
|
||||||
|
try {
|
||||||
|
connection = DriverManager.getConnection(config.getUrl(true), config.getLogin(), config.getPassword());
|
||||||
|
} catch (SQLException ex) {
|
||||||
|
throw new IOException("Connection db fail: " + ex.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public void connect() throws IOException {
|
public void connect() throws IOException {
|
||||||
try {
|
try {
|
||||||
connection = DriverManager.getConnection(config.getUrl(), config.getLogin(), config.getPassword());
|
connection = DriverManager.getConnection(config.getUrl(), config.getLogin(), config.getPassword());
|
||||||
|
@ -35,6 +35,14 @@ public class MigrationEngine {
|
|||||||
* @return String represent the last migration. If null then no migration has been done.
|
* @return String represent the last migration. If null then no migration has been done.
|
||||||
*/
|
*/
|
||||||
public String getCurrentVersion() {
|
public String getCurrentVersion() {
|
||||||
|
// TODO: check if the DB exist :
|
||||||
|
if (SqlWrapper.isTableExist("migration")) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if migration table exist:
|
||||||
|
|
||||||
|
// get the current migration
|
||||||
try {
|
try {
|
||||||
List<MigrationModel> data = SqlWrapper.gets(MigrationModel.class, false);
|
List<MigrationModel> data = SqlWrapper.gets(MigrationModel.class, false);
|
||||||
if (data == null) {
|
if (data == null) {
|
||||||
|
Loading…
Reference in New Issue
Block a user