0

これまでのところ、私のコードは次のとおりです。

try{

    stmt = con.createStatement();

    String sql = "SELECT AVG(WPM) FROM Attempts WHERE Username = ('" + Login.loginUsername + "');

    rs = stmt.executeQuery(sql);

    int add1 = rs.getInt("AVG(WPM)");

        System.out.println("avg temp is " + add1);
    }

    catch (SQLException err) {
        System.out.println(err.getMessage());
    }

私のデータベースは次のように設定されています:

  • (PK) 'AttemptID' Integer AutoIncrement

  • 「WPM」整数

  • (FK) 'ユーザー名' Varchar(45)

各ユーザー名に基づいて平均 WPM を返すようにします。ラインを変えたら

int add1 = rs.getInt("AVG(WPM)"); 

String add1 = rs.getString("AVG(WPM)");

違いはありません。助けてください。

4

4 に答える 4

1

試してみてくださいdouble add1 = rs.getDouble(1);

説明:rs.get...(1)列の名前ではなく、列のインデックスに基づいて列を取得します。選択で関数を使用すると、データベースがこれを変更する可能性があります。また、AVG は double を返すため、int の代わりに double を使用します。

于 2012-12-12T01:39:09.633 に答える
1

ステートメントrs.next()を忘れているようです...

于 2012-12-12T01:41:35.890 に答える
0
  1. あなたのSQLにはSQLインジェクションがあります..

  2. AVG関数の結果は、floatまたはdoubleになる可能性があります。

float f = rs.getFloat(1); //

于 2012-12-12T01:44:32.890 に答える
0

select ステートメントに group by 句を追加するだけでよいと思います。Select ステートメントは次のようになります。 select avg(WPD) from Attempts group by Usename where Username = ... これにより、ユーザーごとの平均 WPD が正しく計算されます。あなたは平均を使用しているので、返される値はおそらく double であると思います。その場合は、rs.getDouble を使用する必要があります。クエリでは単一の値のみが選択されるため、列のインデックスを使用してアクセスできます。呼び出しは rs.getDouble(0) になります。この回答がお役に立てば幸いです。

がんばれ、ニコライ

于 2012-12-12T01:47:49.540 に答える