Java 检查数据库中是否存在日期
我想检查输入的日期是否已被记录 我试图修复它,但它总是表明,日期已采取,即使它没有 这是刀Java 检查数据库中是否存在日期,java,jdbc,Java,Jdbc,我想检查输入的日期是否已被记录 我试图修复它,但它总是表明,日期已采取,即使它没有 这是刀 public static String getDate(String date) throws SQLException, ClassNotFoundException { Connection cnx; String datee; cnx = Connect.getConnection(); String req = "select date from examen
public static String getDate(String date) throws SQLException, ClassNotFoundException {
Connection cnx;
String datee;
cnx = Connect.getConnection();
String req = "select date from examen where date=?";
PreparedStatement st = cnx.prepareStatement(req);
st.setString(1, date);
ResultSet rs = st.executeQuery();
if (rs.next()) {
String laDate = rs.getString(date);
}
return date;
}
这就是servlet
String dd = ExamDAO.getDate(date);
if (dd != null) {
String datePrise = "la date est prise ";
request.getSession().setAttribute("datePrise", datePrise);
System.out.println("priiiiise ");
response.sendRedirect("examen.jsp");
} else {...}
您总是返回与传递到方法中的日期相同的日期
laDate
未使用,因此您的方法中没有任何工作逻辑
可能是这样的:
\\ I suggest a better query with another name for the 'date' column (needs db change), because using column
\\ names like date can cause problems (reserved keywords/functions in some databases)
"select registrationdate from examen where registrationdate = ?"
或
Optional returnValue=Optional.empty();
结果集rs=st.executeQuery();
如果(rs.next()){
returnValue=Optional.of(rs.getString(“registrationdate”);
}
返回值;
您总是返回与传递到方法中的日期相同的日期laDate
未使用,因此您的方法中没有任何工作逻辑
可能是这样的:
\\ I suggest a better query with another name for the 'date' column (needs db change), because using column
\\ names like date can cause problems (reserved keywords/functions in some databases)
"select registrationdate from examen where registrationdate = ?"
或
Optional returnValue=Optional.empty();
结果集rs=st.executeQuery();
如果(rs.next()){
returnValue=Optional.of(rs.getString(“registrationdate”);
}
返回值;
我想,如果examen.jsp
路径是针对已经采取的日期,那么您的方法将被重写如下。注意额外的声明-stringladate=null代码>&在返回语句中进行更改
另外,请注意laDate=rs.getString(“日期”)中的更改代码>,您需要按列名而不是变量进行提取。表列名是“日期”,而date
是一个携带日期值的变量&而不是表列名
变量<代码>字符串日期如果代码中的“代码>未使用”,则可以将其删除
public static String getDate(String date) throws SQLException, ClassNotFoundException {
Connection cnx;
String laDate =null;
String datee;
cnx = Connect.getConnection();
String req = "select date from examen where date=?";
PreparedStatement st = cnx.prepareStatement(req);
st.setString(1, date);
ResultSet rs = st.executeQuery();
if (rs.next()) {
laDate = rs.getString("date");
}
return laDate ;
}
我想,如果examen.jsp
path是针对已经采取的日期,那么您的方法将被重写如下。注意额外的声明-stringladate=null代码>&在返回语句中进行更改
另外,请注意laDate=rs.getString(“日期”)中的更改代码>,您需要按列名而不是变量进行提取。表列名是“日期”,而date
是一个携带日期值的变量&而不是表列名
变量<代码>字符串日期如果代码中的“代码>未使用”,则可以将其删除
public static String getDate(String date) throws SQLException, ClassNotFoundException {
Connection cnx;
String laDate =null;
String datee;
cnx = Connect.getConnection();
String req = "select date from examen where date=?";
PreparedStatement st = cnx.prepareStatement(req);
st.setString(1, date);
ResultSet rs = st.executeQuery();
if (rs.next()) {
laDate = rs.getString("date");
}
return laDate ;
}
数据库中的日期是什么类型的?日期还是字符串?日期的一个问题可能是格式不同,如2019-05-26或2019年5月26日。或者可能在日期上有一个不相等的时间00:00:00。这会使查找日期变得困难。无论在methodwhich line@JBNizetreturn date中发生了什么,您总是返回输入的日期代码>:返回作为参数传递给方法的日期,无论是否执行if块。@JBNizet哦,是的,我已经初始化了一个名为datee的变量,但没有注意我将date作为返回。数据库中的date是什么类型的?日期还是字符串?日期的一个问题可能是格式不同,如2019-05-26或2019年5月26日。或者可能在日期上有一个不相等的时间00:00:00。这会使查找日期变得困难。无论在methodwhich line@JBNizetreturn date中发生了什么,您总是返回输入的日期代码>:返回作为参数传递给方法的日期,无论是否执行if块。@JBNizet哦,是的,我已经初始化了一个名为datee的变量,但没有注意将日期作为返回。不,我不能,因为我不知道该方法的预期行为。对于我来说,不清楚如果没有找到符合条件的记录,应该返回什么。那么“输入日期”应该返回还是应该为空(那么最好返回一个可选的)。谢谢,我解决了这个问题,它可以工作,但是当我输入一个执行日期时会出现错误,例如,如果我输入“2019-05-25”,它会给出java.sql.SQLException:Column'2019-05-25'找不到是的,我的错误。rs.getString尝试获取列值,而inputDate不是列名。我改变了这个例子。使用更好的名字也是明智的。数据库中的“date”等名称可以是特殊关键字(取决于数据库)。它大约是“rs.getString(date)”;现在应该在guillemethow之间让系统记住重定向后用户输入的数据。我不能,因为我不知道该方法的预期行为。对于我来说,不清楚如果没有找到符合条件的记录,应该返回什么。那么“输入日期”应该返回还是应该为空(那么最好返回一个可选的)。谢谢,我解决了这个问题,它可以工作,但是当我输入一个执行日期时会出现错误,例如,如果我输入“2019-05-25”,它会给出java.sql.SQLException:Column'2019-05-25'找不到是的,我的错误。rs.getString尝试获取列值,而inputDate不是列名。我改变了这个例子。使用更好的名字也是明智的。数据库中的“date”等名称可以是特殊关键字(取决于数据库)。它大约是“rs.getString(date)”;为了让系统记住重定向后用户输入的数据,现在应该在guillemethow之间。谢谢,我解决了这个问题,它可以工作,但是当我输入一个日期时会出现错误,例如,如果我输入“2019-05-25”,它会给出java.sql.SQLException:在我的代码中找不到列“2019-05-25”,请注意行laDate=rs.getString(“日期”);代码>在日期前后加上双引号,使其成为列名而不是列值。现在,我想让系统在重定向后记住用户输入的数据。你能帮忙吗?这是通过会话完成的。您已经在会话中设置了一个属性,可以设置任意多个。是的,我已经设置了会话,但我不知道如何在这种情况下使用它“保存输入”谢谢,我解决了这个问题,它可以工作,但当我输入拍摄日期时会出现错误,例如,如果我输入“2019-05-25”它给出了java.sql.SQLException:在我的代码中找不到“2019-05-25”列,注意行laDate=rs.getString(“日期”)代码>在日期前后加上双引号,使其成为列名而不是列值。现在,我想让系统在重定向后记住用户输入的数据。你能帮忙吗?这是通过会话完成的。你已经准备好了