2017-11-21 13 views
-1
public static ArrayList<User_Database> getUsername() { 

    ArrayList<User_Database> list_Username = new ArrayList<User_Database>(); 
    try { 
     Class.forName(driver); 
     String sql = "SELECT user_name FROM users"; 
     Connection connect = DriverManager.getConnection(url, user, password); 
     Statement state = connect.createStatement(); 
     ResultSet rs = state.executeQuery(sql); 
     while (rs.next()) { 
      String user_name = rs.getString("user_name"); 
      User_Database userDB = new User_Database(user_name); 
      list_Username.add(userDB); 
      System.out.printf(" %s \n", user_name); 
     } 
     rs.close(); 
    } catch (SQLException e) { 
     System.out.println(e.getMessage()); 
    } catch (ClassNotFoundException e) { 
     System.out.println(e.getMessage()); 
    } 
    return list_Username; 
} 

public static void createNewUser(User_Database us) { 
    getAllUser(); 
    try { 
     Class.forName(driver); 
     Connection connect = DriverManager.getConnection(url, user, password); 
     Statement state = connect.createStatement(); 
     String sql = "INSERT INTO users VALUES (0, '" + us.user_name + "' , '" + us.user_password + "' , '" 
       + us.email + "') "; 
     if (getAllUser().equals(us.user_name)) { 
      System.out.println("Username not available"); 
     } else { 
      state.executeUpdate(sql); 
      state.close(); 
      System.out.println("Insert Database Success"); 
     } 
    } catch (SQLException e) { 
     System.out.println(e.getMessage()); 
    } catch (ClassNotFoundException e) { 
     System.out.println(e.getMessage()); 
    } 
} 
+4

あなたのコードにあなたの心を入れてください。 –

+0

私はちょうどamaturだと教えてください –

答えて

0

あなたはgetAllUser()に電話しています。代わりにgetUsername()を呼び出すとします。これはここに表示され、ArrayList<User_Database>のDBにあるすべてのユーザー名を返すメソッドです。

if (getAllUser().equals(us.user_name))を実行すると、ArrayListとStringを比較しようとしていますが、これは間違っています。してください、怒鳴るあなたのコードに修正を見つける:

public static void createNewUser(User_Database us) { 
    try { 
     Class.forName(driver); 
     Connection connect = DriverManager.getConnection(url, user, password); 
     Statement state = connect.createStatement(); 
     String sql = "INSERT INTO users VALUES (0, '" + us.user_name + "' , '" + us.user_password + "' , '" 
       + us.email + "') "; 

     boolean isUnique = true; 

     for(User_Database user: getUsername()) { 
      if(user.user_name.equals(us.user_name)) { 
       isUnique = false; 
       break; 
      } 
     } 

     if (!isUnique) { 
      System.out.println("Username not available"); 
     } else { 
      state.executeUpdate(sql); 
      state.close(); 
      System.out.println("Insert Database Success"); 
     } 
    } catch (SQLException e) { 
     System.out.println(e.getMessage()); 
    } catch (ClassNotFoundException e) { 
     System.out.println(e.getMessage()); 
    } 
} 

その他注意事項

  • 例えば、トライcatchブロックの外にあなたの文を閉じます最終的にブロック内にある。このようにして、例外が発生してもそれが閉じられるようにします。
  • 接続を閉じることも忘れないでください。
  • DBに重大な問題が発生する可能性があるため、ユーザーからの情報を直接入力しないようにしてください(例:SQL Injection)。 thisを参照し、代わりにPreparedStatementを使用してください。

もう一つの重要な考慮事項:

  • あなたはユーザ名の一意性をチェックしているので、ArrayListのは、あなたが望むものを達成するために(パフォーマンスの面で)最高ではないかもしれない、あなた以来あなたのDBにすでにユーザ名があるかどうかをチェックしたいときにそれを通過しなければなりません(O(N))。代わりに、すべてのユーザー名を取得してHashSetに入れてみてください。セットでは、あなたはそれにユーザー名addしようとする必要があります。ユーザー名が一意の場合はtrue、既にセット内にある場合はfalseを返します(O(1))。

希望しました。

関連する問題