package org.openlca.core.database;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class DbUtils {
private DbUtils() {
}
/**
* Returns true if the given name is a valid database name. An valid name
* must be at least 4 characters long and can only contain only characters
* that are valid for identifiers. Additionally, reserved words like 'mysql'
* or 'test' are not allowed.
*/
public static boolean isValidName(String dbName) {
if (dbName == null || dbName.length() < 4)
return false;
if (!isIdentifier(dbName))
return false;
if (dbName.equalsIgnoreCase("mysql"))
return false;
else
return true;
}
private static boolean isIdentifier(String s) {
if (s.length() == 0 || !Character.isJavaIdentifierStart(s.charAt(0)))
return false;
for (int i = 1; i < s.length(); i++)
if (!Character.isJavaIdentifierPart(s.charAt(i)))
return false;
return true;
}
/**
* Returns the version of the given database, or -1 if an error occured.
*/
public static int getVersion(IDatabase database) {
try {
final int[] version = new int[1];
NativeSql.on(database).query("select version from openlca_version",
new NativeSql.QueryResultHandler() {
@Override
public boolean nextResult(ResultSet result)
throws SQLException {
version[0] = result.getInt(1);
return true;
}
});
return version[0];
} catch (Exception e) {
Logger log = LoggerFactory.getLogger(DbUtils.class);
log.error("failed to get the database version", e);
return -1;
}
}
}