@Override
	public boolean initialize() {
		if (isinit) {
			return true;
		}
		try {
			Configuration config = new Configuration();
			initializeDatabase(config);
			info = config.info;
			vectorFactory.set(config.weightfactory, config.idflookup, config.info.settings);
		}
		catch (CancelledSQLException e) {
			status = Status.Error;
			lasterror = new BSimError(ErrorCategory.AuthenticationCancelled,
				"Authentication cancelled by user");
			return false;
		}
		catch (SQLException err) {
			status = Status.Error;
			// Pooled connections add an additional wrapper
			Throwable cause = err.getCause();
			if (cause == null) {
				cause = err;
			}
			String msg = cause.getMessage();
			if (msg.contains("already in use:")) {
				lasterror = new BSimError(ErrorCategory.Initialization,
					"Database already in use by another process");
			}
			else if (msg.contains("authentication failed") ||
				msg.contains("requires a valid client certificate")) {
				lasterror = new BSimError(ErrorCategory.Authentication,
					"Could not authenticate with database");
			}
			else if (msg.contains("does not exist") && !msg.contains(" role ")) {
				lasterror = new BSimError(ErrorCategory.Nodatabase, cause.getMessage());
			}
			else {
				lasterror = new BSimError(ErrorCategory.Initialization,
					"Database error on initialization: " + cause.getMessage());
			}
			return false;
		}
//		catch (NoDatabaseException err) {
//			info = null;
//			lasterror = new Error(ErrorCategory.Nodatabase,
//				"Database has not been created yet: " + err.getMessage());
//
//			isinit = true;
//			status = Status.Ready;
//			return true;
//		}

		status = Status.Ready;
		isinit = true;
		return true;
	}
Create a new database

@param config is the configuration information for the database
@throws SQLException if a database connection cannot be established
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/AbstractSQLFunctionDatabase.java