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;
}
}
:近いあなたのような何かを行うことができた後、あなたがしているものに取得しようとする
EDIT
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 enumを宣言する方がよいでしょう。私は誰もenumを宣言していないのです前に別のenum ...私はそれがほとんど好きです。
'CREATE TABLE'を返すために' SQL.table.getCommand(Command.CREATE) 'のような呼び出しで特定のCommandにアクセスしようとするとちょっとファンキーになりますか? –
ありがとうございました... –
いつも使ってます!私は3つの入れ子になったenumのケースを持っています。コードの明確さと使い方は素晴らしいです! – marcolopes
ホイールを再発明する必要はありません。 HibernateまたはmyBatisを使用するだけです。 – DwB
@DwBサードパーティライブラリを使用することは、常に望ましい選択ではありません。時には、彼らはあなたが取り組んでいるプロジェクトのために過剰です。 –
@PavlosGeorgiou私は私の答えに二次的な解決策を追加しました。それはenum内で列挙していないのに、あなたが求めているものに少し近いです。 –