0

私はJSONdbからデータを取得するために使用していますが、データは次のようになります。JSONオブジェクトをdbに保存したので、DBデータは次のようなものです

{"column":"\"someString\".\"Folder\".\"FolderCentury\"","ascending":true}

JSONそして、そのオブジェクトのため、データを取得するために以下のコードを書きました

    JSONObject jsonObj = geodata.getJSONObject(i);
    TableField<Record, T> columnName = (TableField<Record, T>) jsonObj.get("column");

しかし、ここに問題があります

 jsonObj.get("column");

この行は、次のような文字列を返します

 (java.lang.String) "someString"."Folder"."FolderCentury"

しかし、スロー例外をキャストしているとき

java.lang.ClassCastException: java.lang.String cannot be cast to org.jooq.TableField

StringどうすればTableFieldオブジェクトに変更できるか知りたいですか? TableField インターフェイス

4

1 に答える 1

1

JVM は、jOOQTableFieldを JSON 文字列リテラルにエンコードすると、その逆も同様に自動化されることを意味することを「魔法のように」認識すると思うかもしれません。明らかに、これは当てはまりません。自分でいくつかの作業を行う必要があります。

私が見ることができる最も簡単な方法は、エンコーディングと実際のTableFieldインスタンスの間にルックアップ マップを保持することです。

Map<String, TableField<?>> lookup = new HashMap<>();

// SOME_STRING is the generated schema instance
for (Table<?> table : SOME_STRING.getTables()) {
    for (Field<?> field : table.fields()) {

        // Replace "toString()" by an actual SQL rendering call, if you prefer
        lookup.put(field.toString(), (TableField<?>) field);
    }
}
于 2013-08-28T08:21:14.113 に答える