0

2 つの入力日付があります: myStartDate、および列myEndDateを持つテーブルTEST_TABLE

TEST_ID, TEST_USER,TEST_START, TEST_END

myStartDate と myEndDate の間の日付範囲に対応するレコードが TEST_TABLE にあるかどうかを確認する必要があります。また、重複したレコードを取得しないようにする必要もあります。

ここに私がこれまでに持っているロジックのサンプルがあります:

仮定すると、

myStartDate=06/06/2012;myEndDate=06/09/2012
int diff = myEndDate - myStartDate; //In this case = 3

String myQuery = "SELECT * FROM TEST_TABLE WHERE"+ myStartDate +"BETWEEN TEST_START AND TEST_END OR "+ (myStartDate +1) +" BETWEEN TEST_START AND TEST_END OR"+ (myStartDate+2)+"BETWEEN TEST_START AND TEST_END OR"+(myStartDate+3)+"BETWEEN TEST_START AND TEST_END";

List <TestTableData> myList = new List();
//Exceute query & save results into myList using add method

for loop上記で使用したアプローチの代わりに、Java コードを使用して myStartDate と myEndDate の間の日付の範囲をテストする方法があるかどうかを知りたいですmyQuery。また、どうすれば重複を避けることができますか。

Javaは初めてなので、どんな助けでも大歓迎です!

4

2 に答える 2

0

以下のコードのように、 a を使用ResultSetして出力を反復処理します。

while (res.next()) {
        String col1= res.getString("col1");
        String col2 = res.getString("col2");

      }

implementationを使用する場合、Array要素の重複は許可されないため、チェックする必要はありません。

ただし、リストを使用する必要がある場合は、次のコードを使用して重複する要素を削除できます。

public static void removeDuplicates(List list)
  {
    Set set = new HashSet();
    List newList = new ArrayList();
    for (Iterator iter = list.iterator(); iter.hasNext(); ) {
      Object element = iter.next();
      if (set.add(element))
        newList.add(element);
    }
    list.clear();
    list.addAll(newList);
  }
于 2012-06-23T06:09:00.860 に答える
0

あなたが求めているのは、データベースの読み取り方法と Java での日付の処理方法に関する一般的な質問だと思います。以下にサンプルコードをいくつか示します。ただし、Java データベース チュートリアルhttp://docs.oracle.com/javase/tutorial/jdbc/index.htmlと java.util.Date API ドキュメントhttp://docs.oracle.com/javase/を参照することをお勧めします。詳細については、 1.5.0/docs/api/java/sql/Date.htmlを参照してください。

質問を実装する方法を具体的に示すサンプルコードを次に示します。

    // get the input dates
    // they are hard coded in this example
    // but would probably normally be passed in
    String startDateStr = "2/3/03";
    String endDateStr = "3/1/03";

    // unfortunately, there are 2 "Date" classes in this code and you need to differentiate
    // java.util.Date is the standard java class for manipulating dates
    // java.sql.Date is used to handle dates in the database
    // name conflicts like this are rare in Java
    SimpleDateFormat dateFmt = new SimpleDateFormat("M/d/yy");
    java.util.Date myStartDate = dateFmt.parse(startDateStr);
    java.util.Date myEndDate = dateFmt.parse(endDateStr);

    // conneect to the database
    // I am using mysql and its driver class is "com.mysql.jdbc.Driver"
    // if using a different database, you would use its driver instead
    // make sure the jar containing the driver is in your classpath (library list)
    // you also have to know the url string that connects to your database
    Class.forName("com.mysql.jdbc.Driver").newInstance(); // loads the driver
    Connection dbConn = DriverManager.getConnection(
       "jdbc:mysql://localhost/testdb", "(db user)", "(db password)"
    );

    // get the database rows from the db table
    // my table is named "testtable"
    // my columns are named "DateStart" and "DateEnd"
    Statement st = dbConn.createStatement();
    String sqlStr = "Select * from testtable";
    ResultSet rs = st.executeQuery(sqlStr);

    // loop through the rows until you find a row with the right date range
    boolean foundRange = false;
    while (rs.next()) {
        java.util.Date dbStartDate = rs.getDate("DateStart");
        java.util.Date dbEndDate = rs.getDate("DateEnd");
        if (myStartDate.before(dbStartDate)) continue;
        if (myEndDate.after(dbEndDate)) continue;
        foundRange = true;
        break;
    }

    if (foundRange) {
        // code that executes when range is found in db
    } else {
        // code that executes if range not found in db
    }

    dbConn.close();

これが開始に役立つことを願っています。

于 2012-06-23T21:54:52.420 に答える