Решение, которое сработало для меня ниже:
Use your_database_name;
SOURCE path_to_db_sql_file_on_your_local;
Я не думаю, что есть встроенный способ сделать это без перехвата исключений. Вместо этого вы можете использовать что-то вроде этого:
public static MyEnum asMyEnum(String str) {
for (MyEnum me : MyEnum.values()) {
if (me.name().equalsIgnoreCase(str))
return me;
}
return null;
}
Изменить: Как отмечает Джон Скит, values ()
работает путем клонирования частного резервного массива каждый раз, когда он вызывается. Если производительность критична, вы можете вызвать values ()
только один раз, кэшировать массив и перебирать его.
Кроме того, если ваше перечисление имеет огромное количество значений, можно использовать альтернативу карты Джона Скита. вероятно, будет работать лучше, чем любая итерация массива.
Если мне нужно это сделать, Иногда я создаю Set
имен или даже свою собственную Map
- тогда вы можете просто проверить это.
Пара очков стоит примечание:
values ()
- он должен каждый раз создавать и заполнять новый массив. Чтобы перебрать все элементы, используйте EnumSet. allOf
, что намного эффективнее для перечислений без большого количества элементов. Пример кода:
import java.util.*;
enum SampleEnum {
Foo,
Bar;
private static final Map<String, SampleEnum> nameToValueMap =
new HashMap<String, SampleEnum>();
static {
for (SampleEnum value : EnumSet.allOf(SampleEnum.class)) {
nameToValueMap.put(value.name(), value);
}
}
public static SampleEnum forName(String name) {
return nameToValueMap.get(name);
}
}
public class Test {
public static void main(String [] args)
throws Exception { // Just for simplicity!
System.out.println(SampleEnum.forName("Foo"));
System.out.println(SampleEnum.forName("Bar"));
System.out.println(SampleEnum.forName("Baz"));
}
}
Конечно, если у вас всего несколько имен, это, вероятно, излишек - решение O (n) часто выигрывает над решением O (1), когда n достаточно мало. Вот другой подход:
import java.util.*;
enum SampleEnum {
Foo,
Bar;
// We know we'll never mutate this, so we can keep
// a local copy.
private static final SampleEnum[] copyOfValues = values();
public static SampleEnum forName(String name) {
for (SampleEnum value : copyOfValues) {
if (value.name().equals(name)) {
return value;
}
}
return null;
}
}
public class Test {
public static void main(String [] args)
throws Exception { // Just for simplicity!
System.out.println(SampleEnum.forName("Foo"));
System.out.println(SampleEnum.forName("Bar"));
System.out.println(SampleEnum.forName("Baz"));
}
}
Я не знаю, почему кто-то сказал вам, что перехват исключений времени выполнения - это плохо.
Используйте valueOf
и перехват IllegalArgumentException
отлично подходит для преобразования / проверка строки на перечисление.