继续下 mySQL 行 JAVA
proceed to next mySQL row JAVA
当我的查询 returns 结果无法检查下一行时,我 运行 遇到了问题。
//here i assume that only "regular" is correct room type
public boolean checkAvalibility(String roomType, String checkInDate, String checkOutDate ) throws SQLException{
database db = new database();
db.connect();
this.roomType = roomType;
if(roomType!="regular"){
System.out.println("please select correct room type");
return false;
}
myStmt = db.myConn.prepareStatement("select * from Rooms where "
+ "RoomType = ?");
myStmt.setString(1, roomType);
myRs = myStmt.executeQuery();
boolean val = myRs.next();
while(val){
if(roomType.equals(myRs.getString("RoomType"))){
System.out.println("correct room type");
isType = true;
}
if(isType == true){
int roomNumber = myRs.getInt("idRooms");
if(checkDateAvailability(checkInDate, checkOutDate, roomNumber)==true){
return true;
}
else{
return false;
}
}
}
System.out.println();
return false;
}
此代码在这里
private boolean checkDateAvailability(String checkInDate,String checkOutDate, int roomNumber) throws SQLException{
database db = new database();
db.connect();
myStmt = db.myConn.prepareStatement("select idRooms, CheckIn, CheckOut from Rooms where "
+ "CheckIn=? AND RoomType=?");
myStmt.setString(1, checkInDate);
myStmt.setString(2, roomType);
myRs = myStmt.executeQuery();
boolean val = myRs.next();
while(val){
//calcDateBeetween simply takes check-in date which is in database and current check-out date converts them to integer value and compares the difference
if(calcDateBetween(checkOutDate, myRs.getString("CheckIn")) <=0 ){
System.out.println("You can book the room");
return true;
}
else{
System.out.println("Dates occupied");
return false;
}
}
if(val==false){
System.out.println("room is available for booking date is empty");
return true;
}
else{
System.out.println("i have no idea of what im doing");
}
return false;
}
作为 pre-requirement,假设我只想拥有两行并且不需要新记录。如果我发送 check-IN(!) 与数据库中的日期(在 Check-in 列中)匹配的日期,那么一切正常,并且我打印出该日期已被占用。但是如果我发送 check-in 值 ex。 23-01-2015 和 check-out 03-02-2015 它不会转到 calcDateBetween()
方法,可能假设如果查询为空则 table 可以更新并且我有打印输出可以预订的日期。在这种情况下有什么解决方案,为什么在第二种情况下不比较日期?
谢谢!
这里有几个问题。而不是
boolean val = myRs.next();
while(val){
写
while(myRs.next()) {
否则,你不是每次都检查是否有更多的行;您只是每次都使用相同的 true 或 false 值。
此外,在您的 while
循环中,您有 return true;
和 return false;
- 其中之一每次都会 运行。这将使您的方法结束,并且您的循环不会再次 运行 。你可能不希望这些 return
语句在那里。
当我的查询 returns 结果无法检查下一行时,我 运行 遇到了问题。
//here i assume that only "regular" is correct room type
public boolean checkAvalibility(String roomType, String checkInDate, String checkOutDate ) throws SQLException{
database db = new database();
db.connect();
this.roomType = roomType;
if(roomType!="regular"){
System.out.println("please select correct room type");
return false;
}
myStmt = db.myConn.prepareStatement("select * from Rooms where "
+ "RoomType = ?");
myStmt.setString(1, roomType);
myRs = myStmt.executeQuery();
boolean val = myRs.next();
while(val){
if(roomType.equals(myRs.getString("RoomType"))){
System.out.println("correct room type");
isType = true;
}
if(isType == true){
int roomNumber = myRs.getInt("idRooms");
if(checkDateAvailability(checkInDate, checkOutDate, roomNumber)==true){
return true;
}
else{
return false;
}
}
}
System.out.println();
return false;
}
此代码在这里
private boolean checkDateAvailability(String checkInDate,String checkOutDate, int roomNumber) throws SQLException{
database db = new database();
db.connect();
myStmt = db.myConn.prepareStatement("select idRooms, CheckIn, CheckOut from Rooms where "
+ "CheckIn=? AND RoomType=?");
myStmt.setString(1, checkInDate);
myStmt.setString(2, roomType);
myRs = myStmt.executeQuery();
boolean val = myRs.next();
while(val){
//calcDateBeetween simply takes check-in date which is in database and current check-out date converts them to integer value and compares the difference
if(calcDateBetween(checkOutDate, myRs.getString("CheckIn")) <=0 ){
System.out.println("You can book the room");
return true;
}
else{
System.out.println("Dates occupied");
return false;
}
}
if(val==false){
System.out.println("room is available for booking date is empty");
return true;
}
else{
System.out.println("i have no idea of what im doing");
}
return false;
}
作为 pre-requirement,假设我只想拥有两行并且不需要新记录。如果我发送 check-IN(!) 与数据库中的日期(在 Check-in 列中)匹配的日期,那么一切正常,并且我打印出该日期已被占用。但是如果我发送 check-in 值 ex。 23-01-2015 和 check-out 03-02-2015 它不会转到 calcDateBetween()
方法,可能假设如果查询为空则 table 可以更新并且我有打印输出可以预订的日期。在这种情况下有什么解决方案,为什么在第二种情况下不比较日期?
谢谢!
这里有几个问题。而不是
boolean val = myRs.next();
while(val){
写
while(myRs.next()) {
否则,你不是每次都检查是否有更多的行;您只是每次都使用相同的 true 或 false 值。
此外,在您的 while
循环中,您有 return true;
和 return false;
- 其中之一每次都会 运行。这将使您的方法结束,并且您的循环不会再次 运行 。你可能不希望这些 return
语句在那里。