2016-04-18 4 views
1

ユーザーが初めてプラットフォームにログインしたときに選択しようとしています。すべてのユーザーが1日に複数回プラットフォームに参加することができ、初めての選択に問題があります。各ユーザーの毎日の最初のログイン時刻を選択してください

データベースアクセスクラス:

package poin; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 
import java.util.ArrayList; 
import java.util.List; 

public class DataBase { 
    Connection conn ; 
    Statement stmt; 
    List<Join> list = new ArrayList<Join>(); 

    public DataBase(){ 
     super(); 
    } 

    public List<Join> getCard() throws Exception { 

     try{ 
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
      conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;user=****;password=*******;database=********"); 

      stmt = conn.createStatement(); 

      String sql = "SELECT [Id] ,[Last Name] ,[First Name],[Field Time] FROM [******].[dbo].[Jointur] order by [Field Time]"; 

      ResultSet rs = stmt.executeQuery(sql); 

      //STEP 5: Extract data from result set 
      //rs.beforeFirst(); 
      //rs.next(); 
      //Join obj =new Join(); FAUTE CAR NOUS AVONS CR2ER UN SEUL OBJET POUR TOUTE ARRAY LIST IL FAUT ETRE A L INTERIEUR DE LA BOUCLE VOIR LA BOUCLE 

      while(rs.next()) 
      { 
       Join obj =new Join();// 
       //Retrieve by column name 
       obj.setCardHolderId(rs.getInt("ID")); 

       obj.setNom(rs.getString("Last Name")); 
       obj.setPrenom(rs.getString("First Name")); 

       obj.setFieldTime(rs.getDate("Field Time")); 
       obj.setTimestamp(rs.getTimestamp("Fiel Time")); 

       list.add(obj); 
      }      

      rs.close(); 
      stmt.close(); 
      conn.close(); 
      } 
      catch (ClassNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      return list; 
    } 
} 

クラスに参加しましょう。

package poin; 

import java.sql.Timestamp; 
import java.util.Date; 

public class Join { 

    private int cardHolderId; 
    private String Nom; 
    private String Prenom; 
    private Date fieldTime; 
    private Timestamp timestamp; 

    public Timestamp getTimestamp() { 
     return timestamp; 
    } 

    public void setTimestamp(Timestamp timestamp) { 
     this.timestamp = timestamp; 
    } 

    public Join() { 
     super(); 
    } 

    public int getCardHolderId() { 
     return cardHolderId; 
    } 

    public void setCardHolderId(int cardHolderId) { 
     this.cardHolderId = cardHolderId; 
    } 

    public String getNom() { 
     return Nom; 
    } 

    public void setNom(String nom) { 
     Nom = nom; 
    } 

    public String getPrenom() { 
     return Prenom; 
    } 

    public void setPrenom(String prenom) { 
     Prenom = prenom; 
    } 

    public Date getFieldTime() { 
     return fieldTime; 
    } 

    public void setFieldTime(Date fieldTime) { 
     this.fieldTime = fieldTime; 
    } 
} 

クラスTest::このクラスは、ArrayListの中に挿入したオブジェクトの種類が含まれているクラスは、メイン

package poin; 

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.GregorianCalendar; 
import java.util.Date; 
import java.util.Calendar; 
import java.util.Iterator; 
import java.util.List; 

public class Test { 

    static Date dateDebut; 
    static Date dateFin; 

    /** 
    * @param args 
    * @throws ParseException 
    */ 
    public static void main(String[] args) throws ParseException { 
     String dateEntre = "2016-03-03"; 
     String dateF  = "2016-03-03"; 

     SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd"); 

     dateDebut= ft.parse(dateEntre); 
     dateFin=ft.parse(dateF); 

     // TODO Auto-generated method stub 
     DataBase obj = new DataBase(); 

     List<Join> list = new ArrayList<Join>(); 
     List<Join> result = new ArrayList<Join>(); 

     try { 
      list=obj.getCard(); 
      //iterateur pour la liste extraite de la base de donnée 
      Iterator<Join> it=result.iterator(); 

      //gregorian calendrier 
      GregorianCalendar cal = new GregorianCalendar(); 
      cal.setTime(dateDebut); 

      //dernier element de la liste: base de donnée 

      Join obj2 = list.get(list.size()-1); 

      // dernier identifiant de la carte dans la table 
      int dernId = obj2.getCardHolderId(); 
      result.add(list.get(0)); 

      while(!cal.getTime().after(dateFin)){ 

       for (Join j : list){ 
        //System.out.println(cal.getTime()); 
        //Join o = it.next(); 
        //boolean o2 = result.add(o); 

        if(j.getFieldTime().compareTo(cal.getTime())==0){ 
         //ICI LE PROBLEME (translated: HERE IS THE PROBLEM) 
         for (Join i : result){ 
          if (i.getCardHolderId() != j.getCardHolderId() && i.getFieldTime() != j.getFieldTime()) result.add(j); 
         } 
        } 
       } 

       cal.add(Calendar.DAY_OF_WEEK, 1); 
      } 

      for(Join k : list){ 
       System.out.println(k.getCardHolderId()+"  "+k.getNom()); 
      } 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 
+0

問題を記述してください取得するには、カーソルをフェッチしています。 –

+0

毎日、一人のために、彼が初めてログインしたときに選択する必要があります。それぞれの人はログインのために複数の時間を持つことができます –

+0

初めて選択するときにどのような問題がありますか?あなたは多くのコード(問題にはあまり関係していない可能性が高い)を投げ捨て、あなたの本当の問題が何かを掘り起こすことを期待しています。 –

答えて

1

あなたのデータは、リレーショナルデータベースに格納されている場合は、それを取得するためにSQLを使用することをお勧め典型的であるが含まれています必要なデータ(コード内に検索ロジックを実装しない)あなたのDBの場合のために適応させる -

あなたのデータは、ユーザーごとの最初のログと、あなたはdatetime型の列から日を取得しなければならない日を取得するには(私は、Oracle上で動作TRUNCを使用

 ID LAST_NAME FIRST_NAME FIELD_TIME   
---------- --------- ---------- ------------------- 
     1 A.  A.   01.01.2016 10:20:00 
     2 A.  A.   01.01.2016 12:22:00 
     3 A.  A.   03.01.2016 08:50:00 
     4 B.  B.   01.01.2016 15:08:00 

としているとしユーザーとグループのグループはログ時刻をMINと計算します。

select 
    LAST_NAME, FIRST_NAME, trunc(FIELD_TIME) log_day, min(FIELD_TIME) FIRST_LOG 
from 
    log_time 
group by 
    LAST_NAME, FIRST_NAME, trunc(FIELD_TIME) 
order by 
    1, 2, 3; 

結果は、正確な予想通り、単純なデータが

LAST_NAME FIRST_NAME LOG_DAY    FIRST_LOG   
--------- ---------- ------------------- ------------------- 
A.  A.   01.01.2016 00:00:00 01.01.2016 10:20:00 
A.  A.   03.01.2016 00:00:00 03.01.2016 08:50:00 
B.  B.   01.01.2016 00:00:00 01.01.2016 15:08:00 
+0

私はSQL Serverを使用しています –

+0

これをSQL Serverに適合させることができます –

+0

@Medこれは単体で行うべき基本的な宿題です。ちょっとしたヒント:Googleの "sqlserver datetimeから日付を抽出する"ことがあります。例えばソリューション。 [ここをクリック](http://stackoverflow.com/questions/113045/how-to-return-the-date-part-only-from-a-sql-server-datetime-datatype) –

関連する問題