1

我编写此代码是为了显示具有最高薪水的员工的姓名,但是当输出不正确时,它显示为 null 而不是“mmm kkk”!虽然我填满了表格,但这是内容:

这里

这是我的代码,任何人都可以帮助我吗?:(

 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,因此不会发生此迭代。您要么在一个循环中执行此操作,要么再次执行查询。但是,正如我所说,使用正确的 sql 语句使用max.

于 2013-06-19T09:50:30.290 回答
3

您更改查询以在单个查询中获取所有最高工资的人

PreparedStatement st = con.prepareStatement("
select fName, lName, salary from task4Table where salary = 
(select max(salary) from task4Table)");
ResultSet r1 = st.executeQuery();

迭代这个结果集。

于 2013-06-19T10:05:52.263 回答
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 回答
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 回答