[英]how to retrieve data from database correctly in java
我編寫此代碼是為了顯示具有最高薪水的員工的姓名,但是當輸出不正確時,它顯示為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.
試試這個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
因此不會發生此迭代。 您可以一次循環執行一次,也可以再次執行查詢。 但是,正如我所說,使用max
使用適當的sql語句對其進行處理。
您更改查詢以在單個查詢中獲得所有最高薪水人員
PreparedStatement st = con.prepareStatement("
select fName, lName, salary from task4Table where salary =
(select max(salary) from task4Table)");
ResultSet r1 = st.executeQuery();
迭代此結果集。
您的代碼有很多錯誤,但是這是您的直接問題:您找不到正確的最大值。
正確的方法是使用SQL,正如我上面的答案所示。 如果您堅持要走自己的路,請嘗試以下操作:
int maxSalary = Integer.MIN_VALUE;
for (int i = 0; i < salaries.length; i++) {
if (salaries[i] > maxSalary) {
maxSalary = salaries[i];
}
}
您的編碼風格不好。 您需要在花括號位置,空格,空白行等方面保持一致。還應該記住並遵循Sun Java編碼約定。
嘗試以下代碼:
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.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.