【发布时间】:2020-04-15 04:40:42
【问题描述】:
我是 Java 编程新手,目前正在制作迷你停车系统。
我正在尝试获取 (carSlotLeft, motorSlotLeft, vanSlotLeft) - 包含当前剩余插槽的变量。我将这些变量用于“SQLConnections”类,然后在不同的“Park”类上使用它
我所做的是合并了我需要的 SQL 结果,因为我会将结果用于不同的类和方法 - 以使事情井井有条。但我无法通过结果。
对于“SQL 连接”类,我还将在不同的方法上使用变量,但是当我尝试调用 (carSlotLeft, motorSlotLeft, vanSlotLeft) 时,它无法获得准确的计算vehicleALLReport()
这是代码。
public class SQLConnections {
public Connection con = null;
//Count of Parked in Vehicles
public int countCar;
public int countMotor;
public int countVan;
//Default Parking Slot Count
public int cDefaultSpace = 10;
public int mDefaultSpace = 5;
public int vDefaultSpace = 5;
//Count for Parking Slot Left per Vehicle Type
public int carSlotLeft;
public int motorSlotLeft;
public int vanSlotLeft;
//Park Vehicle Report Choice
public int pVReport;
Scanner input = new Scanner(System.in);
public void parkStatus() {
con = dbConnect.con();
String qCar = "SELECT COUNT(*) FROM `vehicle` WHERE `vType` = 1 AND `parkout` IS NULL";
String qMotor = "SELECT COUNT(*) FROM `vehicle` WHERE `vType` = 2 AND `parkout` IS NULL";
String qVan = "SELECT COUNT(*) FROM `vehicle` WHERE `vType` = 3 AND `parkout` IS NULL";
try {
Statement stmtCar = con.createStatement();
Statement stmtMotor = con.createStatement();
Statement stmtVan = con.createStatement();
ResultSet rsCar = stmtCar.executeQuery(qCar);
ResultSet rsMotor = stmtMotor.executeQuery(qMotor);
ResultSet rsVan = stmtVan.executeQuery(qVan);
rsCar.next();
rsMotor.next();
rsVan.next();
countCar = rsCar.getInt(1);
countMotor = rsMotor.getInt(1);
countVan = rsVan.getInt(1);
carSlotLeft = cDefaultSpace - countCar;
motorSlotLeft = mDefaultSpace - countMotor;
vanSlotLeft = vDefaultSpace - countVan;
System.out.println("Current Parking Slot Status");
System.out.printf("%-20s %-20s %-20s \n", "Vehicle Type", "Available Slot Left", "Parking Limit");
System.out.printf("%-20s %-20s %-20s \n", "Car", carSlotLeft, cDefaultSpace);
System.out.printf("%-20s %-20s %-20s \n", "Motorcycle", motorSlotLeft, mDefaultSpace);
System.out.printf("%-20s %-20s %-20s \n", "Van", vanSlotLeft, vDefaultSpace);
System.out.printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
} catch (SQLException e) {
e.printStackTrace();
}
}
public void vehicleALLReport(){
int slotAvaiblable = carSlotLeft + motorSlotLeft + vanSlotLeft
System.out.printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
System.out.printf("Available Slots Left -- ", slotAvaiblable);
}
至于“Park Class”——也是一样的。我也无法得到结果。 这是代码
public class Park{
public Connection con = null;
Scanner input = new Scanner(System.in);
SQLConnections sqlConnections = new SQLConnections();
int carSlotLeft = sqlConnections.carSlotLeft;
int motorSlotLeft = sqlConnections.motorSlotLeft;
int vanSlotLeft = sqlConnections.vanSlotLeft;
public void limitCarPark(int vType) {
con = dbConnect.con();
if (carSlotLeft == 0){
System.out.println("No Parking Slot Available!!!\n\n\n");
} else {
Park p = new Park();
p.parkMethod(vType);
}
}
public void limitMotorPark(int vType) {
con = dbConnect.con();
if(motorSlotLeft == 0){
System.out.println("No Parking Slot Available!!!\n\n\n");
} else {
Park p = new Park();
p.parkMethod(vType);
}
}
public void limitVanPark(int vType) {
con = dbConnect.con();
if(vanSlotLeft == 0){
System.out.println("No Parking Slot Available!!!\n\n\n");
} else {
Park p = new Park();
p.parkMethod(vType);
}
}
我错过了什么吗?我做错了什么吗?请帮忙。 非常感谢。
【问题讨论】:
-
看起来你需要在引用 SQLConnections 的实例变量之前调用 parkStatus。要么明确地这样做,要么使其成为 SQLConnections 构造函数的一部分。
-
另外,作为风格问题,您可能希望将 carSlotLeft 设为私有并创建一个方法 getCarSlotLeft() 以返回 carSlotLeft 的值。最好只有一个对象来建立数据库连接。
标签: java sql variables integer public