1

最高給与の従業員の名前を表示するためにこのコードを書きましたが、出力が正しくない場合、「mmm kkk」ではなくnullが表示されました!! 私はテーブルを埋めましたが、これは内容です:

ここ

これは私のコードです。:(

 public static void displayMaxSalary() throws ClassNotFoundException, SQLException

{   
    int size=0;
    int count=0;
    String maxSalary=null;
    Class.forName("com.mysql.jdbc.Driver");
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost/task4DB?"
              + "user=root&password=123");
    PreparedStatement st = con.prepareStatement("select * from task4Table ");
    ResultSet r1=st.executeQuery();

      while (r1.next()) {

          size++;
      }


      int salaries[]=new int[size];
      String Names[]=new String[size];

       while (r1.next()) {


          salaries[count]= r1.getInt("salary");
          Names[count]=  r1.getString("fName")+""+r1.getString("lName");
          count++;
      }

       for(int i=1;i< salaries.length;i++)

       {
           if(salaries[i]>salaries[i-1])
           {
               maxSalary= Names[i];
           }

       }


     System.out.println("The name of employee who has the higher salary is :");
     System.out.println( maxSalary);



} //end-displayMaxSalary.
4

4 に答える 4

5

次の SQL ステートメントを試してください。

select fName, max(salary) from task4table

コードの問題:

このループでは、結果セットの最後まで繰り返します。

while (r1.next()) {
    size++;
}

そして、もう一度繰り返したいとき

while (r1.next()) {
    salaries[count]= r1.getInt("salary");
    Names[count]=  r1.getString("fName")+""+r1.getString("lName");
    count++;
}

r1.next()が返さfalseれるため、この反復は発生しません。1 つのループで実行するか、クエリを再度実行します。しかし、私が言ったように、適切な sql ステートメントを使用してそれにmax.

于 2013-06-19T09:50:30.290 に答える
2

あなたのコードには多くの問題がありますが、差し迫った問題は次のとおりです。最大値を正しく見つけていません。

私の上記の答えが示すように、正しい方法はSQLを使用することです。自分の思い通りに進みたい場合は、次のことを試してください。

int maxSalary = Integer.MIN_VALUE;
for (int i = 0; i < salaries.length; i++) {
    if (salaries[i] > maxSalary) {
        maxSalary = salaries[i];
    }
}

あなたのコーディングスタイルは良くありません。中括弧の配置、スペース、空白行などについて一貫性を保つ必要があります。また、Sun Java コーディング規約を覚えて従う必要があります。

于 2013-06-19T09:50:47.920 に答える
2

次のコードを試してください:

public static void displayMaxSalary() throws ClassNotFoundException, SQLException

{   

    String maxSalary;
    Class.forName("com.mysql.jdbc.Driver");
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost/task4DB?"
              + "user=root&password=123");
    PreparedStatement st = con.prepareStatement("select * from task4Table order by salary desc limit 1");
    ResultSet r1=st.executeQuery();

     if(r1.next()) {

           maxSalary =  r1.getString("fName")+""+r1.getString("lName");
      }

     System.out.println("The name of employee who has the higher salary is :");
     System.out.println( maxSalary);


} //end-displayMaxSalary.
于 2013-06-19T10:21:59.160 に答える