在java中结合for循环和sql
我有两个输入日期:在java中结合for循环和sql,java,sql,Java,Sql,我有两个输入日期:myStartDate,myEndDate和一个带列的表TEST\u table TEST_ID, TEST_USER,TEST_START, TEST_END 我需要检查myStartDate和myEndDate之间的日期范围在TEST_表中是否有相应的记录。 我还需要确保不检索重复记录 以下是我迄今为止的逻辑示例: 假设 myStartDate=06/06/2012;myEndDate=06/09/2012 int diff = myEndDate - myStartDa
myStartDate
,myEndDate
和一个带列的表TEST\u table
TEST_ID, TEST_USER,TEST_START, TEST_END
我需要检查myStartDate和myEndDate之间的日期范围在TEST_表中是否有相应的记录。
我还需要确保不检索重复记录
以下是我迄今为止的逻辑示例:
假设
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
myStartDate=2012年6月6日;myEndDate=06/09/2012
int diff=myEndDate-myStartDate//在这种情况下=3
String myQuery=“从测试表中选择*,其中测试开始和测试结束之间的“+myStartDate+”或测试开始和测试结束之间的“+(myStartDate+1)+”或测试开始和测试结束之间的“+(myStartDate+2)+”或测试开始和测试结束之间的“+(myStartDate+3)+”;
List myList=新列表();
//Exceute查询&使用add方法将结果保存到myList中
想知道是否有任何方法可以使用java代码中的for循环
来测试myStartDate和myEndDate之间的日期范围,而不是上面在myQuery
中使用的方法。另外,我如何避免重复
Java新手,如有任何帮助,将不胜感激 使用
ResultSet
迭代输出,如下面的代码所示
while (res.next()) {
String col1= res.getString("col1");
String col2 = res.getString("col2");
}
如果使用数组
实现,则不允许重复元素,因此无需检查元素
但如果必须使用列表,则可以使用以下代码删除任何重复的元素
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);
}
我认为您要问的是一些关于如何读取数据库以及如何在java中处理日期的一般性问题。我将在下面给你一些示例代码。但我建议您查看java数据库教程和java.util.Date api文档以了解更多信息 下面是一些示例代码,具体演示了如何实现您的问题:
// 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();
希望这能帮助您入门。java(或其他)中的for循环对所有select结果?都有帮助,是的。要检查重复项,请使用数组并将单个项放入循环中,使用该数组控制下一个项并继续(如果下一个项在see数组中,则丢弃该项)。您不太清楚要选择什么。您想要日期范围与[myStartDate,myEndDate]范围重叠的所有行,还是想要日期范围完全在[myStartDate,myEndDate]范围内的所有行?您的查询目前甚至没有使用myEndDate。