我想在java中的sql查询的枚举中创建一个枚举。例如,我想说table.create
,它会返回CREATE TABLE或database.create
,它会返回CREATE DATABASE。我怎样才能做到这一点?enum中的枚举
enum SQL {
table("ALTER,CREATE"),
database("CREATE");
}
我想在java中的sql查询的枚举中创建一个枚举。例如,我想说table.create
,它会返回CREATE TABLE或database.create
,它会返回CREATE DATABASE。我怎样才能做到这一点?enum中的枚举
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
。
这也将有助于readabilty监守你可以产生类似的代码:
String query = Table.CREATE + "(Column1 " + DbType.INTEGER + " " + Column.UNIQUE + " " + Column.PRIMARY_KEY + ")";
这将是一个有点易于阅读和理解,IMO。
编辑
,去做你,你可以做这样的事情后,亲近:
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
定义枚举在枚举中:
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;
}
}
虽然你可以这样做,最好是在它自己的类/文件中声明Command枚举。我还没有见过任何人在之内声明枚举之前的其他枚举......我几乎喜欢它。
虽然尝试访问特定的命令有点时髦,但像'SQL.table.getCommand(Command.CREATE)'这样的调用返回'CREATE TABLE'? –
非常感谢... –
我一直都在使用它!我有3个嵌套枚举的情况。代码清晰度和使用是惊人的! – marcolopes
没有必要重新发明轮子。只需使用Hibernate或myBatis – DwB
@DwB使用第三方库并不总是一个理想的选择。有时候,他们对于你正在开发的项目来说太过分了。 –
@PavlosGeorgiou我在我的答案中添加了第二个解决方案,它与您所要求的内容稍微接近,但仍未在枚举中枚举。 –