Java에서 SQL 쿼리를 열거 형 내에 열거 형을 만들려고합니다. 예를 들어 table.create
이라고 말하고 CREATE TABLE 또는 database.create
을 반환하면 CREATE DATABASE가 반환됩니다. 어떻게해야합니까?열거 형 내의 열거 형
enum SQL {
table("ALTER,CREATE"),
database("CREATE");
}
Java에서 SQL 쿼리를 열거 형 내에 열거 형을 만들려고합니다. 예를 들어 table.create
이라고 말하고 CREATE TABLE 또는 database.create
을 반환하면 CREATE DATABASE가 반환됩니다. 어떻게해야합니까?열거 형 내의 열거 형
enum SQL {
table("ALTER,CREATE"),
database("CREATE");
}
열거 형 내에서 열거 형으로 만드는 이유는 무엇입니까? 이 예에 Table.java
public enum Table {
CREATE("CREATE TABLE"),
ALTER("ALTER TABLE");
private String cmd;
Table(String cmd) {
this.cmd = cmd;
}
@Override
public String toString() {
return cmd;
}
}
Database.java
public enum Database {
CREATE("CREATE DATABASE");
private String cmd;
Database(String cmd) {
this.cmd = cmd;
}
@Override
public String toString() {
return cmd;
}
}
, System.out.println(Table.CREATE);
인쇄 CREATE TABLE
. IMO, 읽고 이해하기 조금 쉬울 것
String query = Table.CREATE + "(Column1 " + DbType.INTEGER + " " + Column.UNIQUE + " " + Column.PRIMARY_KEY + ")";
: 당신과 같은 코드를 생성 할 수 있습니다 becuase
이
또한 readabilty에 도움이됩니다. 당신이 호출 할 수 있습니다public enum SQL {
TABLE("TABLE", SQL.CREATE_FLAG | SQL.ALTER_FLAG),
DATABASE("DATABASE", SQL.CREATE_FLAG);
public static final int CREATE_FLAG = 1;
public static final int ALTER_FLAG = 2;
public static final String CREATE_STRING = "CREATE";
public static final String ALTER_STRING = "ALTER";
public static final String INVALID = "INVALID";
private String name;
private boolean create;
private boolean alter;
SQL(String name, int flags) {
create = (flags & CREATE_FLAG) != 0;
alter = (flags & ALTER_FLAG) != 0;
this.name = name;
}
public String create() {
if (create)
return CREATE_STRING + " " + name;
else
return INVALID;
}
public String alter() {
if (alter)
return ALTER_STRING + " " + name;
else
return INVALID;
}
}
:
System.out.println(SQL.TABLE.create()); // CREATE TABLE
System.out.println(SQL.TABLE.alter()); // ALTER TABLE
System.out.println(SQL.DATABASE.alter()); // INVALID
System.out.println(SQL.DATABASE.create()); // CREATE DATABASE
을 열거 정의
편집하는 것은
것은 당신이 뭔가를 할 수 계신에 가까이하려고합니다 enum 내 :
public static enum SQL {
table(Command.ALTER,Command.CREATE),
database(Command.CREATE);
public static enum Command {
CREATE,
ALTER
}
private final Command[] commands;
private SQL (Command... commands) {
this.commands = commands;
}
public Command[] getCommands() {
return commands;
}
}
수 있습니다 이렇게, 고유 한 클래스/파일에서 명령 열거 형을 선언하는 것이 좋습니다. 나는 누군가 enum을 선언하는 것을 보지 못했다 다른 enum 전에 ... 나는 거의 그것을 좋아한다.
'CREATE TABLE'을 반환하기 위해'SQL.table.getCommand (Command.CREATE)'와 같은 호출을 사용하여 특정 Command에 접근하려고 조금 펑키 해 보시겠습니까? –
대단히 고마워 ... –
항상 사용하고 있습니다! 3 개의 중첩 enum 경우가 있습니다. 코드 선명도와 사용은 놀랍습니다! – marcolopes
바퀴를 재발 명할 필요가 없습니다. Hibernate 또는 myBatis를 사용하십시오. – DwB
@DwB 제 3 자 라이브러리를 사용하는 것이 항상 바람직한 선택은 아닙니다. 때로는 그들이 작업하고있는 프로젝트에 과도 함이 있습니다. –
@ PavlosGeorgiou 제 답변에 대한 제 2의 해결책을 추가했습니다. 열거 형 안에 열거되지는 않지만 묻고있는 것에 더 가깝습니다. –