2017-08-03 13 views
0

mysql dbから1行を取得したいと思います。しかし、私のプログラムはdbからすべての行を出力します。私は何が間違っているのか分かりません。私たちを手伝ってくれますか?ArrayListはデータベースからのすべての結果を表示します

public class ScreenBalance { 

// show all records 
public static ArrayList<String> showOnScreenBalance() throws Exception { 
    LoginVerification.login(); 

    try { 
     Connection con = ConnectionDB.getConnection(); 
     PreparedStatement statement = con.prepareStatement("SELECT ClientID, Money FROM BankDB.Info"); 

     ResultSet result = statement.executeQuery(); 

     ArrayList<String> array = new ArrayList<String>(); 
     System.out.print("\nID\t\tAmount\t\n"); 
     while (result.next()) { 
      System.out.print(result.getString("ClientID")); 
      System.out.print("\t"); 
      System.out.print(result.getString("Money")); 
      System.out.print("\t"); 
      array.add(result.getString("Money")); 
     } 
     System.out.println(); 
     return array; 
    } catch (Exception e) { 
     System.out.println(e); 
    } 
    return null; 
} 

以下は、私が1つの行を選択することを望んでいた私の2番目のクラスです。しかし、正常に動作しません。私はclientID +クライアントのパスワードを入力しているので、なぜ私のメソッド 'showOnScreenBalance'はそれを見ないのですか?

public class LoginVerification { 

private static boolean loggedIn = false; 

    public static void login() throws Exception { 

     System.out.println("ATM Machine v 1.0, Welcome user."); 
     if(loggedIn){ 
      //do nothing, user already logged in 
      return; 
     } 

    Scanner input = new Scanner(System.in); 
    System.out.println("Please enter USER ID:"); 
    String userId = input.nextLine(); 
    System.out.println("Please enter PIN CODE:"); 
    String pass = input.nextLine(); 

    try { 
     Connection con = ConnectionDB.getConnection(); 
     String sql = "SELECT COUNT(*) FROM Info WHERE ClientID = ? AND ClientPass = ?"; 

     PreparedStatement posted = con.prepareStatement(sql); 
     posted.setString(1, userId); 
     posted.setString(2, pass); 
     ResultSet resultSet = posted.executeQuery(); 
     resultSet.next(); 
     int rowCount = resultSet.getInt(1); 

     if (rowCount == 1) { 
      loggedIn = true; 
      System.out.println("LOGIN SUCCESSFUL"); 
      Helper.showMainMenu(); 

     } else { 
      loggedIn = false; 
      System.out.println("#LOGIN UNSUCCESSFUL, WRONG LOGIN OR PASSWORD"); 

      System.out.println("\nTry again? \n1) yes \n2) no [quit]"); 
      int choice = input.nextInt(); 
      if (choice == 1) { 
       login(); 
      } else { 
       System.exit(0); 
      } 
     } 
     con.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

}

+3

このクエリは、テーブル内のすべての行を選択します。何が起こると思いますか? – Kayaman

+0

2番目のクラスは、(ファーストクラスの)変数を2番目のクラスに渡していないため、その変数を表示しません。メソッド 'showOnScreenBalance(String userid)'を作成し、それをwhere句で使用して、正しいユーザーの残高を選択することができます。 – Kayaman

+0

うわーありがとう、それは私が探しているものです:)あなたは私のshowOnScreenBalanceメソッドを修正していただけますか? – damianm

答えて

2

あなたが印刷されるデータベーステーブルのどの行を定義しなければなりません。これを行うには、SQL文でWHERE句を定義します。

PreparedStatement statement = con.prepareStatement("SELECT ClientID, Money FROM BankDB.Info WHERE some_condition"); 

例えば:1とする結果の数を

PreparedStatement statement = con.prepareStatement("SELECT ClientID, Money FROM BankDB.Info WHERE ClientID='some_value'"); 

、条件はまた、そのような方法を設計しなければならない場合(例えば、列値を持つ1行のみが存在することができる).Otherwiseそこ。プログラムがあなたの期待される結果を知る方法はありません。

希望します。

関連する問題