变量计数器不会随着添加新的预订对象而增加
variable counter is not incrementing with adding new booking objects
// 预订实体 class
public class预订{
private int distance;
private static int bookingId = 1000;
private int cabId;
private int customerId;
private int billingAmount;
public Booking() {
bookingId++;
System.out.println(bookingId);
}
}
//服务class预订,我在这里设置所有参数。
public class书店{
public Booking bookCab(int distance, int customerId){
Booking book = new Booking();
CabDao cabDao = new CabDaoImpl();
book.setDistance(distance);
book.setCustomerId(customerId);
book.setCabId(cabDao.getCabId()); //retrieving cab data from database
if(distance>10) {book.setBillingAmount(305 + (distance-10)*25);}
else if (distance <10 & distance>5) {
book.setBillingAmount(180 + (distance-5)*25);
}
else if (distance <5 & distance>1) {
book.setBillingAmount(100 + (distance-1)*20);
}
else book.setBillingAmount(100);
return book;
}
}
// 这是访问数据库的 DAO 实现。
public class BookingDaoImpl 实现 BookingDao {
Connection connection = null;
PreparedStatement ptmt = null;
ResultSet resultSet = null;
public BookingDaoImpl() {};
private Connection getConnection() throws SQLException {
Connection conn;
conn = DbUtil.getInstance().getConnection();
return conn;
}
public void addBooking(Booking booking) {
try {
String queryString = "INSERT INTO Booking(bookingId, customerId, cabId, distance, chargingAmount) VALUES(?,?,?,?,?)";
connection = getConnection();
ptmt = connection.prepareStatement(queryString);
ptmt.setInt(1, booking.getBookingId());
ptmt.setInt(2, booking.getCustomerId());
ptmt.setInt(3, booking.getCabId());
ptmt.setInt(4, booking.getDistance());
ptmt.setInt(5, booking.getBillingAmount());
ptmt.executeUpdate();
System.out.println("Data Added Successfully");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (ptmt != null)
ptmt.close();
if (connection != null)
connection.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
// 驱动程序 class
public class 主视图 {
public static void main(String[] args) {
BookCab bookCab = new BookCab();
BookingDao bookingDao = new BookingDaoImpl();
bookingDao.addBooking(bookCab.bookCab(16, 691744));
}
}
/*输出
1001
Data Added Successfully
1001
Data Added Successfully
1001
Data Added Successfully
*/
Counter is not working
booking id is not increamenting
我试过在增加后立即打印计数器,但那里也一样。
您只在 main
中创建一个 Booking
实例(或者,准确地说,您创建一个 BookCab
实例并调用 bookCab.bookCab(16, 691744)
,这会创建一个 Booking
实例),这意味着它应该打印 1001.
如果您多次 运行 该应用程序(根据您的输出,我假设您这样做),Booking
class 将在每次执行时加载和初始化,所以它会将计数器重置回 1000。
如果您希望 static
变量的值在应用程序的执行过程中存在,您必须将其保存在某个文件或数据库中 table 并在 Booking
时加载它class 已初始化。
P.S.,您可能希望将当前 bookingId
值存储在某个实例变量中,以便每个 Booking
实例都与唯一的 bookingId
值相关联.
您的主要方法仅创建一个预订,每次您 运行 应用程序时其 ID 为 1001。
在您的 main 方法中创建一个循环以进行多次预订,并检查它是否正在递增。
所以改变你的主从
public static void main(String[] args) {
BookCab bookCab = new BookCab();
BookingDao bookingDao = new BookingDaoImpl();
bookingDao.addBooking(bookCab.bookCab(16, 691744));
}
到
public static void main(String[] args) {
for (int i = 0; i < 3; ++i) {
BookCab bookCab = new BookCab();
BookingDao bookingDao = new BookingDaoImpl();
bookingDao.addBooking(bookCab.bookCab(16, 691744));
}
}
静态变量增量不会帮助您解决这里的整体实施问题,当您为 Booking 创建多个对象时,它只是按您预期的方式工作 class 但这里要注意的是,如果应用程序重新启动会怎样?
计数器设置回起点,即 1000。
@Eran 已经在评论中指出了这个问题。
// 预订实体 class
public class预订{
private int distance;
private static int bookingId = 1000;
private int cabId;
private int customerId;
private int billingAmount;
public Booking() {
bookingId++;
System.out.println(bookingId);
}
}
//服务class预订,我在这里设置所有参数。
public class书店{
public Booking bookCab(int distance, int customerId){
Booking book = new Booking();
CabDao cabDao = new CabDaoImpl();
book.setDistance(distance);
book.setCustomerId(customerId);
book.setCabId(cabDao.getCabId()); //retrieving cab data from database
if(distance>10) {book.setBillingAmount(305 + (distance-10)*25);}
else if (distance <10 & distance>5) {
book.setBillingAmount(180 + (distance-5)*25);
}
else if (distance <5 & distance>1) {
book.setBillingAmount(100 + (distance-1)*20);
}
else book.setBillingAmount(100);
return book;
}
}
// 这是访问数据库的 DAO 实现。
public class BookingDaoImpl 实现 BookingDao {
Connection connection = null;
PreparedStatement ptmt = null;
ResultSet resultSet = null;
public BookingDaoImpl() {};
private Connection getConnection() throws SQLException {
Connection conn;
conn = DbUtil.getInstance().getConnection();
return conn;
}
public void addBooking(Booking booking) {
try {
String queryString = "INSERT INTO Booking(bookingId, customerId, cabId, distance, chargingAmount) VALUES(?,?,?,?,?)";
connection = getConnection();
ptmt = connection.prepareStatement(queryString);
ptmt.setInt(1, booking.getBookingId());
ptmt.setInt(2, booking.getCustomerId());
ptmt.setInt(3, booking.getCabId());
ptmt.setInt(4, booking.getDistance());
ptmt.setInt(5, booking.getBillingAmount());
ptmt.executeUpdate();
System.out.println("Data Added Successfully");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (ptmt != null)
ptmt.close();
if (connection != null)
connection.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
// 驱动程序 class
public class 主视图 {
public static void main(String[] args) {
BookCab bookCab = new BookCab();
BookingDao bookingDao = new BookingDaoImpl();
bookingDao.addBooking(bookCab.bookCab(16, 691744));
}
}
/*输出
1001
Data Added Successfully
1001
Data Added Successfully
1001
Data Added Successfully
*/
Counter is not working
booking id is not increamenting
我试过在增加后立即打印计数器,但那里也一样。
您只在 main
中创建一个 Booking
实例(或者,准确地说,您创建一个 BookCab
实例并调用 bookCab.bookCab(16, 691744)
,这会创建一个 Booking
实例),这意味着它应该打印 1001.
如果您多次 运行 该应用程序(根据您的输出,我假设您这样做),Booking
class 将在每次执行时加载和初始化,所以它会将计数器重置回 1000。
如果您希望 static
变量的值在应用程序的执行过程中存在,您必须将其保存在某个文件或数据库中 table 并在 Booking
时加载它class 已初始化。
P.S.,您可能希望将当前 bookingId
值存储在某个实例变量中,以便每个 Booking
实例都与唯一的 bookingId
值相关联.
您的主要方法仅创建一个预订,每次您 运行 应用程序时其 ID 为 1001。
在您的 main 方法中创建一个循环以进行多次预订,并检查它是否正在递增。
所以改变你的主从
public static void main(String[] args) {
BookCab bookCab = new BookCab();
BookingDao bookingDao = new BookingDaoImpl();
bookingDao.addBooking(bookCab.bookCab(16, 691744));
}
到
public static void main(String[] args) {
for (int i = 0; i < 3; ++i) {
BookCab bookCab = new BookCab();
BookingDao bookingDao = new BookingDaoImpl();
bookingDao.addBooking(bookCab.bookCab(16, 691744));
}
}
静态变量增量不会帮助您解决这里的整体实施问题,当您为 Booking 创建多个对象时,它只是按您预期的方式工作 class 但这里要注意的是,如果应用程序重新启动会怎样?
计数器设置回起点,即 1000。
@Eran 已经在评论中指出了这个问题。