5

私はjOOQを使用してMySQLのIDを取得していますsmallint unsigned primary key auto_increment

public List<Integer> getID() {
   Factory sql = new Factory(Database.getInstance().connect(), SQLDialect.MYSQL);
   return (List<Integer>) sql.select().from("users").fetch().getValues("id_users");
}

そしてエラーになります

org.jooq.tools.unsigned.UShort cannot be cast to java.lang.Integer

ここで彼らは、smallintunsignedをintにキャストする必要があると書いています。

編集 方法は

public List<UShort> getID() {
    Factory sql = new Factory(Database.getInstance().connect(), SQLDialect.MYSQL);
    return (List<UShort>) sql.select().from("users").fetch().getValues("id_users");
}

そして、ループ内の結果はintにキャストする必要があります。

4

4 に答える 4

3

UShortはそのクラスを継承しないため、整数にキャストすることはできません。UShort.intValue()整数を取得するために使用する必要があると思います。

于 2012-11-23T11:19:09.157 に答える
1

usersがシステムテーブルであるため、タイプを変更できない場合は、に変換する必要がありますInteger。それ以外の場合は、テーブルを変更してJavaTINYINT(4)タイプを提供できます。Short

于 2012-11-23T11:27:55.627 に答える
1

javalangはそれを直接キャストすることはできません。中間ステップが必要です。UShortval.intValue()のようなもの
クエリの結果を繰り返し、ushortval.intValue()の結果を追加する新しいリストを作成します

于 2012-11-23T11:17:30.680 に答える
0

jOOQは、型キャストや変換を行うことができます。次にいくつかの例を示します。

Result<?> result = sql.select().from("users").fetch();

// Without any type information
List<?> list1 = result.getValues("id_users");

// Using your implicit knowledge about id_users being an unsigned short:
@SuppressWarnings("unchecked")
List<UShort> list2 = (List<UShort>) result.getValues("id_users");

// Using jOOQ's code-generator for type-safe field access:
List<UShort> list3 = result.getValues(USERS.ID_USERS);

// Using jOOQ's conversion features to convert UShort into whatever you prefer
List<Integer> list4a = result.getValues("id_users", Integer.class);
List<Integer> list4b = result.getValues(USERS.ID_USERS, Integer.class);

最後の例は、おそらくあなたが探していたものです。

ここで関連するJavadocを参照してください。

Sybase ASEマニュアルへのリンクは、Javaキャスト式ではなく、SQLキャスト操作を参照していることに注意してください。それがあなたを誤解させたのかもしれません...

于 2012-11-23T14:09:25.473 に答える